본문 바로가기

분류 전체보기

(104)
2025년 C언어 5주차(추가) 1학기 import sys #필요한 것을import해온다stack = [] #스택 생성n = int(sys.stdin.readline())for _ in range(n): x = sys.stdin.readline().strip() #x에 명령어를 집어넣는다. push의 경우 숫자가 함께 들어올 걸 대비하여 strip로 분리한다. if x.startswith('push'): _, y = x.split() stack.append(int(y)) #_는 명령어, y는 숫자값이다. elif x == 'pop': print(stack.pop() if stack else -1) #삼항연산자이다. A if 조건 else B라는..
2025년 1학기 웹해킹 4주차(드림핵) 함께 실습 일단 엔드포인트 /vuln과 /memo는 각각 다음과 같다.@app.route("/vuln")def vuln(): param = request.args.get("param", "") return param@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text, nonce=nonce)엔드포인트:/flagdef read_url(url, cookie={"name": "name", "value": "value"}): cookie.upda..
2025년 1학기 C언어 4주차 def solution(n, wires): from collections import deque #자료구조를 불러옴 def bfs(start, graph, visit): #넓이우선 탐색을 한다 queue = deque([start]) visit[start] = True count = 1 # 시작 노드 포함 while queue: node = queue.popleft() #popleft로 맨 앞을 제거하며 반환한다 for n in graph[node]: if not visit[n]: visit[n] = True ..
2025 1학기 4주차 웹해킹(natas) 13>>14방식은 지난 방법과 비슷하다. 이번엔 gif의 시그니쳐코드를 앞에 넣어준다.GIF89a  그리고나서 버프스위터를 하면 이렇게 된다. 저기서 404어찌구jpg를 php로 바꾼다 저걸 누르면 이렇게 나온다 GIF89a z3UYcr4v4uBpeX8f7EZbMHlzK4UR2XtQ13>>14  그냥 로그인을 누르면 이렇다  소스 코드를 보면 이렇게 생겼다sql관련 문제이다 빈 칸에" or 1=1 # 를 넣으면 다음 단계로 가는 비밀번호가 나온다.   SdqIqBsFcz3yotlNYErZSZwblkm0lrvx natas15  아무거나 누르고 엔터를 치면 다음과 같이 나온다 소스코드를 보니 이런 식으로 뜨는데... 내가 뭔가 쓰라는 것 같기도 하다 버프스위터로 일단 확인해준다import sockethost..
2025년 1학기 웹해킹 3주차(natas) 11>12 저기서 파일 선택을 누르니 이렇게 뜬다  아무것도 안 누르고 upload를 누르니 이런다 코드 내용을 보자면 이렇다. 만약 무언가를 올리면 확장자가 jpg로 변경된다. 그러므로 파일 확장자 필터링 우회, 파일 크기 제한 우회를 하거나 해야한다. 그동안 패스워드는etc/  natas_webpass/natas숫자에 있었으니 이번에도 그렇다고 생각해보자  natas는 php로 만들어져있으니 php언어로 만들어준다.   버프 스위터를 키고 확인해보면 이렇게 자기마음대로 파일 이름이 바뀌고 jpg가 되어있다  혹시 모르니 파일 크기도 키워놓고 다시 php로 만든다   그럼 이렇게 뜬다 누르면 이렇게 비밀번호가 나온다trbs5pCjCrkuSknBBKHhaBxq6Wm1j3LC 12>>13잘 들어가진게 확인된다
2025년 1학기 C언어 3주차 def solution(sizes): #명함들을 가로인 큰 값 x 세로(작은 값) 형태로 정렬한다. sizes = [[max(w, h), min(w, h)] for w, h in sizes] #max_w가 가로이고 max_h가 세로이다.최대 가로 길이와 최대 세로 길이 찾는다. max_w = max(w for w, h in sizes) max_h = max(h for w, h in sizes) # 답을 반환한다. return max_w * max_h   def solution(k, d): #dungeons를 줄여서 d라고 하겠다. max_count = 0 # 탐험 순서를 확인한다. for x in permutations(d): ..
2025년 1학기 웹해킹 3주차(드림핵) Content Security Policy Content Security Policy는 간단하게 말해서 CSP, 컨텐츠 보안 정책이라고 부른다. CSP는 XSS나 데이터를 삽입하는 류의 공격이 발생하였을 때 피해를 줄이고 웹 관리자가 공격 시도를 보고 받을 수 있도록 새롭게 추가된 보안 계층이다. XSS 공격은 브라우저가 서버로부터 전달받은 컨텐츠를 신뢰한다는 점을 이용한다면 CSP는 이를 방지하기 위해 웹 페이지에 사용될 수 있는 자원의 위치, 출처 등에 제약을 걸 수 있다. XSS공격이 브라우저가 서버로부터 받은 컨텐츠를 그대로 받아들인다면 CSP는 그렇지 않다는 뜻이다. 그럼 xss대신 csp만 쓰면 되는 건가 싶지만 그건 아니다. xss가 병행되어야 한다.  CSP 헤더는 1개 이상의 정책 지시문..
2025년 1학기 2주차 C언어 def solution(s): stack = [] #스택을 저장할 배열이다 for x in s:#스택이 끝날 때 까지 for문을 돈다 if x == '(': # 여는 괄호는 스택에 추가 stack.append(x) else: # 닫는 괄호일 경우 if stack: # 스택에 여는 괄호가 있으면 제거 stack.pop() else: # 스택이 비어 있으면 짝이 맞지 않음 return False # 스택이 비어 있으면 올바른 괄호 문자열 return len(stack) == 0   def sol..
2025년 1학기 웹해킹(natas) 10>11일단 저대로 그냥 눌러봤을 때는 아무런 변화가 있지 않았다xor로 보호된다고 한다  코드를 보자면 이렇다버프스위터로 해보니 이렇게 생겼는데 일단 쿠키 값이 저렇다 key값이 eDWo같다  그럼 이렇게 뜬 걸 볼 수 있다  yZdkjAYZRd3R7tq7T5kXMjMJlOIkzDeB  11>12
2025 1학기 웹해킹(드림핵) Exercise: XSS Filtering Bypass 엔드포인트: /vulnvuln함수는 이용자가 전달한 param 파라미터의 값을 출력한다.@app.route("/vuln")def vuln(): param = request.args.get("param", "") param = xss_filter(param) return param xss_fillter는 취약점을 막는다.def xss_filter(text): _filter = ["script", "on", "javascript"] for f in _filter: if f in text.lower(): text = text.replace(f, "") return text 엔드포인트: /me..