#OWASP WebGoat
#웹해킹 실습
#명령어삽입 취약점
#Command Injection
#운영체제명령어삽입
#owasp-zap
#HTTP 프록시
#경로조작
#HTML 삽입
#A1-Injection
#A3-Cross-Site Scripting (XSS)
WebGoat 명령어삽입 (Command Injection) 실습설명서
이 문서는 WebGoat 7.0.1의 "Injection Flaws " > "Command Injection "의 실습 설명서이다.
웹브라우저가 전달하는 사용자의 입력값을 서버가 검증하지 않고 exec() 와 같이 운영체제 명령어를 호출하는
함수에 전달할 때 발생할 수 있는 문제점을 배울 수 있다.
WH-WebGoat-7.0.1 웹해킹 훈련장을 구동한다.
구동에 관해서는 WH-WebGoat-7.0.1 라이브 ISO 문서를 참조한다.
여기서 WebGoat 훈련장의 IP주소는 192.168.189.238 이다.
WebGoat 실행이 완료되면 파이어폭스(FireFox) 웹브라우저로 훈련장에 접속한다.
훈련장 URL은 http://192.168.189.238:8080/WebGoat/ 이다.
그리고 OWASP ZAP을 실행한다.
firefox http://192.168.189.238:8080/WebGoat/
owasp-zap 2&> /dev/null
Firefox의 Preference > Adanaced > Network > Settings...에서
HTTP 프록시를 OWASP-ZAP의 프록시 포트인 127.0.0.1:8080에 연결한다.
Injection Flaws: Command Injection 공략 (수동점검)
Firefox 웹 브라우저로 WebGoat의 Command Injection 실습문제에 접속해보자.
[ ↑ WebGoat Command Injeciton: 첫 화면 ]
AccessControlMatrix.help 따위의 파일을 열람하는 기능이다.
그런데 홈페이지에 서비스가 어떻게 구현되었는 지를 보여준다.
ExecResults for '[/bin/sh, -c, cat "/root/.extract/webapps/WebGoat/plugin_extracted/plugin/CommandInjection/resources/AccessControlMatrix.html"]'
이 전달문을 보면 /bin/sh -c cat 파일이름 과 같이
cat 명령어를 이용하고 있다는 것을 파악할 수 있다.
실제 취약점점검 현장에서도, 서버 설정이 부주의한 경우에, 오류 표시에서 이러한 중요정보를 접속자에게
노출시키기는 경우를 종종 발견하게 된다.
cat 명령어 실행방식을 보면, 대상 파일이름을
큰따옴표(") + 지정된 디렉토리 + 사용자가 선택한 파일이름 +
큰따옴표(") 와 같이 만드는 것을 알 수 있다.
위와 같은 관찰로부터 파일이름" & 명령어 & " 와 같은 명령어 삽입을 시도할 수 있다.
이러한 시도는 서버에서는
/bin/sh -c cat "/디렉토리/파일이름" & 명령어 & ""
와 같은 명령어로 전환된다.
참고로 마지막 큰따옴표(")도 반드시 삽입해주어야 한다.
입력하지 않으면 서버에 전달된 문자열에서 & 로 구분되는 마지막 명령어는 큰따옴표(") 하나만으로 구성된다.
이는 쉘스크립트 해석기에서 문법 오류(syntax error)를 발생시킨다.
문법오류가 발생하면 쉘은 명령어를 실행하지 못한다.
한 개의 큰따옴표(" )는 문법 오류지만 두 개의 큰따옴표("" )는
- 명령어가 널(null)이므로 실행을 시킬 수는 없겠지만 -
문법적인 오류는 아니기 때문에 이전 명령어들을 정상적으로 실행된다.
이제 Firefox에 연결시킨 OWASP-ZAP의 멈춤 (가로채기) 기능 이용하여
서버로 전달되는 값을 조작해보자. 상단의 동그란 녹색 단추를 누르면 된다.
[ ↑ WebGoat Command Injeciton: HTTP 프록시에서 가로채기 ]
FireFox가 WebGoat 서버로 전달하려던 HTTP 요청은 다음과 같았다.
GET http://192.168.189.238:8080/WebGoat/attack?Screen=288&menu=1100&HelpFile=AccessControlMatrix.help&SUBMIT=View HTTP/1.1
Host: 192.168.189.238:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: */*
Accept-Language: en-US,en;q=0.5
X-Requested-With: XMLHttpRequest
Referer: http://192.168.189.238:8080/WebGoat/start.mvc
Cookie: JSESSIONID=C8248ABD080623DF6BC1E1B5C3D1C6B9
Connection: keep-alive
OWASP ZAP에서 GET으로 전달되는 HelpFile 변수값을
HelpFile=AccessControlMatrix.help%22%26id%26%22 와 같이 조작한다.
HTTP 요청에서 변수 값은 이런 식으로 URL 인코딩해서 보내는 것이 좋다. 예를 들어 & 의
경우에는 HTTP 요청에서 URL 변수 구분자이므로 입력에서 인코딩하지 않은 &는 잘못된 데이타를 전달하게 될 것이다.
URL 인코딩을 벗기고 보면 HelpFile=AccessControlMatrix.help"&id&" 이다.
[ ↑ WebGoat Command Injeciton: id 명령어 삽입에 성공한 모습 ]
HelpFile=AccessControlMatrix.help%22%26id%26%22 로 조작했을 때
id 명령어 실행결과도 포함되어 있는 것을 확인할 수 있다. (root 권한이다!!!)
이제 공격자는 다양한 명령어를 입력하여 웹 브라우저만으로도 root 권한 으로 웹서버를
불법 점유할 수 있게 된다.
Injection Flaws: Command Injection 공략 (OWASP ZAP의 자동점검)
일반적으로 명령어삽입 취약점은 웹취약점 스캐너들이 매우 잘 탐지하는 편이다.
OWASP ZAP의 이력(History) 탭에서 다음 URL 접속에 대한 HTTP요청을 찾아서 공격을 해보자.
http://192.168.189.238:8080/WebGoat/attack?Screen=288&menu=1100&HelpFile=AccessControlMatrix.help&SUBMIT=View
[ ↑ WebGoat Command Injeciton: OWASP ZAP에서 Active Scan 시작 ]
단일 HTTP 요청을 대상으로 자동점검을
실행하려면 해당 요청을 선택하고 오른쪽 마우스 단추를 눌러서
공격 -> Active Scan... 을 선택한다.
다음 화면에서 Start 를 누른다.
[ ↑ WebGoat Command Injeciton: OWASP ZAP의 Active Scan 결과 ]
그 결과는 위와 같다.
명령어 삽입 취약점 이외에도 경로조작(Path Traversal), 반사형 XSS(Reflected Cross-site Scripting) 등의 공격도
가능함을 알 수 있다.
OWASP ZAP이 접근한 URL과 취약점 점검에 사용한 변수 값은 다음과 같다.
- Cross-site Scripting (Reflected)
http://192.168.189.238:8080/WebGoat/attack?Screen=288&menu=1100&HelpFile=%3C%2Fb%3E%3Cscript%3Ealert%281%29%3B%3C%2Fscript%3E%3Cb%3E&SUBMIT=View
HelpFile 변수 입력값: </b><script>alert(1);</script><b>
- Path Traversal
http://192.168.189.238:8080/WebGoat/attack?Screen=288&menu=1100&HelpFile=..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2F..%2Fetc%2Fpasswd&SUBMIT=View
HelpFile 변수 입력값: ../../../../../../../../../../../../../../../../etc/passwd
- Remote OS Command Injection
http://192.168.189.238:8080/WebGoat/attack?Screen=288&menu=1100&HelpFile=AccessControlMatrix.help%22%26cat+%2Fetc%2Fpasswd%26%22&SUBMIT=View
HelpFile 변수 입력값: AccessControlMatrix.html"&cat /etc/passwd&"
[처음 작성한 날: 2016.12.15]
[마지막으로 고친 날: 2016.12.15]
< 이전 글 : WebGoat XSS: Phishing with XSS (2016.12.11)
> 다음 글 : WebGoat: Numeric SQL Injection (2016.12.16)
이 저작물은 크리에이티브
커먼즈 저작자표시 4.0 국제 라이선스에 따라 이용할 수 있습니다.
잘못된 내용, 오탈자 및 기타 문의사항은 j1n5uk{at}daum.net으로 연락주시기 바랍니다.
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ ..
...... ... ... ] .. [ .../ ..../ ......./ ..
./// ../ ... .. ...
.. -- -- | - .. .... | ... / .. .../ ... {] . .. .. .. ..| ...... .../ .../ .. ./// ../ ... .. ...
...| ..../ ./ ... / ..| ....| ........ / ... / ....
...... ... ... ] .. [ .../ ..../ ......./ .....| ..../ ./ ... / ..| ....| ........ / ... / ....
...| ..../ ./ ... / ..| ....| ........ / ... / ....
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
|