'pwnable.kr 33번'에 해당되는 글 1건
- 2018.02.21 [webhacking.kr] prob33(200pt)
## prob33(web, 200pt)
[Main]
33번 문제는 뭔가 자잘한 문제들이 여러 개 포함되어 있는 문제였습니다. 우선 문제를 살펴보면 아래 [그림 1]과 같습니다.
[그림 1] 문제 페이지
php 소스코드의 링크가 주어지는데 들어가보면 아래 [그림 2]와 같은 소스코드가 보입니다.
[그림 2] index.phps
소스코드를 보면 "get"파라미터로 "hehe"라는 값이 들어오면 다음 stage로 가는 href 링크가 주어지는 형식이었습니다. 이 조건을 만족시켜주면 아래 [그림 3]과 같이 stage1을 클리어하고 stage2로 가는 링크가 주어지게 됩니다.
[그림 3] stage1 Clear!
이런 식으로 한 단계씩 클리어해 나가면 되는 문제였습니다. stage2는 post변수의 값을 체크하는 조건이 있었고, 이는 burp suite라는 프록시 툴을 이용해 만족시킬 수 있습니다. stage3은 get방식으로 myip라는 인자를 받고, 해당 값과 $_SERVER[REMOTE_ADDR] 변수와 비교하는 조건이 있었습니다. $_SERVER[REMOTE_ADDR]는 공인 IP가 기록되어 있으므로 자신의 공인 아이피를 잘 확인해서 myip라는 인자로 GET방식으로 넘기면 클리어 되었습니다.
이 후 수동으로 하다가 점점 힘들어져 python 스크립트를 이용하여 문제를 풀었습니다.
[prob33.py]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | # -*- coding: utf-8 -*- import requests from time import time import hashlib header = {'Cookie':'PHPSESSID=XXXXXXXXXXXXXX',} if __name__ == '__main__': ## Stage 4 url = "http://webhacking.kr/challenge/bonus/bonus-6/l4.php" m = hashlib.md5() get_time = str(int(time())); print get_time m.update(get_time) params = {'password':m.hexdigest()} req = requests.get(url = url, params = params, headers = header) print req.text ## Stage 5 url = "http://webhacking.kr/challenge/bonus/bonus-6/md555.php?imget=1" header = {'Cookie':'imcookie=1; PHPSESSID=XXXXXXXXXXXXXX',} params = {'impost':'1'} req = requests.post(url = url, data = params, headers=header) print req.text ## Stage 6 url = "http://webhacking.kr/challenge/bonus/bonus-6/gpcc.php" header = {'Cookie':'test='+hashlib.md5("XX.XX.XX.XX").hexdigest()+'; PHPSESSID=XXXXXXXXXXXXXX',} params = {'kk':hashlib.md5("python-requests/2.18.4").hexdigest()} req = requests.post(url = url, data = params, headers=header) print req.text ## Stage 7 url = "http://webhacking.kr/challenge/bonus/bonus-6/wtff.php" header = {'Cookie':'PHPSESSID=XXXXXXXXXXXXXX',} params = {'1641257031':'1641257031'} req = requests.get(url = url, params = params, headers = header) print req.text ## Stage 8 url = "http://webhacking.kr/challenge/bonus/bonus-6/ipt.php" header = {'Cookie':'PHPSESSID=XXXXXXXXXXXXXX',} params = {'addr':'127.0.0.1'} req = requests.get(url = url, params = params, headers = header) print req.text ## Stage 9 url = "http://webhacking.kr/challenge/bonus/bonus-6/nextt.php" header = {'Cookie':'PHPSESSID=XXXXXXXXXXXXXX',} ans = "" for i in xrange(97, 122, 2): ans += chr(i) params = {'ans':ans} req = requests.get(url = url, params = params, headers = header) print req.text | cs |
대충 이와 같은 식으로 풀면 되는데, stage10번과 같은 경우 php를 온라인에서 실행시켜주는 사이트를 이용하면 쉽게 풀 수 있었습니다. 자신의 IP와 같이 개인별로 답이 다를 수 있어 위 코드를 실행시키면 제대로 클리어하지 않을 수 있으니 각 스테이지별 php 소스코드를 확인하시고, 조건에 맞게 맞춰주셔야 합니다.
'Wargame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] prob26(100pt) (0) | 2018.02.21 |
---|---|
[webhacking.kr] prob5(300pt) (0) | 2018.02.21 |
[webhacking.kr] prob4(150pt) (0) | 2018.02.21 |
[webhacking.kr] prob1(200pt) (0) | 2018.02.21 |
[webhacking.kr] prob46(300pt) (0) | 2018.01.26 |