1단계와 같은 환경인데 다른포인트에서 인증값을 얻어야한다.
코드를 쭉 보다보니.
shell_exec('/usr/bin/python '.$BROWSER_BOT.' '.escapeshellarg('http://route.local/?url='.urlencode($url)).' 2>&1');
요부분에서 뭔가 터질것 같았고 url부분을 내가 원하는값으로 완전히 컨트롤할 수 있도록 이전단계에서 했던 방식으로 $url에 messid 파라미터 값만 박힐 수 있도록 해준 뒤 url를 1로 만들어서 넘겨봤다.
입력값이 route.local 서버 경로에 입력되서 요청되고 있는걸 확인할 수 있었다. 대충 SSRF일거라고 느낌이 왔고 일단 뭔가 정보가 더 필요했는데 이전단계에서 호되게 한번 당해서 바로 robots.txt를 요청해봤더니 요렇게 응답이 왔다.
바로 해당파일을 확인해봤더니 요런식으로 코드를 볼 수 있었다.
무슨파일인진 모르겠지만 url값이 존재하면 헤더값에 flag값을 같이 포함시켜서 요청받은 url로 flag를 넘겨주는 코드였다.
일단 해당코드가 어느파일건지 확인해야했는데 다행히 index.php파일이 존재했고 해당파일에 url로 내 서버쪽으로으로 flag를 보내면 됬었다.
근데 문제가 하나더 있었는데
function filter($x){
$x = (string)$x;
if(preg_match('/http|https|\@|\s|:|\/\//mi',$x)){
return false;
}
return $x;
}
요 필터링때문에 http://내아이피 요걸 써줄수가 없었다.
근데 일단 http://는 //로 대체가 가능하기때문에 상관이없었고 //또한 필터링되고 있어 우회를 해야했는데 더블인코딩이 먹히는 상황이라 우회가 가능했다.
이제 내서버에 flag값 읽어서 출력해주는 파일하나만들어놓고 이쪽으로 요청하도록 url값 넘겨줬더니 flag가 출력됬다.
'CTF > Writeup' 카테고리의 다른 글
Codegate 2018 Welcome to droid (0) | 2018.02.09 |
---|---|
Codegate 2018 Simple Cms Write up (0) | 2018.02.04 |
AceBear Security Contest 2018 BearShare 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 |