이 도구를 이용하여 허용받지 않은 서비스 대상으로 해킹을 시도하는 행위는 범죄 행위입니다. 해킹을 시도할 때에 발생하는 법적인 책임은 그것을 행한 사용자에게 있다는 것을 명심하시기 바랍니다.
A7 - Server Side Request Forgery (SSRF)
서버 측 요청 변조(SSRF)는 공격자가 서버 측 애플리케이션이 의도하지 않은 위치에 요청을 하도록 유도할 수 있는 웹 보안 취약점입니다. 일반적인 SSRF 공격에서 공격자는 서버가 조직의 인프라 내에서 내부 전용 서비스에 연결하도 록 할 수 있습니다. 다른 경우에는 서버를 임의의 외부 시스템에 강제로 연결하여 권한 부여 자격 증명과 같은 민감한 데이터가 유출될 수 있습니다.
ssrf.php 페이지를 살펴보면 아래와 같이 세 가지 항목으로 나뉘어져 있습니다.
1. RFI를 사용하여 내부 네트워크의 호스트를 검색합니다.
2. XXE를 사용하여 내부 네트워크의 리소스에 액세스합니다.
3. 내 삼성 스마트 크래시XXE를 사용하는 TV(CVE-2013-4890)
SSRF 유형 중 RFI로 비박스 서버의 포트를 스캐닝하는 방법으로, 해당 취약점을 테스트하기 위해서는 'rlfi.php' 페이지에 접속을 해야 합니다. RFI에 사용할 PHP 코드는 윈도우 비박스 가상 환경 기준으로 'C:\bWAPP\evil' 디렉터리에 존재하고 있습니다.
1. RFI를 사용하여 내부 네트워크의 호스트를 검색합니다.
'ssrf-1.txt' 파일을 살펴보면 포트 스캐닝 후 그 결과를 출력하는 PHP 코드로 이루어져 있습니다. 스캔하는 포트를 배열로 선언하여 주로 사용하는 9개의 포트가 열려 있는지 확인하고, PHP 코드가 실행되면 "U 4r3 0wn3d by MME!!!\"라는 내용의 스크립트를 출력합니다. 또한 sockopen을 위하여 'IP' 변수가 필요하므로 URL에 'IP' 변수를 추가하고 포트를 스캐닝할 웹 서버의 IP 주소를 입력하여 주어야 합니다. 그럼 'rlfi.php' 페이지로 이동하여 취약점을 확인해 보도록 하겠습니다.
rlfi.php 페이지에 접속후 취약한 변수인 language에 ssrf-1.txt 경로를 입력하여 줍니다. 해당 경로는 ssrf.php 페이지에서 1번 항목인 Port scan 글씨를 눌러서도 확인이 가능합니다.
http://localhost/bWAPP/rlfi.php?language=http://localhost/evil/ssrf-1.txt&action=go&ip=localhost
스크립트 코드가 실행되면 "U 4r3 0wn3d by MME!!!"라는 메시지를 출력하고 확인 버튼을 누르면 포트 스캔 결과가 출력되는 것을 확인할 수 있습니다.
2. XXE를 사용하여 내부 네트워크의 리소스에 액세스 합니다.
XML 외부 엔터티 주입(XXE)은 공격자가 응용 프로그램의 XML 데이터 처리를 방해할 수 있는 웹 보안 취약점입니다. 공격자가 응용 프로그램 서버 파일 시스템의 파일을 보고 응용 프로그램 자체에서 액세스 할 수 있는 모든 백엔드 또는 외부 시스템과 상호 작용할 수 있는 경우가 많습니다.
일부 상황에서 공격자는 XXE 취약성을 활용하여 SSRF(서버 측 요청 변조) 공격을 수행하여 기본 서버 또는 기타 백엔드 인프라를 손상시키기 위해 XXE 공격을 확대할 수 있습니다.
먼저 해당 취약점을 확인하기 위해서 SQL Injection - Stored (XML) 페이지에 접속하여 줍니다.
sqli_8-1.php페이지에 접속 후 버프 스위트를 통하여 Any bugs? 버튼을 눌렀을 때 해당 패킷을 가로챈 후 페이지 연결 세션을 Repeater로 보내줍니다.
sqli_8-2.php 페이지는 비밀번호를 초기화하기 위하여 변수를 받는 용도로 사용하고 Repeater에서 XML 형식으로 선언된 변수 위에 XML 코드를 추가하여 강제로 외부 엔티티를 사용합니다.
ssrf.php 페이지의 2번 항목에서 Access 글씨를 누르면 위와 같이 ssrf-2.txt 페이지로 이동을 하게 되고, 페이지를 살펴보면 bWAPP라는 이름의 엔티티는 비박스에 있는 heroes.xml 파일을 php://filter/read=convert.base64-encode/resource= 필터를 통하여 Base64로 인코딩한 결과를 출력합니다.
페이지에서 인코딩 값을 모두 복사하여 Base64 디코딩 사이트를 참조하여 heroes.xml의 원문 내용을 알아낼 수 있습니다.
3. 내 삼성 스마트 크래시 XXE를 사용하는 TV(CVE-2013-4890)
해당 취약점은 Samsung PS50 C7700 TV의 DMCRUIS/0.1 웹 서버를 사용하면 원격 공격자가 TCP 포트 5600에 대한 긴 URI를 통해 서비스 거부(데몬 충돌)를 일으킬 수 있습니다.
SSRF를 방어하려면 요청 값을 필터링하는 정도로는 부족하며 서버 내부에서 관리적인 대책을 마련해야 합니다. 사용하는 포트 외에 다른 포트는 닫고 비정상적인 경로로 접속하거나 유효하지 않은 요청 패킷을 보내는 IP 주소는 블랙리스트로 설정하여 접근을 막습니다. 또한, 시그니처를 설정하여 서버에서 잘못된 요청에 대한 응답을 보내지 않게 방어할 수 있습니다.
참고
https://owasp.org/Top10/A10_2021-Server-Side_Request_Forgery_%28SSRF%29/
'Code::Security > 비박스(BWAPP)' 카테고리의 다른 글
비박스(bWAPP) A8 Cross-Site Request Forgery (CSRF) (0) | 2022.10.07 |
---|---|
비박스(bWAPP) A7 XML External Entity Attacks (XXE) (0) | 2022.10.06 |
비박스(bWAPP) A7 Restrict Device Access (0) | 2022.09.30 |
비박스(bWAPP) A7 Remote & Local File Inclusion (RFI/LFI) (0) | 2022.09.28 |
비박스(bWAPP) A7 SQLiteManager Local File Inclusion (0) | 2022.09.27 |