주요 정보
- 교육 과정명 : 클라우드기반 스마트융합보안 과정 16기
- 교육 회차 정보 : '23. 11. 9. 애플리케이션 보안 #06
참고 정보
- 개인 노트북에 요청변조에 대한 그림 파일 생성(추후 참고)
보완할 점
- 미니 프로젝트(파이썬 크롤링 프로그램 및 장고를 사용한 웹 앱으로 크롤링 출력)
- DVWA 환경에서 취약점 실습 정리 및 칼리 리눅스 취약 프로그램 정리
무엇을 깨달았나
- 요청변조 3가지 접근방식(DVWA 웹 페이지 요청 및 응답 관점). 그림으로 직접 그려가면서 알게되었다.
- HTTP 서버-클라이언트 관계에서 웹 브라우저의 역할(HTML파일을 일종의 설명서로 사용해 요청 생성 및 응답 파싱으로 HTML 파일 생성)
Kali linux - DVWA 환경에서 취약점 기초실습
- Kali linux – DVWA 실행한다. (브릿지 네트워크 사용)
- 프로그램 속도 저하로 교육용 노트북에서 Brup Suite 프로그램 사용한다
- 교육용 노트북/칼리 리눅스 웹 브라우저에서 칼리 리눅스의 eh0 주소 입력 – DVWA 접속
- 칼리 리눅스 I/O 주소, eh0 주소 로 DVWA 접속 가능하지만,
- Brup Suite(커뮤니티 버전) 실행, 기본 세팅으로 시작한다.
- 호스트, 게스트 간 DVWA 접속 가능. 단, 다른 기기 간 접속 불가능(노트북 <-> 컴퓨터)
- DVWA 프로그램을 실행하면, 기본으로 127.0.0.1:8080 (Proxy listeners 설정확인)
Burp Suite의 intercept 기능
- 버프 스위트의 인터셉트 기능이란? 특정 웹 페이지를 웹 프록시 기능
- 버프 스위트의 프록시-인터셉트 창에서 웹 프록시 내용을 확인/수정할 수 있는 기능
- 웹 프록시란? 사용자를 인터넷에서 분리하는 중간 서버 역할.(트래픽 부하, 캐시, 보안 목적으로 사용한다). Response, Request 처리 기능을 한다.
- Proxy – Intercept – Intercept is on을 누르면, 순간 캡쳐 기능으로, 웹 페이지에서 전송한 내용을 버프 스위트 프로그램의 인터럽트 기능으로 요청을 프로그램 Raw 창에서 보여주고, forward 시키지 않는다. (보내지 않고 가지고 있는다.)
- 이후 forward를 계속 누르거나, Intercept is on를 눌러 off 시키면, 계속 진행된다.
- Raw 창에서 요청 내용을 확인하거나, 수정 가능하다.
- 해당 요청을 드래그 해서 원하는 도구로 보내 사용 가능하다.
- DVWA 사이트의 보안 단계 설정 기능 존재.
- view source 내용 비교 가능
1. low : 로그인 재시도 시간 설정 없음, get 방식으로 보냄 등..
2. impossible : 로그인 재시도 시간 설정, post 방식으로 보냄 등..
Request 재전송
- Burp Suite의 intercept 기록, proxy – HTTP history에서 받은 기록을 우클릭으로 Repeater 보낸다.
- Reapeater 항목에서는 웹 페이지가 보냈던 대상(서버)에게 request 요청을 보내 결과값을 받아올 수 있다. (웹 페이지 화면을 render로 보여주는 기능은 유로 버전에서 확인 가능)
호스트 OS에서 Brup Suite 사용 시 인터넷과 동시 사용 방법(인증서 발급 필요)
- proxy setting – CA01.crt 생성 -> 인증서 클릭 -> 인증서 설치(인증서 저장소-다음저장소에 저장-신뢰할 수 있는 루트 인증 기관)
- proxy settings – Proxy listeners – lmport / export CA certificate – lmport – Certificate and private Key in DER format – CA인증서(설치한 인증서가져오기), 인증서 키(인증서 파일 더블클릭, 자세히 – 지문에서 키 복사) - 임포트 완료
- 컴퓨터 수동 프록시 기능을 설정을 켜도 웹 브라우저 접속 가능.
Brup Suite 이용한 DVWA 공격 수행 예시
무작위 공격 Brute force attack
- 무작위 공격이란? 문자열을 무작위로 대입해 웹 서버에 접속하는 공격 방식이다.
- 사용자가 웹 페이지에 로그인 실패 시, 해당 요청을 Burp Suite의 intercept 기능으로 받는다.
- 해당 요청을 모두 드래그 한 후, 우클릭 – Send to Intruder – (민트색이 선택된 부분이다. clear 버튼으로 모두 해제) - 비밀번호 부분만 더블클릭 후 Add – payloads – payloads sets – 페이로드 타입 Brute forcer 사용
- 하단 Payroad settings - character setd서 지정된 문자열의 최소, 최대 사용길이를 무작위로 대입할 것이다.
- start attack을 누르면 선택한 부분(비밀번호)부분만 무작위로 대입한다.
SQL Injection 관련
- GET 방식은 요청 시 공백이 들어갈 수 없다. 그러나 FORM 방식은 공백이 들어갈 수 있어 (1=1 ‘1=1’ 으로 SQL Injection 공백이 들어간 내용을 forward 가능해진다.)
Command Injection 공격
- DVWA의 Ping 테스트 기능 존재한다.
- 해당 기능은, 사용자의 IP를 입력받으면 해당 IP로 Ping 명령어 결과를 반환해준다.
- 만약 Ping 명령어 실행시, 악의적인 사용자가 시스템 내부 파일 조회 등의 악의적인 명령어를 주입 가능할 것이다.
- Enter an IP address 에 (cat /etc/passwd)를 입력하면, 다음 명령어인 cat 명령이 실행되어 passwd 파일을 출력해 보여준다.
- 보안 레벨을 low에서 impossible로 점차 바꿔가며 어떻게 명령어를 걸러 처리하는지 확인
Command Injection View Source at low level
- $_REQUEST(클라이언트 요청 저장 슈퍼글로벌 변수) 사용으로 해당 변수 사용으로, GET, POST 매개변수 그리고 쿠키 값을 모두 접근 가능하다. 슈퍼글로벌 함수 사용으로 시스템 내의 모든 장소에서의 명령어를 호출 가능하다.
- shell_exec 메소드 사용 시, 인자를 필터링 없이 그대로 사용한다. (사용 가능한 명령어의 화이트리스트 사용하지 않음)

Command Injection View Source at impossible level
- POST 방식으로 요청을 가져온다.
- 사용자 입력을 (.)마침표 단위로 4개로 끊는다.( explode 사용으로 문자열 나눔)
- 끊어진 각 자리의 숫자들이 숫자인지 확인한다. (is_numberic)
- 모든 자리의 수가 숫자라면, 다시 해당 요청들을 하나의 문자열로 합친다
- 사용자의 입력을 POST 방식으로 받고, 사용자가 입력한 문자열을 마침표 단위로 분할 후 각 자리의 수가 숫자인지 확인한다. 모든 자리의 수가 숫자라면 ping 명령어를 실행한다.
<?php
if( isset( $_POST[ 'Submit' ] ) ) {
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
$target = $_REQUEST[ 'ip' ];
$target = stripslashes( $target );
$octet = explode( ".", $target );
if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
}
else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
$html .= "<pre>{$cmd}</pre>";
}
else {
$html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
}
}
generateSessionToken();
?>
파일 포함 공격
- 파일을 가져와 내용을 보여주는 기능을 사용하는 환경이다.
- file1.php - file2.php - file3.php 중 원하는 파일을 누르면, 해당 파일을 입력으로 받아 서버로부터 가져와 내용을 출력한다.
- 모든 방식에서 GET 방식을 사용한다는 환경이다.
File Inclusion View Source at low level
File Inclusion View Source at impossible level
- 사용 가능한 page 매개변수를 3가지로만 한정한다.
칼리 리눅스 DB에 접속
- SQL 인젝션 공격이 어떻게 이루어 지는가?
- (파이어폭스 웹브라우저) URL 직접 입력하면 STRING 방식으로 요청이 들어가 ‘ 따옴표가 사용되고, 해당 내용도 사용 가능하다.
- Brup Suite 프로그램 이용해 SQL 공격 수행(웹 페이지 요청을 가져와 임의 값을 넣은 후, forward로 보낸다. ) -> DVWA 웹 페이지에서 SQL 인젝션 결과가 출력된다.
- 위 사진에서 말하고자 하는 것은, SQL 인젝션 공격의 내용은 곧 DB에서 내용을 가져와야 한다. 따라서 DB 내부에서 사용자를 조회하는 명령어를 어떻게든 입력하면 된다.
ZAP 사용
- [자바 JDK 설치] www.oracle.com/kr/java/technologies/downloads/#jdk21-windows
(위치지정 따로 안 함, 그러나 설치 위치가 아래 변수 값처럼 되어야 한다)
- 환경변수 – 시스템 환경변수 추가(변수이름 : EXE4J_JAVA_HOME, 변수 값: C:\Program Files\Java\jdk-21\bin)
- 윈도우에서 [ZAP 프로그램 설치] www.zaproxy.org/download/
MSF 능동적 정보 수집
메타스플로잇 db_nmap
wafw00f
- 칼리 리눅스에서는 기본 방화벽이 없다.
- 해당 프로그램으로 방화벽을 스캔하는 것이다.
- 칼리 리눅스 터미널에서 방화벽 설치 및 리부팅한다. 아파치2 서버 구동을 확인(웹 페이지)
- 외부 브라우저(윈도우, 크롬 등..)접속이 안 된다(웹 페이지) 방화벽이 막혔음.
- 외부 브라우저 URL – 칼리 리눅스 IP를 입력하면 된다(?, 영상 확인)
- 칼리 리눅스 wafw00f에서 다른 가상 환경의 IP를 입력해 다른 가상 환경의 방화벽 확인했다.
- 방화벽 스캔인지, 웹 방화벽 스캔인지??
sqlmap
Netcat을 이용한 리버스 쉘 공격
- 정보보안 산업기사시험에 나왔다.
- 사용자가 공격자를 막는다. 공격자는 사용자에게 접근 불가하지만, 반대로 사용자는 공격자에게 접근 가능. 해당 점을 노려서 공격하는 방식이다.
- 참고 블로그
- 사용자가 공격자의 서버에 접속한다.
- 공격자는 명령어로 사용자를 공격한다. (영상에도 나온다. 참고 14:49)
CSRF 공격
XSS(Reflected)
- 악의적인 스크립트 코드를 웹 앱에 삽입 한다.
- 사용자가 웹 브라우저에서 해당 코드를 실행시키면 클라이언트가 공격한다.
- 이로인해 세션 쿠키를 탈취당할 수 있다.
<script>alert(1)</script>
<script>alert(document.cookie)</script>
- 명령어를 DVWA XSS(Reflected)검색시 현재 security level이 나온다.( 나는 안됌)
CSRF 사용
- 토큰이 없다면 변조 가능하다.
- 토큰 값이란, 프로그램으로 만든 무작위 문자열, 값을 의미한다.
- A라는 사이트에서 생성한 요청, 공격에 토큰이 없다면 변조 가능하다.
low 레벨에서의 CSRF 공격
- source 코드 취약점
1. 세션 검증 없음
- GET 방식 사용
impossible 레벨
user_token, sessio_token 사용
현재 사용자임을 확인하는 비밀번호 재확인 존재
POST 방식 사용
-내 의견
데이터 암호화 필요 (post 방식을 사용해도, 암호화하지 않아 패킷감지 툴로 평문 계정 비밀번호 정보 확인 가능)