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가 출력됬다.

 

 

 

 

 

 

 

 

 

 

블로그 이미지

JeonYoungSin

메모 기록용 공간

,