
محول من C-shellcode إلى hex، أداة مفيدة للصق وتنفيذ الشيلكود في IDA PRO, gdb, windbg, radare2, ollydbg, x64dbg, immunity debugger و 010 editor
تحذير: أكثر كود قبيح في العالم
محول من كود شيل C إلى هكس.
يرجى التفكير في التبرع: https://github.com/sponsors/therealdreg
أداة مفيدة للصق وتنفيذ أكواد الشيل في IDA PRO، gdb، windbg، radare2، ollydbg، x64dbg، immunity debugger و 010 editor.
هل تواجه مشاكل في تحويل أكواد شيل C إلى HEX (ربما تعليقات C+ASCII مختلطة؟)
إليك shellex. إذا كان كود الشيل يمكن تجميعه في مترجم C، فإن shellex يمكنه تحويله.
فقط قم بتشغيل shellex، والصق سلسلة كود الشيل c-string واضغط ENTER.
للإنهاء استخدم Control+Z (ويندوز) / Control+D (لينكس)
تحويل كود شيل 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، لكن ربما تظهر نافذة التفكيك كود الشيل كـ 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 وتحقق من صحة التفكيك
"\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 وتحقق من صحة التفكيك
"\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، ثم استخدم L0n30 في windbg.
اكتب الملف الثنائي إلى مؤشر التعليمات الحالي:
للإصدار 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، الآن استخدم الأمر pD في radare2:
pD 30
تحويل "\x6a\x17\x58\x31\xdb\xcd\x80" في لينكس:
echo "\"\\x6a\\x17\\x58\\x31\\xdb\\xcd\\x80\"" | shellex
تحويل "\x6a\x17\x58\x31\xdb\xcd\x80" في ويندوز:
echo "\x6a\x17\x58\x31\xdb\xcd\x80" | shellex.exe
عبر ملف متعدد الأسطر في ويندوز:
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
عبر ملف متعدد الأسطر في لينكس:
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
لنظام ويندوز فقط استخدم Visual Studio 2013
لنظام لينكس فقط:
cd shellex/shellex
gcc -o shellex shellex.c
./shellex