WebGoat(웹고트) Command Injection
(1) Window xp에서 http://victim:8080/WebGoat/attack 사이트로 이동하여 목록에서 Command Injection을 찾아 이동합니다. (webgoat / webgoat)
(2) 사용자 값이 서버로 전달되는 과정을 확인합니다.
=> 사용자 화면에서 입력 : BasicAuthentication.help(도움말)
=> 서버 내부에서는
cmd.exe /c type "C:\FullstackLAB\workspace\서버경로\WebGoat\lesson_plans\English\BasicAuthentication.html"
=> cmd.exe /c type 운영체제 명령어 실행
=> BasicAuthentication.html 운영체제 명령어(type)의 일부로 외부 입력값이 사용되고 있음
=> 서버 내부에 어떤 형태로 저장되어 있는지 모르도록 처리하기 위해서 BasicAuthentication.html 파일을 사용자 화면속 도움말에서는 BasicAuthentication.help로 출력합니다.
(3) 공격자가 원하는 내용을 얻기 위해 값을 조작합니다.
만약 외부에서 전달된 값을 검증, 제한하지 않고 명령어 실행에 그대로 사용한다면 추가 명령어 실행이 가능할 것입니다.
[공격자가 원하는 내용]
C:\FullstackLAB\tools\apache-tomcat-7.0.109\conf\tomcat-users.xml 파일의 내용이 출력되도록 입력값을 변조해서 전달해보겠습니다.
(3)-1 프록시를 이용하여 서버로 전송되기 전에 값을 변경해줍니다.
도움말을 선택하고 View를 클릭하기 전에 burp suite에서 Intercept is on으로 설정해주고 View를 클릭합니다.
(3)-2 HelpFile 값을 다음과 같이 바꿔주고 Intercept is off로 변경해줍니다.
입력값 > cmd.exe /c type "C:\FullstackLAB\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\WebGoat\lesson_plans\English\BasicAuthentication.html" & type "C:\FullstackLAB\tools\apache-tomcat-7.0.109\conf\tomcat-users.xml"
=> &는 이스케이프 문자로 바꿔줍니다.
=> &를 URL 인코딩해서 전달해야합니다.
(4) 결과 확인
=> 공격자가 원하는 파일 내용이 출력되는 것을 확인할 수 있습니다.
=> 공격자가 원하는 것: tomcat-users.xml 파일 내용
=> 개발자도구(F12)를 사용하여 입력값을 변조해도 동일한 값이 출력됩니다.