
cve-2023-1671에 대한 익스플로잇입니다. 테스트 기능과 익스플로잇 기능이 있습니다. 테스트는 취약한 사이트에서 dnslog 도메인으로 핑 요청을 보냅니다. 핑이 성공하면 취약점이 존재하는 것이고, 그렇지 않으면 cve-2023-1671이 없는 것입니다. 반면 익스플로잇 기능은 서버에 사용자의 명령을 포함한 요청을 보냅니다.
/opt/ws/bin/ftsblistpack은 /opt/ws/bin/sblistpack을 호출하는 Perl 스크립트입니다. sblistpack 역시 Perl 스크립트입니다.
셸 명령 인자는 작은따옴표로 묶여 있습니다:
$rc += system("$sblistpack '$uri' '$user' '$filetype' '$filein' '$fileout'");
이것은 나중에 취약점으로 이어질 중요한 요소 중 하나가 될 것입니다.
다음으로 /opt/ui/apache/htdocs/controllers/UsrBlocked.php는 사용자가 제공한 매개변수(args_reason, url, filetypeser, user_encoded)를 사용하여 셸 명령을 ftsblistpack에 전달합니다.
사용자 입력은 여전히 PHP 함수 escapeshellarg()에 의해 처리되며, 이 함수는 문자열이나 기존 작은따옴표 주위에 작은따옴표를 추가합니다.
이를 통해 문자열을 셸 함수에 직접 전달하고 사용자 매개변수와 함께 처리할 수 있습니다.
이것이 어떻게 나오는지 확인할 수 있습니다:
다음과 같이 입력하면:
';echo 1 #
다음과 같이 됩니다:
'shell user' ' ';echo 1 #'
그리고 이렇게 하면 이 명령에서 시스템에 피해를 줄 수 있습니다.
인코딩된 값을 user_encoded에 추가합니다.
UsrBlocked.php는 /index.php?c=blocked를 통해 리디렉션된 후 필요한 GET 및 POST 매개변수가 입력됩니다. user_encoded 매개변수는 Base64로 인코딩되므로 인젝션에 이상적입니다.
https://github.com/ohnonoyesyes/CVE-2023-1671 - 셸 익스플로잇
https://vulncheck.com/blog/cve-2023-1671-analysis - CVE-2023-1671 분석
https://nvd.nist.gov/vuln/detail/CVE-2023-1671 - NIST CVE-2023-1671 정보
따라서 테스트 및 익스플로잇 기능이 있습니다.
테스트는 취약한 사이트에서 dnslog(http://www.dnslog.cn) 도메인으로 ping 요청을 보냅니다. ping이 성공하면 취약점이 존재하고, 그렇지 않으면 CVE-2023-1671이 없습니다.
반면 익스플로잇 기능은 사용자의 명령을 서버에 요청으로 보냅니다.
-h
사용법 매개변수 확인
--exploit
CVE-2023-1671을 익스플로잇하는 함수를 호출합니다.
취약점이 있는지 확인하지 않고 임의의 명령을 실행합니다.
--test
취약점 테스트 함수를 호출합니다.
취약한 서버에서 dnslog 도메인으로 ping을 보내어 수행합니다.
ping이 발생하면 CVE-2023-1671 취약점이 존재합니다.
-u
사이트의 IP 또는 URL입니다.
형식: 192.168.0.1 또는 site.com
-p
취약한 사이트의 포트입니다. 필수 매개변수이며, https://site.com인 경우에도 -u site.com -p 443을 지정해야 합니다.
-c
--exploit 함수의 매개변수
사이트를 익스플로잇하기 위해 실행하려는 임의의 명령입니다.
형식: -c 'echo cve'
python cve-2023-1671.py --exploit -u 192.168.0.1 -p 443 -c 'echo 1'
python cve-2023-1671.py --test -u 192.168.0.1 -p 443
이 익스플로잇은 교육 목적으로 작성되었으며, 귀하의 행동에 대해 책임지지 않습니다.
이 익스플로잇은 시스템 테스트 및 보호 목적으로만 사용하십시오.