의미없는 블로그
SSRF(Server Side Request Forgery) 본문
SSRF에서 Forgery는 위조라는 뜻이다
즉 '서버 측 요청 위조'라는 뜻으로 알면 되겠다
서버가 악의적인 요청을 직접 날리도록 공격한다
서버가 의도치않게 악의적인 요청을 날리게 되므로 요청 위조라고 하는게 아닌가 싶다
CSRF와의 차이는 CSRF는 클라이언트 단에서 악의적인 요청을 날리게 되는것이고
SSRF는 서버 단에서 악의적인 요청을 날리게 된다
이를 통해서 공격자가 직접 접근 불가한 내부망 대역을 스캔하거나.. 등등 할 수 있다(또 뭐 할 수 있을까)
테스트 환경 구성은 아래와 같이 했고
공격자가 외부망(XVWA)에 존재하는 SSRF 취약점을 통해 내부망(bWAPP)에 접근하는 시나리오이다
공격자는 외부망(XVWA)만 접근 가능하고 내부망(bWAPP)은 접근 불가한 상태
XVWA만 bWAPP 접근 가능
그러므로 여기서 서버는 XVWA라고 보면 되겠다
공격자가 XVWA를 공격해서 XVWA가 악의적인 요청을 직접 날리게 한다~~
여기서 악의적인 요청이란 공격자가 직접 접근 불가한 내부망 대역을 스캔하는 것 이라고 보면 되겠다
내부망 대역을 스캔해서 bWAPP을 찾아내서 bWAPP의 중요 정보 등까지 획득 하는 것
-------------------------------------------------------------------------------------------------------------
#PC1
내부망 : VMware - bWAPP
외부망 : Local - XVWA
#PC2
공격자 : Local
1) bWAPP 구축방법
얘는 내부망이니까 VMware에 구축한다(PC1의 로컬만 접근 가능, PC2는 직접 접근 불가)
https://sourceforge.net/projects/bwapp/files/bee-box/ 여기서 bee-box_v1.6.7z 다운로드 받았다
압축해제 해서 Vmware에서 Open a Virtual Machine 에서 bee-box.vmx 파일 불러옴
네트워크 Bridged로 되어있어서 NAT로 바꿔줘야 함(바꾸고 VM 실행 또는 재부팅)
Virtual Machine Settings - Network Adapter - NAT
키보드도 벨기에로 되어있어서 코리안으로 바꿔줘야 함(재부팅 안해도 됨)
VM 실행시킨담에 System - Preferences - Keyboard - Layouts - Add - Layouts: Korea, Republic of - 디폴트로 설정하고 Close
bWAPP - Start 를 더블클릭해서 실행시키고
로컬에서 VM 아이피로 접속해서 잘 들어가지는지 확인
2) XWVA 구축방법
얘는 외부망이니까 로컬에 구축한다(PC2에서 접근 가능하도록 나중에 설정할거임)
일단 xampp 설치한다
https://www.apachefriends.org/download.html 에서 PHP 5.6.40, 윈도우 32bit 짜리 버전 받았다
그담에 XVWA 소스코드 다운받는다
https://github.com/s4n7h0/xvwa
소스코드 압축해제해서 C:\xampp\htdocs 아래에 xvwa로 이름 변경해서 넣는다
/xvwa/header.php 18라인에 xvwa 삭제 //최신소스 업뎃되면서 이부분 해결된듯 함
/xvwa/config.php $dbname에 test로 변경(왜냐하면 xampp 에서 사용하는 mysql의 dbname이 test다)
/xvwa/vulnerabilities/ssrf_xspa폴더에 images 폴더 생성
XAMPP Control Panel 실행해서 Apache - Config - PHP(php.ini) - allow_url_include=On 으로 변경(RFI를 가능하게 하기 위함)
XAMPP Control Panel 실행해서 Apache, MySQL 두개 Start
http://localhost/xvwa 로 잘 들어가지는지 확인
PC2에서도 접속되게 하려면 PC1 CMD에서 아래 명령어로 포트포워딩 해준다
netsh interface portproxy add v4tov4 listenport=80 listenaddress=PC1 아이피 connectport=80 connectaddress=127.0.0.1
PC1 방화벽에서 80포트 오픈도 해준다
Windows 방화벽 - 고급 설정 - 인바운드 규칙 - 새 규칙 - 포트 - 특정 로컬 포트(80) - 연결 허용
PC2에서 http://PC1 아이피/xvwa 로 잘 들어가지는지 확인
-------------------------------------------------------------------------------------------------------------
이제 공격자(PC2)는 XVWA에 접속해서 SSRF 취약점을 찾는다
SSRF 취약점은 여기저기 있을텐데 일단 File Inclusion 메뉴가 가장 괜찮은거 같아서 이걸로 하겠다
File Inclusion 메뉴에서 Click here 누르면 file 이라는 파라미터가 생기는데 쟤가 SSRF 취약점이 존재하는 파라미터이다
해당 페이지를 버프로 잡아서 file 파라미터에 내부망 IP를 하나 넣어본다
존재하는 IP일 때와 존재하지 않는 IP일 때 응답값 길이와 응답속도가 다르다
Blind SQL 인젝션 하는것처럼 참/거짓 반응에 따라 존재하는 IP를 찾아 가면 된다
사실 내부망 대역부터 하나씩 찾아가는게 맞지만 그냥 찾았다고 치고 간다~~
아래는 존재하는 IP일 때이다(192.168.64.141 - bWAPP)
아래는 존재하지 않는 IP 입력했을 때이다
이로써 XVWA 뒷편의 내부망에 192.168.64.141(bWAPP)이 존재한다는 것 알아냈다
사실 이건 HTTP 80 포트 기준으로 스캔한거라 볼 수 있는데
21, 22, 25 등 다른 포트 기준으로도 스캔할 수 있다
21포트 스캔 시 열려있으면 아래와 같이 에러 페이지에 FTP 버전정보 노출됨
22번 포트도 오픈되어 있어서 버전정보 노출됨
23번 포트는 닫혀있어서 아무것도 안나온다
무튼 이런식으로 열려있는 포트들 찾을 수 있고
HTTP(80)에서 192.168.64.141(bWAPP)을 찾았으니까 여기에 존재하는 주요 파일 같은게 있는지 또 스캔한다
샘플 페이지 및 파일 리스트를 가지고 Brute-Forcing 해보자
샘플 페이지 들어갈 부분에 Add$
응답값 길이로 나열해 보면 /phpmyadmin, /drupal/web.config 가 존재하는것 알 수 있다
file 파라미터에서 /phpmyadmin 까지 입력해보면 아래와 같이 phpmyadmin 페이지 뜨고 서버 버전정보도 노출된다
/drupal/web.config 는 입력 시 결과가 안보이는데 소스보기 통해 보면 파일 내용 볼 수 있다
일단 접근 불가한 내부망 서버(bWAPP)에 접근한다는 시나리오로 테스트를 해 봤는데
좀더 크리티컬한 느낌을 위해서 원격 명령어 실행을 시도해봤으나
원격 명령어가 XVWA 서버를 거쳐서 내부망(bWAPP)에 전달되는 과정에서 특수문자 # 등이 제대로 전달되지 않는 문제가 있었다
왜그런지는 모르겠지만 무튼 그랬음
'# 나 > pentest (WEB)' 카테고리의 다른 글
Part 04. 침해사고 분석 및 대응 - snort, iptables (0) | 2019.05.08 |
---|---|
Part 03. 어플리케이션 - DNS, HTTP, FTP, SNMP, DHCP (0) | 2019.05.07 |
AD 서버 원격 명령어 테스트 (1) | 2019.04.10 |
PsExec 로 원격 명령어 실행 (0) | 2019.01.21 |
WMI 로 원격 명령어 실행 (1) | 2019.01.18 |