SK shieldus Rookies 16기 (애플리케이션 보안#06)

만두다섯개·2023년 11월 12일

SK 루키즈 16기

목록 보기
13/52
post-thumbnail

주요 정보

  • 교육 과정명 : 클라우드기반 스마트융합보안 과정 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
  1. $_REQUEST(클라이언트 요청 저장 슈퍼글로벌 변수) 사용으로 해당 변수 사용으로, GET, POST 매개변수 그리고 쿠키 값을 모두 접근 가능하다. 슈퍼글로벌 함수 사용으로 시스템 내의 모든 장소에서의 명령어를 호출 가능하다.
  2. shell_exec 메소드 사용 시, 인자를 필터링 없이 그대로 사용한다. (사용 가능한 명령어의 화이트리스트 사용하지 않음)

Command Injection View Source at impossible level
  1. POST 방식으로 요청을 가져온다.
  2. 사용자 입력을 (.)마침표 단위로 4개로 끊는다.( explode 사용으로 문자열 나눔)
  3. 끊어진 각 자리의 숫자들이 숫자인지 확인한다. (is_numberic)
  • 모든 자리의 수가 숫자라면, 다시 해당 요청들을 하나의 문자열로 합친다
  • 사용자의 입력을 POST 방식으로 받고, 사용자가 입력한 문자열을 마침표 단위로 분할 후 각 자리의 수가 숫자인지 확인한다. 모든 자리의 수가 숫자라면 ping 명령어를 실행한다.
<?php

if( isset( $_POST[ 'Submit' ]  ) ) {
	// Check Anti-CSRF token
	checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

	// Get input
	$target = $_REQUEST[ 'ip' ];
	$target = stripslashes( $target );

	// Split the IP into 4 octects
	$octet = explode( ".", $target );

	// Check IF each octet is an integer
	if( ( is_numeric( $octet[0] ) ) && ( is_numeric( $octet[1] ) ) && ( is_numeric( $octet[2] ) ) && ( is_numeric( $octet[3] ) ) && ( sizeof( $octet ) == 4 ) ) {
		// If all 4 octets are int's put the IP back together.
		$target = $octet[0] . '.' . $octet[1] . '.' . $octet[2] . '.' . $octet[3];

		// Determine OS and execute the ping command.
		if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
			// Windows
			$cmd = shell_exec( 'ping  ' . $target );
		}
		else {
			// *nix
			$cmd = shell_exec( 'ping  -c 4 ' . $target );
		}

		// Feedback for the end user
		$html .= "<pre>{$cmd}</pre>";
	}
	else {
		// Ops. Let the user name theres a mistake
		$html .= '<pre>ERROR: You have entered an invalid IP.</pre>';
	}
}

// Generate Anti-CSRF token
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 능동적 정보 수집

  • 메타스플로잇 사용 at 칼리 리눅스

메타스플로잇 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. 세션 검증 없음
    1. GET 방식 사용
impossible 레벨

user_token, sessio_token 사용
현재 사용자임을 확인하는 비밀번호 재확인 존재
POST 방식 사용
-내 의견
데이터 암호화 필요 (post 방식을 사용해도, 암호화하지 않아 패킷감지 툴로 평문 계정 비밀번호 정보 확인 가능)

profile
磨斧爲針

0개의 댓글