White Security
PingService 문제풀이 본문
b00t2root 2019 web 3번
RCE 문제입니다.
접속하면 위와 같은 메시지를 보실 수 있는데
로컬에서 보낸 패킷이라고 여기게 하면 됩니다.
X-Forwarded-For 헤더를 변조하여 해결하였는데요.
이는 프록시를 통해 통신할 경우에 사용되는 헤더로
실제 통신하는 프록시 서버에서는 연결자의 IP를
위 헤더에 첨가해 호스트로부터 응답자를
식별할 수 있도록 하는 역할을 합니다.
따라서 127.0.0.1로 설정해주고
다시 패킷을 전송해 봅니다.
페이지와 그 소스가 출력되는데 상단에 ping을 보내어
응답을 확인할 수 있도록 하는 폼이 보입니다.
서버가 존재하지 않는 IP를 입력해 테스트해 보면
Not Alive 문자열이 나타나는 것을 볼 수 있습니다.
정확하게는 shell_exec를 통해 실행된 명령 응답에서
100% packet loss 라는 문자열이 포함되어 있으면 Not Alive를
그렇지 않으면 Alive를 출력하는 구조인데요.
clean() 이라는 함수를 통하여
일차적으로 정규식 검증이 이루어지지만
%0a 뒤에 들어가는 내용에 대해서는
검사를 하지 않는다는 것을 확인하였습니다.
추가로 clean() 은 인자의 공백을 제거하는 역할도 하는데
스페이스 대신에 탭 문자를 넣음으로서 우회가 가능합니다.
따라서 서버의 포트를 열어두고
netcat으로 flag.php 파일의 내용을 전송하도록 하면
서버에서 수신이 가능했습니다.
'CTF Writups' 카테고리의 다른 글
TimeWarp 문제풀이 (0) | 2019.03.31 |
---|---|
eXquisite Scenery Sites 문제풀이 (9) | 2019.03.30 |
Set Me Free 문제풀이 (0) | 2019.03.30 |
Easy PHP 문제풀이 (0) | 2019.03.30 |
neverlanctf 2019 - React to this writeup (0) | 2019.02.04 |
Comments