해당 문제와 같은 경우 소스코드를 제공해 주고 있어서 다운받아 분석을 해봤다.
전체적인 흐름은 간단한 PHP MVC 형태의 웹 어플리케이션인데 일단 코드상에서 취약점이 터질만 한건 SQLI랑 LFI 두개 정도였다. 둘 다 해당 취약점들에 대해 필터링하는 코드들이 존재하고 있었고 SQLI는 아무리봐도 트릭류로 우회가 가능할 것 같은게 보이지가 않아서 일단 접어놓고 LFI쪽으로 계속 분석을 해봤다.
일단 필터코드는 아래와 같은 형태로 함수가 존재했다.
일단 상위경로같은 경우는 단순 치환이라 ....//같은 형태로 우회가 가능했고 NULL값을 치환하고 맨뒤 4글자가 html인지 확인하는건 로그인 시 세션 고정상태라 내가 요청한 값으로 세션이 세팅되서 세션파일로 우회하면 되겠다고 생각했다.
여기까지 생각하고 MVC형태에 맞춰서 아래와 같이 공격을 진행했다.
먼저 로그인 시 요청세션을 123html 요런식으로 보낸다음 아래와 같은 형태로 요청을 했다.
http://dm1536803965686.fun25.co.kr:23907/....//....//....//....//....//....//....//var/lib/php/sessions/sess_123html
요렇게 보내면 MVC 형태에 맞춰서 http://dm1536803965686.fun25.co.kr:23907/index.php?p=....//....//....//....//....//....//....//var/lib/php/sessions/sess_123html 요렇게 자동으로 rewrite처리되서 lfi가 터질거라고 생각했는데 잘 안됬다. 그래서 한참 고민하다가 아예 그냥 아래처럼 직접 index.php에 요청을 해봤더니 정상적으로 session파일이 include되는걸 볼 수 있었다.
이제 그냥 RCE하면 되겠다고 생각했는데 로그인할때 계정명에 공백이랑 _가 필터되고 있어서 아래와 같은 형태로 PHP Jail류 풀때 쓰던걸 떠올려서 로그인 계정 만들고 현재 디렉토리 내 파일을 봤더니 플래그가 있었다.
'CTF > Writeup' 카테고리의 다른 글
Codegate 2018 CTF RedVelvet (0) | 2018.09.18 |
---|---|
BugsBunny CTF 2017 Rev150 (0) | 2018.09.17 |
LAYER7 CTF 2018 url routing (0) | 2018.09.17 |
Meepwn CTF Quals 2018 OmegaSector (0) | 2018.07.17 |
Meepwn CTF Quals 2018 Ezchallz (0) | 2018.07.16 |