본문 바로가기
3. 웹 애플리케이션 취약점 진단/비박스를 활용한 웹 애플리케이션 취약점 진단

[비박스를 활용한 웹 취약점 진단] 1-6. 인젝션 [PHP 코드 인젝션]

by Robert8478 2023. 12. 11.

[난이도 하]

이번 문제는 GET 메서드로 위의 message 값을 변경해서 아래 강조 표시된 message 를 누르면 아래에 해당 값을 띄워준다.
php에서는 exec() 이나 eval() 함수를 사용한 경우 ; 세미콜론을 사용하여 다른 함수를 실행할 수 있는 취약점이 존재한다.
취약점이 있는지 알기 위해서 세미콜론과 system 함수를 사용해보자.
(system 함수는 문자열 형태 명령어를 인자값으로 받아서 해당 명령어를 실행하는 함수다)

?message=HelloWorld;system("whoami") 인자값을 이런 방식으로 넣어보았다. whoami는 시스템에 로그인한 사용자 이름을 출력한다.
system 안에는 문자열 형태 명령어라고 했으니 "" 안에 명령어를 넣어준 것이다.

그랬더니 message 인자값 HelloWorld 뒤에 system 함수로 인한 whoami 명령어 결과가 출력되었다.
; 세미콜론 뒤의 system 함수가 실행된 것이다.
이제 시스템 정보를 얻을 수 있는 다른 명령어들을 입력할 수 있다.
ls나 cat 명령어를 사용해보자.

(ls ../../../ 사용)

(cat을 사용하여 다른 php 코드도 읽어볼수 있었다.)
system 함수 외에도 shell_exec 함수를 사용할 수 있다.
그런데 지금 공격자는 웹 유저로써의 권한(www) 만 가지고 있기 때문에 상위 권한 사용자의 파일은 볼 수 없을것이다.

가장 대표적인 shadow 파일을 cat으로 출력했는데 아무것도 뜨지 않는다. 이걸 보기 위해선 권한 상승 공격 코드를 써야할 것이다.

넷캣을 사용한다면 악의적인 스크립트 파일을 서버에 추가할 수 있을 것이다. 칼리 리눅스로 가서 넷캣 리스닝을 해보자.
우선 그 전에 root 권한 접속을 하자.
sudo passwd  명령어를 친 후 kali 계정의 비번인 kali 입력
그 후 root 비번을 설정해준다
그 다음 su 명령어를 치고 설정한 비번을 입력해서 root 권한을 얻는다.
nc -l -p 7777  : 그 다음 nc 명령어로 7777포트로 리스닝 해주었다.
이제 URL에서 system 함수로 넷캣을 실행해주자. 그러면서 -e 옵션으로 /bin/bash 쉘을 실행시키자.

위처럼 명령어를 넣어주면 될 것이다.

이제 칼리리눅스에서 whoami를 치니 제대로 연결이 된것을 확인할 수 있다. 우선 nc는 보다시피 프롬프트가 없이 빈칸만 나온다.
그래서 'pseudo-terminal' 을 이용해보자.
python -c 'import pty;pty.spawn("/bin/bash")' 명령어를 nc에 입력해보자.

그랬더니 정상적인 터미널처럼 앞에 프롬프트가 보이게 된다. 이제 vi나 gedit 같은 편집기를 이용할 수 있으며 FTP나 SSH 연결을 실행할 수 있다.

이제 echo 명령어로 /var/www/bWAPP 안에 쿠키를 출력하는 html을 하나 만들어보자. 만든 뒤 브라우저에서 해당 html 경로로 이동하면 된다.

echo "<script>alert(document.cookie)</script>" > php.html 명령어로 php.html 파일을 만들어 주었다.

그리고 주소창에 해당 html 파일 경로를 치니 php 세션값이 노출되었다. 이는 피싱을 위한 조작페이지나 악성페이지에도 사용될 수 있다.

[난이도 중]

난이도 중으로 가니 정상적으로 먹혔던 system 명령어가 문자열화 되어 출력되었다. 느낌이 이젠 딱 온다. php 코드를 보자.
이번에도 htmlspecialchars 함수를 이용해 자바스크립트용 구문을 필터링하고 있었다. 그 중에 " 도 필터링이 되기 때문에
system 함수를 쓸 수 없는 것이다.

[난이도 상]
난이도 상도 마찬가지로 htmlspecialchars 함수를 이용해 필터링 하고있다.