틀린 부분이 있다면 언제든지 댓글 남겨주세요!
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
새로만들기를 클릭하여 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 입력
-서버가 접속된 것 이므로 실습을 하는 동안 끄면 안됨
실습
Burp Suite 프로그램을 실행시킨 후 Proxy > Options에서 포트 번호를 바꿔줘야 함
intercept메뉴에서 intercept is off로 만든 후 open browser 클릭 후 http://localhost:8080/WebGoat/login.mvc 를 복사해서 접속하면 로그인창이 뜸
로그인(ID=guset, PW=guest)을 하면 다음과 같은 창이 뜬다
- 사용하는 방법
intercept를 on으로 바꿔 서버로 보내지는 패킷을 잡는다
on으로 한 상태에서 webgoat의 버튼을 눌러 패킷을 보내면 burp suite상에 뜨게 된다
post요청을 위한 인자값은 request header의 맨 아래 별도 요청으로 전달
injection 문제 풀이
1. string SQL injection
테이블의 모든 데이터 확인 -항상 참으로 만들어줌 (Null 이거나 Null=Null 이면 True) => ' or ''='
SQL구문 last_name=? 에서 물음표에 들어갈 부분만 적으면 된다
String형식이어야 하므로 '따옴표' 를 잘 맞출것
2. Numeric SQL injection
테이블의 모든 데이터 확인 -항상 참으로 만들어줌
3. Stage1: String SQL injection
올바른 암호를 사용하지 않고 Neville 계정으로 로그인
4. Stage3: Numeric SQL injection
Larry로 로그인하여 프로필을 확인하면 Larry의 프로필이 아닌 Neville의 프로필이 뜨도록 해라
Neville의 행이 테이블의 가장 마지막에 존재하므로 order by desc를 이용하여 맨 뒤의 사용자가 출력되도록 함
5. Commend injection
메타문자를 이용해 cmd에서 여러 명령어를 실행시키도록 함
cmd에서 type "test.txt"&ipconfig"" 이 되는 것을 응용 (쌍따옴표는 리눅스 환경에서 에러나는 것을 방지하기 위해)
그냥 & ipconfig만 덧붙이면 명령어 실행이 되지 않음.
ExecResults for 'cmd.exe /c type "C:\Users\Cho\Downloads\.extract\webapps\WebGoat\plugin_extracted\plugin\CommandInjection\resources\AccessControlMatrix.html"' 에 명령어를 넣어야 하므로 따옴표를 이용한다
RAW에서는 아스키 코드 %26 를 이용하여 작성한다
6. Log injection
잘못된 로그를 주입시켜 혼선을 주기 위함 => HTTP Response Splitting(HTTP응답 분할)
%0D(CR, Carriage Return), %OA(LF, Line Feed) -> 줄바꿈 문자(개행문자)를 이용하여 응답을 분할하는 방식 이용
(이를 이용한 공격 = sloworis, XSS, DoS)
* sql injection 할 때 테이블명, 컬럼명, 속성값 등을 알 수 없음 어떻게 알아내지? ->blind sql injection
* 대응방법: 필터링 (but 우회가능), prepared statement(sql쿼리문을 선처리하여 이후 입력되는 값들을 문자열 변수로 취급)객체를 통한 방어, 화이트 리스트
'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 |
댓글