본문 바로가기
Security/WEB

WebGoat 실습 ① 설치 및 injection 문제 풀이

by jino22 2020. 8. 27.

틀린 부분이 있다면 언제든지 댓글 남겨주세요! 

 

WebGoat 프로그램 준비 및 실습

- webgoat: Web Proxy Tool.

- proxy: client와 server간 데이터 중계. client PC내에는 로컬 프록시, 외부에는 리모트 프록시가 있음(원격 프록시 서버를 이용하면 클라이언트의 IP주소를 숨길 수 있음)


설치

  • JDK 파일 준비

Oracle site -https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html

webcoat를 설치하기 위해서는 7버전을 설치해야 함!

 

설치후 컴퓨터의 고급 시스템 설정 > 고급 > 환경변수 > PATH

jdk 환경변수 path설정

새로만들기를 클릭하여 JAVA bin의 경로를 추가한다

 

  • Burp Suite 설치
    -Community Edition으로 다운!

WebGost -https://github.com/WebGoat/WebGoat/releases/download/7.1/webgoat-container-7.1-exec.jar

-경로를 알 수 있는 곳에 다운

 

cmd(명령 프롬포트)를 열어 webgost파일을 설치한 위치로 이동한 후 java -jar webgoat-container-7.1-exec.jar 입력
-서버가 접속된 것 이므로 실습을 하는 동안 끄면 안됨

cmd

 


실습

Burp Suite 프로그램을 실행시킨 후 Proxy > Options에서 포트 번호를 바꿔줘야 함 

포트번호 8080 > 8181로 변경

intercept메뉴에서 intercept is off로 만든 후 open browser 클릭 후 http://localhost:8080/WebGoat/login.mvc 를 복사해서 접속하면 로그인창이 뜸

로그인(ID=guset, PW=guest)을 하면 다음과 같은 창이 뜬다 

로그인 후 창

  • 사용하는 방법

intercept를 꺼놓은 상태

intercept를 on으로 바꿔 서버로 보내지는 패킷을 잡는다

on으로 한 상태에서 webgoat의 버튼을 눌러 패킷을 보내면 burp suite상에 뜨게 된다

interrupt를 켜고 GO! 버튼을 누른 상태

post요청을 위한 인자값은 request header의 맨 아래 별도 요청으로 전달


injection 문제 풀이

1. string SQL injection 

테이블의 모든 데이터 확인 -항상 참으로 만들어줌 (Null 이거나 Null=Null 이면 True) => ' or ''='

SQL구문 last_name=? 에서 물음표에 들어갈 부분만 적으면 된다

String형식이어야 하므로 '따옴표' 를 잘 맞출것

1' or '1'='1

 

2. Numeric SQL injection

테이블의 모든 데이터 확인 -항상 참으로 만들어줌 

101 or 1=1

 

3. Stage1: String SQL injection

올바른 암호를 사용하지 않고 Neville 계정으로 로그인

(입력했던 패스워드)' or 1='1

 

4. Stage3: Numeric SQL injection

Larry로 로그인하여 프로필을 확인하면 Larry의 프로필이 아닌 Neville의 프로필이 뜨도록 해라

Neville의 행이 테이블의 가장 마지막에 존재하므로 order by desc를 이용하여 맨 뒤의 사용자가 출력되도록 함

패스워드 larry
or 1=1 order by employee_id desc

 

5. Commend injection

메타문자를 이용해 cmd에서 여러 명령어를 실행시키도록 함

cmd에서 type "test.txt"&ipconfig"" 이 되는 것을 응용 (쌍따옴표는 리눅스 환경에서 에러나는 것을 방지하기 위해)

Params 옵션에서 helpfile을 AccessControlMatrix.help & ipconfig로 바꾼 경우 

그냥 & ipconfig만 덧붙이면  명령어 실행이 되지 않음.

ExecResults for 'cmd.exe /c type "C:\Users\Cho\Downloads\.extract\webapps\WebGoat\plugin_extracted\plugin\CommandInjection\resources\AccessControlMatrix.html"' 에 명령어를 넣어야 하므로 따옴표를 이용한다 

AccessControlMatrix.help" & ipconfig

RAW에서는 아스키 코드 %26 를 이용하여 작성한다 

 

 

6. Log injection

잘못된 로그를 주입시켜 혼선을 주기 위함 => HTTP Response Splitting(HTTP응답 분할)

%0D(CR, Carriage Return), %OA(LF, Line Feed) -> 줄바꿈 문자(개행문자)를 이용하여 응답을 분할하는 방식 이용

(이를 이용한 공격 = sloworis, XSS, DoS)

user name에 guest를 입력하여 로그인 한 경우
guest%0d%0aLogin succeeded for username: guest

 

 

 

* sql injection 할 때 테이블명, 컬럼명, 속성값 등을 알 수 없음 어떻게 알아내지? ->blind sql injection 

* 대응방법: 필터링 (but 우회가능), prepared statement(sql쿼리문을 선처리하여 이후 입력되는 값들을 문자열 변수로 취급)객체를 통한 방어, 화이트 리스트

728x90
반응형

'Security > WEB' 카테고리의 다른 글

JWT(JSON Web Token)  (0) 2024.02.27
[Dreamhack] SQL Injection bypass WAF Advanced  (1) 2022.09.24
SMTP PORT  (0) 2022.07.01
아파치 톰캣 (Apache and Tomcat)  (0) 2022.07.01
WebGoat 실습 ② 자동화 스크립트  (0) 2020.08.31

댓글