목록분류 전체보기 (151)
김승현
문제 저번 문제와 코드에서의 차이점은 pw를 md5로 저장하 것과 id가 admin이고 pw가 일치할 경우 cobolt가 slove되고 그게 아니라면 You are not admin :(라고 출력되는 것 같다. id에 admin을 입력하고 뒤엔 주석처리를 하면 될 것 같다. admin' or %23 위와 같이 입력하게 되면 select id from prob_cobolt where id='admin' or #' and pw=md5('{$_GET[pw]}' 이렇게 입력되기 때문에 id는 admin이라서 참이고 뒤엔 주석처리 되어서 없어지기에 참이 되어 solve된다. #을 %23으로 입력한 이유는 url로 사용할 수 없는 문자나 의미가 왜곡될 수 있는 문자들은 인코딩을 거치는데, 이를 url encodin..
문제 include를 통해 config.php를 로드 login_check();함수 실행 db에 연결함 만약 id에 입력한 값에 /prob, _, ., (, ) 총 다섯 개를 대소문자 구분없이 들어있다면 나가지면서 No Hack이라고 뜨는 문장 같다. preg_match는 정규식 표현 검사하는 함수 아래는 pw에 대해 검사하고 No Hack query에 select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}' 저장 (id와 qw를 동시에 만족하는 걸 찾아야 함) 만약 id가 존재하면, (sqli가 성공했으면) gremlin 문제가 풀린다는 내용이다. . . . 풀이 그냥 query에 저장된 내용을 바탕으로 sqli를 해보면 될 것 같..
문제 DOM XSS를 이용해서 푸는 문제이다. 풀이 접속하면 이렇게 HOME 메뉴가 있고 vuln page, memo , flag가 있다. vuln으로 가보자. 이렇게 생겼다. memo와 flag는 한 번에 보자. 평소에 보던 생김새와 거의 변함이 없다. 소스코드도 거의 변함이 없는데 특히 csp bypass 문제와 거의 같아서 분석은 넘어가려고 한다... ㅎㅎ 그나마 중요하다면 여기 csp 내용이 그나마 중요한데 일단 있다는 거 정도만 기억해두도록 하자. 다운한 파일 중에 vuln.html이 있었는데 그것도 확인해 보자. 잘보면 name 변수에 대해 location.hash.slice(1)} is my name !이라는 코드가 있다. 잘 생각해보면 vuln 페이지에서 비슷한 내용을 봤는 걸 떠올릴 수 ..
문제 flag는 0~9, abcdef까지의 글자를 사용한 32자리라고 한다. 풀이 접속하면 이렇게 home 메뉴와 search, submit이 있다. search의 경우 이렇게 쿼리를 입력할 수 있게 되어 있다. submit의 경우 이렇게 url 입력을 통해 새로운 걸 입력할 수 있는 그런 건 것 같다. 소스코드 분석은 이미 강의에 되어 있기 때문에 넘어가겠다. search.html 여길 보면 검색해서 해당 결과가 존재한다면 새로운 iframe을 생성하는 걸 볼 수 있는데 이를 이용해서 iframe의 개수를 카운트해서 flag를 도출해낼 수 있을 것 같다. exploit code #!/usr/bin/python3 from flask import Flask, request, render_template, ..
문제 이전 문제에서 패치된 내용이라고 한다. 풀어보자. 풀이 접속하면 저번 문제와 비슷한 화면이 뜬다. vuln 페이지를 확인해보자. 아직 아무것도 안 했는데 벌써 nope !!이 떠있다... report로 가보자. 여긴 딱히 다른 점이 없는 것 같다. 소스코드도 확인해보자. 저번 내용과 비슷하니까 저번 코드를 참고하면 좋을 것 같습니다! 암호 : 4xNDYyOD [Dreamhack : Web] Relative Path Overwrite kshind.tistory.com 새롭게 추가된 404.php로 입력된 값을 찾을 수 없다면 not found를 띄우는 것 같다. 그리고 이번에 중요한 점은 filter가 static 폴더 안에 있다. 나머지는 거의 그대로니까 이전 풀이를 확인해보면 될 것 같다. 위 사..
문제 RPO 공격기법을 연습하는 문제이다. 문제 접속하면 이렇게 home, vuln page, report를 볼 수 있고 기본적으로 welcom(e) to rpo world라고 출력되어 있다. vuln페이지는 이렇게 생겼다. 주소의 파라미터를 변경하면 이렇게 다른 값이 출력되는 걸 볼 수 있다. report의 경우 쿠키에 flag를 포함하는 봇이 report한 주소로 접속하게 하는 거고 여기서 아마 공격을 시도하는 것 같다. 이번에는 php 파일들을 살펴보자. (중요한 부분만 보자.) home 메뉴를 누르면 host3.dreamhack.games:[포트]/로 이동하고 vuln page를 누르면 host3.dreamhack.games:[포트]/?page=vlun¶m=dreamhack으로 이동하고 r..
문제 css injection 실습 문제이다. 풀이 접속하면 이런 화면을 볼 수 있다. 오랜만에 보는 새로운 생김새의 웹인 것 같다. memo 엔드포인트로 이동하면 login부터 하라고 한다. register로 가입부터 해보자. guest/guest로 만들어줬다. login하고 memo로 가보면 이렇게 입력창과 Add 버튼이 있다. 아무거나 입력해보자. 이렇게 입력했다. 그냥 아래에 이렇게 뜨는 방식인 것 같다. Report로 가보자. 이렇게 에러가 생기면 신고하는 페이지 같다. 이번엔 오른쪽 위의 mypage를 가보자. uid, username, api Token을 볼 수 있다. logout 버튼은 그냥 로그아웃되는 거다. 근데 uid가 2인 걸 봐선 1인 걸로 로그인 하는 그런 문제인 것 같다.(추측..
문제 풀이 접속하면 이렇게 vuln, memo, flag가 뜬다. 지금까지 풀었던 문제들과 여기선 차이가 그렇게 크지 않다. 소스코드를 확인해보자. 요청을 보내고 브라우저에 응답하기 전 실행되는 내용이다. 잘 보면 script-src에 script-src 'nonce-{nonce}' 'unsafe-eval' https://ajax.googleapis.com 이렇게 적혀 있어서 그냥 간단하게 와 같은 방식으론 할 수 없을 것 같다. 잘보면 eval로 ajax.gooleapis가 있는데 이건 앞선 exploit tech 내용에서 이를 활용하는 방법이 나와 있었다. {{ constructor.constructor("[사용할 스크립트]")() }} 위의 코드로 스크립트를 입력할 수 있다. 위의 코드를 이용해서 ..
문제 풀이 접속하면 이렇게 창이 뜬다. login을 들어가면 이렇게 뜬다. change_password는 로그인을 해야해서 일단 guest/guest에 로그인 했다. 아마 새 비밀번호를 입력 후 change하면 바뀔 것이다. vuln 페이지이다. flag페이지이다. 이번엔 소스코드를 확인해보자. #!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for from selenium.webdriver.common.by import By from selenium import webdriver from hashlib import md5 import urllib import os app = ..
문제 CSP Bypass 문제의 업그레이드 버전이다. 풀이 접속하면 이렇게 vuln, memo, flag 페이지를 볼 수 있다. vuln 부터 가보자. 이렇게 생겼다. memo로 가보자. 이렇게 생겼다. flag로 가보자. 각 엔드포인트들은 지금까지 보던 것들과 완전 똑같이 생겼다. 이번엔 소스코드를 확인해 보자. memo나 flag 같은 페이지는 이전 문제들과 큰 차이점이 없기 때문에 차이점이 있는 내용들만 분석하겠다. nonce 일단 코드 초반부에 unsigned 랜덤값을 16진수로 변환해서 nonce 변수에 저장한다. vuln vuln엔드포인트에서 이전엔 그냥 param을 return하는 방식이었는데 이번엔 html을 render_template를 이용해서 보여주기 때문에 vuln 페이지에서 테스트..