드림핵
-
DreamHack 1단계 basic_exploitation_001DreamHack 2021. 7. 14. 14:07
DreamHack 1단계 basic_exploitation_001 문제를 풀어보겠다. 위 그림에서 NX 보호 기법이 활성화 되어있음에 따라 쉘 코드가 실행되지 않다는 것을 알 수 있다. main 함수 : buf 에 0x80만큼 사이즈가 할당되는데, 128 바이트가 할당된다. 그리고 initialize 함수가 실행되고, gets 로 buf 를 입력을 받는다. initialize 함수를 보면, 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램을 종료한다. read_flag 함수 : system 명령어로 flag 값을 보여준다는 것을 알 수 있다. 즉, 호출하는 부분이 없으므로, 강제로 호출해야 한다. 스택의 기본 구조는 Buffer + SFP (4Byte) + RET (4Byte) 이다. ..
-
DreamHack 1단계 basic_exploitation_000DreamHack 2021. 7. 14. 13:04
DreamHack 1단계 basic_exploitation_000 문제를 풀어보겠다. main 함수 : buf 에 0x80만큼 사이즈가 할당되는데, 128 바이트가 할당된다. 그리고 initialize 함수가 실행되고, printf 로 buf 의 주소를 출력해주고, scanf 를 통해서 입력을 받는다. initialize 함수를 보면, 실행되고 30초가 지나면 Time Out 메시지를 출력하고 프로그램을 종료한다. buf 의 크기는 128 바이트가 할당되는데 scanf 로 입력받는 바이트는 141 바이트이므로, 버퍼 오버플로우(BOF) 가 발생할 수 있다. 스택의 기본 구조는 Buffer + SFP (4Byte) + RET (4Byte) 이다. buf 의 크기는 128 Byte 이고 SFP 의 크기는 4..
-
DreamHack 1단계 path traversalDreamHack 2021. 7. 11. 20:51
DreamHack 1단계 path traversal 문제를 풀어보겠다. Path traversal 취약점은 디렉터리 인덱싱과 비슷한 문제이다. 입력된 userid 값은 위 그림에서 볼 수 있듯이, /api/user/{userid} 에 저장된다. FLAG 는 /api/flag 에 저장이 된다. 저장된 값은 /api/user/{userid} 에 FLAG 값은 /api/flag 에 저장이 되기 때문에, ../flag 를 입력해보겠다. ../flag 을 입력하고 보면, 실패한 것을 알 수 있다. 실패한 이유를 보기 위해, Burp Suite 를 실행시키고 Intercept ON 으로 한다. View 를 클릭하면, userid = undefined 로 되어있는 것을 알 수 있다. undefined 를 ../fla..
-
DreamHack 1단계 xss-1DreamHack 2021. 7. 11. 19:02
DreamHack 1단계 xss-1 문제를 풀어보겠다. 접속을 하면 세 페이지가 나오는데, vuln 함수는 필터링이 없어서 xss 가 가능하다. memo 함수는 flag 에 입력한 값이 성공시 출력되는 페이지이다. 왜냐하면, memo 함수에서 이미 hello 라는 문자열이 있기 때문에 쿠키 값이 존재한다고 생각할 수 있다. flag 함수는 스크립트 언어를 기입하여, 공격하는 페이지이다. 이렇게, 각각의 페이지를 확인할 수 있다. read_url 함수를 보면 이 함수에서 쿠키가 생성이 되고, domain 이 127.0.0.1:8000 이다. 우리가 제공받은 주소와 포트도 다르기 때문에 쿠키 값에는 저장되어 있지 않다. 따라서 127.0.0.1:8000 에서 확인을 해야한다. check_xss 함수를 보면 ..
-
DreamHack 1단계 file-download-1DreamHack 2021. 7. 11. 18:40
DreamHack 1단계 file-download-1 문제를 풀어보겠다. flag.py 를 다운받는 문제인데, 우선 file 이 어떻게 Upload 되는지 확인하기 위해 임의로 Upload 를 수행해보겠다. 임의로 만든 flag.py 를 다운받은 URL 을보면, read 함수에서 name 파라미터에 Filename = flag.py 인 Memo 를 다운한 것을 볼 수 있다. 또한, read 함수에서 try 문에서 open 메소드 안에 " UPLOAD_DIR / filename " 을 확인할 수 있듯이, 업로드 된 파일들의 디렉터리가 filename 바로 위 디렉터리인 것을 알 수 있다. 그러므로 URL 에서 name=../flag.py 로 수정하겠다. FLAG 값이 출력되는 것을 볼 수 있다.
-
DreamHack 1단계 simple_sqliDreamHack 2021. 7. 11. 18:04
DreamHack 1단계 simple_sqli 문제를 풀어보겠다. 문제 파일을 보면, guest, admin 계정이 있다는 것을 알 수 있고, login 함수에서 "을 기준으로 문자열을 구별한다는 것을 알 수 있다. userid = admin 으로 로그인 시, FLAG 가 출력된다. 따라서, userpassword 는 모르는 상태이고, userid = admin 으로 SQL Injection 을 통해 FLAG 를 얻어야 한다. SQL Injection 방법은 여러가지가 있는데, 그 중에서 --를 통해 뒤쪽 쿼리문을 주석처리하는 방법과 or "1" = "1" 을 통해 항상 참이 되게 하는 방법 또는 UNION 을 쓰는 방법 등등 여러가지 방법이 있다. 그 중에서 주석처리 방법을 사용하겠다. Burp Sui..
-
DreamHack 1단계 cookieDreamHack 2021. 7. 11. 17:19
DreamHack 1단계 cookie 문제를 풀어보겠다. 문제 파일에서 users 는 guest, admin 두 개로 있다는 것을 알 수 있다. 접속하고 guest로 로그인이 가능한지 확인을 해본다. 페이지 소스 보기를 통해 guest / guest 로 로그인이 가능하다는 것을 볼 수 있다. guest / guest 로 로그인을 수행해보겠다. guest 로그인을 통해 쿠키 값이 생긴 것을 볼 수 있다. 쿠키 값을 얻었으니 value를 admin 으로 수정을 해보겠다. 그 후, 새로 고침을 하면 FLAG 값이 나오는 것을 볼 수 있다.