1. 엔트포인트 분석/vulncsrf1과 마찬가지로 파라미터를 소문자로 변경 후에 xss 공격을 막기 위해 필터링을 합니다.@app.route("/vuln")def vuln(): param = request.args.get("param", "").lower() # 이용자가 입력한 param 파라미터를 소문자로 변경 xss_filter = ["frame", "script", "on"] # 세 가지 필터링 키워드 for _ in xss_filter: param = param.replace(_, "*") # 이용자가 입력한 값 중에 필터링 키워드가 있는 경우, '*'로 치환 return param /flagGET 요청일 경우에는 flag 페이지를 렌더링..
1. 엔드포인트 분석/vuln사용자가 입력 받은 파라미터를 소문자로 변경 후에, 필터링을 통해 xss 공격을 차단합니다.@app.route("/vuln") # vuln 페이지 라우팅 (이용자가 /vuln 페이지에 접근시 아래 코드 실행)def vuln(): param = request.args.get("param", "").lower() # 이용자가 입력한 param 파라미터를 소문자로 변경 xss_filter = ["frame", "script", "on"] # 세 가지 필터링 키워드 for _ in xss_filter: param = param.replace(_, "*") # 이용자가 입력한 값 중에 필터링 키워드가 있는 경우, '*'로 치환 return ..
문제 설명render_template을 우회하여 플래그 값을 구하라 페이지 설명모든 엔드포인트는 xss-1 문제와 똑같은 구성으로 이루어져 있다. 아래의 포스트를 참고하여 파악해보자https://e-dl.tistory.com/65 [워게임] xss-1 : innerHTML 풀이문제 설명XSS 기법을 사용하여 쿠키에 저장된 플래그 값을 탈취하자. 페이지 설명/ : 인덱스 페이지입니다./vuln : 이용자가 입력한 값을 출력합니다./memo : 이용자가 메모를 남길 수 있으며, 작성e-dl.tistory.com 달라진 점은 /vuln 의 코드이다@app.route("/vuln")def vuln(): return render_template("vuln.html")사용자가 입력한 param 값을 바로 리턴..
문제 설명XSS 기법을 사용하여 쿠키에 저장된 플래그 값을 탈취하자. 페이지 설명/ : 인덱스 페이지입니다./vuln : 이용자가 입력한 값을 출력합니다./memo : 이용자가 메모를 남길 수 있으며, 작성한 메모를 출력합니다./flag : 전달된 URL에 임의 이용자가 접속하게끔 합니다. 해당 이용자의 쿠키에는 FLAG가 존재합니다./vuln 페이지에 접속하면 param 자리에 script 를 작성한 것이 제대로 작동하는 것을 확인할 수 있다.여기서 vuln의 코드를 보게 되면 사용자가 입력한 파라미터를 바로 return 하기 때문에 이것이 바로 XSS 취약점이 될 수 있는 것이다.@app.route("/vuln")def vuln(): param = request.args.get("param", ..
https://dreamhack.io/wargame/challenges/267 devtools-sources개발자 도구의 Sources 탭 기능을 활용해 플래그를 찾아보세요. 플래그 형식은 DH{...} 입니다. Reference Tools: Browser DevToolsdreamhack.io 주어진 웹 폴더에서 devtools를 사용하여 플래그를 찾아내면 되는 문제다이렇게 파일을 다운받아주고, index.html을 크롬으로 열어본다.그러면 아래와 같은 화면이 나오는데, 여기서 ctr + shift + J 를 눌러서 개발자 모드를 열어준다.sources에서 ctrl + shift + F 를 눌러 전체 파일에서 검색하는 기능을 켜주고,아래의 화면처럼 DH를 검색하면 출제자가 주석처리 해놓은 플래그를 볼 수..
1. 문제 요약바이너리가 레지스터에 반환하는 값을 디버깅으로 찾는 문제이다.출력문이라면 디버깅을 하지 않고도 문자열만을 검색하여찾을 수 있지만,바이너리가 해당 문자열을 레지스터에다가 반환하기 때문에 디버깅 사용은 필수이다.2. 문제 풀이GDB 디버거 연결우선 기본적으로 바이너리를 디버거로 열어준다.이렇게 열어줘야 정상적으로 열린다. (나는 처음에 모르고 위에 Tool Chest에 있는 Debugger를 눌렀더니 계속 빈 프로젝트 파일만 오픈이 되었다.)그 후에 디버거 메뉴에서 GDB LOCALLY IN-VM을 열어 디버거를 우분투의 GDB와 연결시켜준다.그러고 일단 starti 메뉴를 체크하고 실행을 시켜준다. 여기까지가 항상 기본 작업이다.브레이크 걸기가장 먼저 해주어야 할 것은, 동기화이다.Ghidr..
1. 문제 이해 해당 프로그램을 실행시켰을 때 플래그가 출력되지 않고 숨겨져 있음을 알 수 있다. 그래서 디버거를 사용하여 출력 함수 다음으로 실행되는 함수가 어떤 데이터를 갖고 있는지 알아내야 한다. 2. 문자열 검색 Below function takes the flag as an argument :) 는 그냥 봐도 20바이트는 넘기 때문에 문자열 검색의 minimum 값을 20으로 설정하고 찾아본다. 3. 문자열 참조 그러면 우리가 찾고자 했던 문자열의 위치로 이동할 수 있고, 문자열이 쓰여 있는 곳이 곧 메인 함수이기 때문에 우리는 문자열 참조를 하여 메인 함수의 위치로 이동할 수 있다. 4. 디버깅 디컴파일된 메인함수를 보면 출력 함수 밑 부분에 FUN_004015e2 라는 함수가 어떤 데이터를 ..
1. 문제 이해 우선 simple_patch_me 파일을 실행시켜서 동적분석을 하게되면 1년이 지난 후 플래그를 알려주는 프로그램이라는 것을 알 수 있다. 그러면 우리는 I will show you the flag after 1 year :p 라는 문자열을 찾기만 하면 main 함수로 이동할 수 있을 것이다. 2. 문자열 검색 Search - Search for Strings 를 클릭해서 문자열의 길이가 15 바이트가 넘으니 최소 길이를 15로 설정하고 검색해주면 우리가 찾고자하는 문자열을 찾을 수 있다. 마찬가지로 한 번 클릭해주고 창을 닫아준다. 3. 문자열 참조 그러면 어셈블리 코드에서 해당 문자열이 사용된 위치로 이동해있는데, 그 상태에서 우클릭을하여 그 문자열을 참조하고 있는 함수를 찾아 해당 ..