반응형
문제분석 & 풀이
페이지에 접속하면 name을 입력하는 창이 나온다.
코드를 확인해보면, name을 POST 형식으로 서버에 전송한다.
다음으로 php 코드를 확인해보자.
name으로 전송한 값을 $id에 저장하고 system 명령을 실행한다. 주석을 보면 목표는 ls 명령을 실행하는 것이라고한다.
우리가 이용할 취약점은 OS Command Injection이다.
○ OS Command Injection
공격자가 임의의 시스템 명령어를 주입하여 서버단에서 원하는 명령을 실행하는 공격을 뜻한다. 웹 애플리케이션에서 system(), exec()와 같은 시스템 명령어를 실행할 수 있는 함수들이 이와 같은 취약점을 제공한다.
문제에서 system()를 사용하고 있고 $id에 대한 검증이 없으므로 OS Command Injection이 가능하다.
다만, system()의 인자를 보면 "echo 'hello! {$id}'" 로 구성되어 있고 내부에서 ' 를 이용하여 감싸주는 문구가 있기 때문에 이것을 우회하는 payload를 구성해야한다.
필자가 구성한 payload는 다음과 같다.
echo 'hello! ';'ls'
';'ls가 전송한 값이다.
위와 같이 전송하면, echo 명령과 ls 명령이 ; 을 기준으로 구분되고 2가지 명령을 모두 실행할 수 있다.
';'ls
payload를 전송해보자.
반응형