View
https://dreamhack.io/wargame/challenges/605
네트워크 패킷 파일을 분석하여 FLAG를 획득하는 문제이다. 문제 파일을 받으면 dump.pcap 파일 하나를 받을 수 있다.
Wireshark를 통해서 dump.pcap을 열어보면 POST 메소드로 SQL 쿼리를 여러 번 보낸 것을 확인할 수 있다.
해당 쿼리문들이 URL 인코딩 되어있어 어떤 쿼리인지 확인하기 위해서는 URL 디코딩을 해야할 것 같다.
URL 인코딩, URP Encoding
- URL에서 URL로 사용할 수 없는 문자 혹은 URL로 사용할 수 있지만 의미가 왜곡될 수 있는 문자들을 %XX 형태의 16진수 값으로 변환하는 것
- URL 디코딩 (URL Decoding)은 변환된 URL을 다시 원래 형태로 되돌리는 것
URL 인코딩/ 디코딩이 필요한 이유
- 인터넷을 통해 전송할 수 있는 문자는 오로지 ASCII 문자이기 때문에 ASCII 문자가 아닌 문자는 인터넷 통해 전송할 수 있는 형태로 변환 해줘야 함 (ex. 한글의 경우 ASCII 문자가 아니므로 변환 필요, 변환 규칙은 UTF-8을 따른다.)
- ASCII 문자여도 예약된 의미 가지고 있는 문자의 경우, 그 문자 자체의 의미를 전달하고 싶은 경우에는 이스케이프 처리가 필요하다.
대표적으로 /, &, = 등의 문자가 있다.
/ : URL 각 레벨 구분
& : 쿼리 파라미터들 구분
= : 쿼리 파라미터 값 지정
위 문자들은 ASCII 문자이지만 URL 내에서 예약된 의미를 가지고 있음
이러한 문자들을 문자 자체의 의미로 전달하고 싶으면 이스케이프 처리가 필요하다.
ex) & 문자를 보낼 때 이스케이프 해주지 않으면 쿼리 파라미터 구분자로 인식, 때문에 & 문자 그대로 보내고 싶으면 %26으로 인코딩하여 전달해야 &문자가 전달 (예약된 의미 X)
※ URL에서는 공백 문자 허용되지 않음, 공백 문자는 %20 또는 + 로 인코딩
Cyberchef 에서 인코딩된 문자열 두 개를 디코딩 해보면 SQL문 쿼리를 확인할 수 있다.
SELECT IF(ASCII(SUBSTRING((SELECT flag FROM s3cr3t LIMIT 1),36,1))=15, SLEEP(3), 0)
해당 SQL문을 해석해보면 아래와 같다.
- ASCII(SUBSTRING((SELECT flag FROM s3cr3t LIMIT 1),36,1)
- s3cr3t 테이블에 있는 flag 열의 첫 번째 레코드를 가져오고 가져온 flag 값에서 36번째 값을 추출 후 ASCII 코드 반환한다.
- SELECT IF(ASCII(...))=15, SLEEP(3), 0)
- 36번째 값의 ASCII 코드 값과 15가 일치하는지 확인
- 일치하면 3초 쉬고 (SLEEP) 일치하지 않으면 0을 반환
이를 봤을 때 네트워크 패킷 파일에서 보내진 쿼리들은 FLAG 값의 문자들을 ASCII 값으로 비교하여 일치하는 ASCII 값을 찾아 데이터베이스에 있는 FLAG 값을 알아내기 위한 쿼리문으로 보인다.
때문에 해당 쿼리문들 중 일치하는 쿼리를 모두 분석하여 값들을 찾으면 FLAG를 얻을 수 있을 것으로 보인다.
Zui 를 사용하여 패킷 파일을 보면 _path 가 conn - http - files 순으로 통신이 이뤄진 것을 확인할 수 있다.
위에서 디코드 한 쿼리를 봤을 때 일치하는 값이면 3초를 SLEEP 하기 때문에 . _path 가 conn인 패킷에 있는 duration 부분이 3초 이상인 패킷만 필터링하여 검색하였다.
검색된 _path 가 conn인 패킷의 uid 값과 _path 가 http 인 패킷의 uid값이 일치하는 것들을 찾아 쿼리들을 분석하면 FLAG를 얻을 수 있을 것이다.
일치하는 쿼리들을 보면 문자열의 길이는 총 39이고 ASCII 코드 값을 문자로 바꾸면 FLAG를 얻을 수 있다.
GoN{T1mE_B4s3d_5QL_Inj3c7i0n_wI7h_Pc4p}
duration이 3초 이상인 conn 패킷 필터링 이후에는 노가다를 해서 쿼리문 분석을 했다.
가능하다면 Python 코드를 짜서 해보는 것도 좋을 것 같다.
'Forensic' 카테고리의 다른 글
[H4CKING GAME] Forensics 카테고리 문제 풀이 (2) | 2023.11.20 |
---|---|
[Dreamhack] Enc-JPG 문제 풀이 (0) | 2023.10.02 |
[Dreamhack] video_in_video 문제 풀이 (0) | 2023.09.28 |
[Dreamhack] palm 문제 풀이 (0) | 2023.09.25 |
[Dreamhack] Snowing! 문제 풀이 (0) | 2023.09.18 |