들어가보면 메시지 입력하는 기능과 해당 메시지를 다운로드하는 기능이 있다.
여기서 처음에 입력값을 xml형태로 보내면 파싱해서 뿌려주길래 xxe겠네 하면서 계속 시도를해봤는데
external Entitiy가 활성화가 안되있어서 뭐 어쩔수가 없었다.
여기서 한참 멘붕에 빠져있다가 혹시몰라서 robots.txt들어가봐더니 그냥 소스를 볼수있었다. ㅡㅡ
ctf풀때는 무조건 한번은 그냥 접근해봐야 될것같다.
download.txt 소스를 보면 다음과 같은데 처음에 shell_exec부분에서 escapeshellarg가 취약점을 터질것 같아서
시도해봤는데 버전이 5.2점대가 아니라 취약점이 안터졌었다.
그래서 storagesy 파라미터 부분을 gimmeflag로 만들어야 했는데 위의 validate_hash함수에서 차단을 당하고
있었다. nonce 파라미터로 인해 만들어진 key값으로 storagesy 파라미터값이 동적으로 계속 세팅되기 때문에
마지막 if($final_hash !== $_POST['hash']){ die('Cannot verify server');} 요영역에서 계속 필터링이 걸릴 수
밖에 없었다.
이걸 우회를 해야하는데 hash_hmac함수에서 뭔가 터져줘야할것같았다. php함수들은 인자로 문자열대신
배열이 오는경우 예상하지못한 결과가 자주나와서 일단 $S_KEY = hash_hmac('sha256',$_POST['nonce'],$S_KEY);
요 부분에서 2번째 파라미터값을 배열로 주게되며 어떻게되는지 로컬에서 테스트를 해봤다.
두번째 인자로 배열이 들어오면 에러가터지면서 함수가 제대로 동작안하는걸 볼 수 있었고 에러가터질경우
리턴값이 NULL로 떨어지는걸 확인할 수 있었다.
그렇다면 KEY값이 NULL값이기때문에 storagepy 파라미터값이 gimmeflag일때의 hash값이 고정되어진
상황이었고 해당값을 구해서 넘겨주니 flag가 나왔다.
'CTF > Writeup' 카테고리의 다른 글
Codegate 2018 Simple Cms Write up (0) | 2018.02.04 |
---|---|
AceBear Security Contest 2018 BearShare2 Write up (0) | 2018.01.29 |
Plaid CTF 2013 ropasaurusrex Write up (0) | 2018.01.28 |
Insomni'hack teaser 2018 VulnShop Write up (0) | 2018.01.23 |
Codegate 2017 RamG-thunder (0) | 2018.01.20 |