Kate Li (Taiwan)的部落格

首頁

nmap備忘單:從探索到漏洞利用(part 5)

作者 sebastiani 時間 2020-02-28
all

這是備忘單的最後一部分,在這裡主要講述漏洞評估和滲透測試。

資料庫稽核

列出資料庫名稱

nmap -sV --script=mysql-databases 192.168.195.130

上圖並沒有顯示資料庫清單,因為用戶名和密碼是空的。通過設定參數來指定用戶名和密碼。

nmap -sV --script=mysql-databases --script-args mysqluser=root,mysqlpass=toor 192.168.195.130

用戶稽核

用密碼進行身份驗證。通過暴力破解或者空口令獲得憑據。

nmap -sV --script=mysql-users 192.168.195.130

檢查root空口令

sudo nmap --script mysql-empty-password 192.168.195.130

Mysql Server變數清單

在默認情况下,開發人員或DBA人忘了設定正確的資料庫環境。以下可以用來檢索環境設定。

nmap -p3306 --script mysql-variables localhost

暴力破解

使用nmap腳本來暴力破解用戶名和密碼

nmap --script=mysql-brute localhost

雜湊轉儲

轉儲密碼的雜湊值,通過使用John the Ripper進行暴力破解。需要root許可權。

nmap --script=mysql-dump-hashes localhost

Mysql資訊

這是資訊蒐集的一部分,有助於後期的滲透

nmap --script=mysql-info localhost

Mysql枚舉

當我們獲取了資料庫的root許可權,我們可以收集到合法的用戶名和密碼。

nmap --script=mysql-enum localhost

使用CVE-2012-2122

記住mysql最可怕的漏洞CVE-2012-2122,攻擊者使用root嘗試300次登陸後,成功進入了資料庫。

http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2122

http://www.exploit-db.com/exploits/19092/

http://blog.trendmicro.com/trendlabs-security-intelligence/mysql-password-verification-bypass-cve-2012-2122/

nmap –script=mysql-vuln-cve2012-2122 localhost

但是運氣不好,埠被過濾了。我是用了-d選項來查看debug資訊。它顯示因為埠被過濾所以沒有任何響應。我建議讀者通過shodan去蒐索。

對郵件伺服器滲透測試

我們可以使用Nmap腳本對郵件服務的攻擊如下:

使用穀歌蒐索發現有效的電子郵件帳戶

檢測開放中繼

暴力破解SMTP密碼

枚舉SMTP服務器的用戶

檢測SMTP服務器的後門

暴力破解IMAP密碼

檢索IMAP郵件伺服器的功能

暴力破解POP3密碼

檢索POP3郵件伺服器的功能

檢測4.70到4.75版本的Exim SMTP的漏洞

使用穀歌蒐索發現有效的電子郵件帳戶

nmap -p80 --script=http-email-harvest target

檢測開放中繼

什麼是開放中繼?是指任何人都可以用來發信的SMTP服務器。這曾是許多郵件伺服器的默認配寘。

使用nmap檢測開放中繼的命令如下:

nmap -sV --script smtp-open-relay -v localhost

暴力破解SMTP密碼

郵件伺服器通常存儲非常敏感的資訊,且滲透測試人員需要對他們進行暴力破解密碼來稽核檢查弱密碼。

nmap -p25 -Pn --script smtp-brute target

枚舉SMTP服務的用戶

將郵箱作為用戶名在web應用程序中非常常見,在稽核郵件伺服器時,收集用戶名是一個必要的任務。感謝nmap的腳本引擎可以自動化執行該任務。

nmap -p25 --script smtp-enum-users target

檢測SMTP服務器後門

nmap -sV --script smtp-strangeport target

暴力破解IMAP密碼

nmap -p143 --script imap-brute target

檢索IMAP郵件伺服器的功能

IMAP服務器可以支持不同的功能,有個名為CAPABILITY的命令,允許用戶列出郵件伺服器支持的命令。我們可以使用NMAP自動完成這個任務。

nmap -p143,993 -Pn --script imap-capabilities target

暴力破解POP3密碼

nmap -p110 –script pop3-brute google.com

檢索POP3郵件伺服器支持的功能

POP3郵件伺服器可以支持RFC2449定義的不同功能的POP3命令。多虧了Nmap,我們就可以自動完成這個任務,可以在我們的掃描結果顯示這種服務的資訊。

nmap -p110 –script pop3-capabilities target

檢測4.70到4.75版本的Exim SMTP的漏洞

4.70到4.75版本之間的Exim SMTP存在字串格式化漏洞,允許攻擊者遠程執行程式碼。NMAP NSE能幫助滲透測試人員來遠程檢測此漏洞。

nmap –script smtp-vuln-cve2011-1764 –script-args mailfrom=<Source address>,mailto=<Destination address>,domain=<domain> -p25,465,587 <target>

Nmap腳本引擎開發(NSE)

通過前面的例子,我們已經瞭解到NSE的力量是如何的强大。NMAP的NSE可針對網絡和Web應用程序開發自定義的腳本。

NSE基本上是由lua語言開發。

Nmap腳本格式

NSE腳本包含5個欄位和一個埠或者主機的定義規則。

描述域

這個欄位用來描述腳本。

類別域

該欄位描述腳本所屬的類別。參攷如下演示。

categories = {“default”, “discovery”, “safe”}

作者域

這個欄位描述腳本的所有者和聯系資訊。

許可證域

該欄位可幫助確保我們有分發所有附帶的Nmap腳本的法律許可。所有這些腳本現時使用的標準Nmap許可證,這是可選欄位。它們包括以下行作為標準。

license = “Same as Nmap–See http://nmap.org/book/man-legal.html”

依賴域

該欄位包含了在執行該腳本之前需要運行的腳本名稱。這使得腳本可以調用另外一個腳本執行的結果。例如,大多數的smb-*腳本依賴於smb-brute,因為通過smb-brute發現的帳戶可能會讓其他的smb腳本獲得更多資訊。列出依賴腳本並不會導致那些腳本被運行。它需要-script或其他選項來調用。依賴的腳本會強制按照清單內的順序執行。下麵是例子。

dependencies = {“smb-brute”}

規則

NMAP使用腳本的規則,以確定一個腳本應針對某個目標是否需要運行。規則是一個Lua函數,返回true或false。如果規則計算結果為true時才執行腳本操作功能。

腳本必須包含以下一個或多個功能用來確定腳本的運行:

prerule()

hostrule(主机)

portrule(主机,端口)

postrule()

prerule()

hostrule(主機)

portrule(主機,埠)

postrule()

任何主機被掃描之前,prerule腳本在腳本預掃描階段運行一次。hostrule和portrule腳本在每個主機被掃描後運行。 postrule腳本在所有主機都被掃描後執行一次。腳本可以在一個以上的階段運行,如果它有幾個規則的話。

操作

操作是NSE腳本的覈心部分。它包含了腳本在prerule,portrule,hostrule或postrule觸發時執行的所有指令。這是一個Lua函數,接受相同的參數規則。操作的返回值可能是key-value,字串,或者null。相關資訊請查閱http://nmap.org/book/nse-api.html#nse-structured-output

環境變數:每個腳本都有自己的一套環境變數。

SCRIPT_PATH:介绍了脚本路径。

SCRIPT_NAME:介绍了脚本的名称。此变量可以在调试输出被使用。

SCRIPT_TYPE:

SCRIPT_PATH:介紹了腳本路徑。

SCRIPT_NAME:介紹了腳本的名稱。此變數可以在調試輸出被使用。

SCRIPT_TYPE:

由於腳本可以有多個規則函數,這個環境變數將顯示哪些規則啟動了腳本。腳本可以在不同的掃描階段共亯相同的程式碼。這將需要四個字串值:“prerule”,“hostrule”,“portrule”或“postrule”。這些變數只能在規則函數評估中或評估完成後生效。

列出所有的庫

Lua有很多方便開發的功能,但是NSE有自建的內部庫用於NSE的開發。目錄nselib包含了很多庫,開發者可以利用這些庫開發新的腳本。庫清單如下。

Afp

Patrik Karlsson <[email protected]>編寫的用來與蘋果AFP服務進行交流的腳本,但是功能並不齊全。

Ajp

根據來自Apache的mod_proxy_ajp可用檔案的基本AJP 1.3執行; http://httpd.apache.org/docs/2.2/mod/mod_proxy_ajp.html

Amqp

AMQP庫提供用於檢索的AMQP服務器的内容資訊的一些基本功能。

ASN1

ASN.1功能

base32

Base32編碼和解碼。遵循RFC 4648。

BASE64

base64編碼和解碼。遵循RFC 4648。

Bin

打包和解包二進位數據

比特

對整數比特操作

比特幣

此庫實現Bitcoin的協定的一個小子集。它現時支持的版本握手,並處理地址響應。

Bittorrent

BitTorrent和DHT協定庫,使用戶能够讀取torrent檔案的資訊,解碼B編碼(BitTorrent的編碼)的緩衝區,找到聯系在一起的其他用戶端,和在蒐索用戶端中發現的結點。

Bjnp

佳能BJNP協定的實現,用於發現和査詢佳能網絡打印機和掃描儀設備。

Brute

brute庫是試圖建立對遠程服務執行密碼猜測的共同框架。

Cassandra

作為一個cassandra的用戶端

Citrixxml

這個模塊的作者是帕特裏克·卡爾森,用來與Citrix XML服務進行通信。它功能不齊全,缺少一些功能和參數。

Comm

網絡探索任務中的常用框架,比如banner的抓取和資料交換。

Creds

nmap支持的憑證類

CVS

一個最小的CVS(並行版本系統)的pserver協定實現,它現時只支持驗證。

Datafiles

閱讀和分析nmap的資料檔案,比如nmap-protocols, nmap-rpc, nmap-services, 和nmap-mac-prefixes.

DHCP

實現一個動態主機配置協定(DHCP)用戶端。

對於更多的庫,我們可以按照下麵的連結:

http://nmap.org/book/nse-library.html

http://nmap.org/nsedoc/

Nmap API

Nmap API對於安全研究員和滲透測試人員非常有用,在掃描和利用過程中自定義設定。nmap掃描主機結束後得到的數據作為腳本的參數。主機和參數封裝為一個lua錶。如果腳本匹配hostrule,將會得到主機資訊,如果腳本匹配portrule,將會得到主機和埠的資訊。

接下來看看API的規則

Host

這個錶是作為一個參數傳遞給rule和action功能。它包含作業系統的細節。

Host.os

用數組的管道來顯示匹配的os清單。例子如下:

host.os = {

  {

    name = <string>,----Linux 2.6/3.2

    classes = {

      {

        vendor = <string>,------Linux

        osfamily = <string>,-------Linux

        osgen = <string>,------2.6.x

        type = <string>,---------general purpose

        cpe = {---------------------"cpe:/o:linux:linux_kernel:3"

          "cpe:/<...>",

          [More CPE]

        }

      },

      [More classes]

    },

  },

  [More OS matches]

}

跟host.os类似的还有host.ip,host.name,host.region等。完全的组件请查阅http://nmap.org/book/nse-api.html.

网络API连接

使用Nmap自带的nsock库可以高效且并行运行网络I/O。

连接API

这是网络api的一部分,下面是连接api的例子。

require(“nmap”)

local socket = nmap.new_socket()

socket:set_timeout(1000)

try = nmap.new_try(function() socket:close() end)

try(socket:connect(host.ip, port.number))

try(socket:send(“login”))

response = try(socket:receive())

socket:close()

异常处理

Nmap Lua语言没有异常处理机制,所以API提供了强大的对异常处理的功能。

local result, socket, try, catch

result = “”

socket = nmap.new_socket()

catch = function()

socket:close()

end

try = nmap.new_try(catch)

try(socket:connect(host.ip, port.number))

result = try(socket:receive_lines(1))

try(socket:send(result))

host.os = {

  {

    name = <string>,----Linux 2.6/3.2

    classes = {

      {

        vendor = <string>,------Linux

        osfamily = <string>,-------Linux

        osgen = <string>,------2.6.x

        type = <string>,---------general purpose

        cpe = {---------------------“cpe:/o:linux:linux_kernel:3”

          “cpe:/<…>”,

          [More CPE]

        }

      },

      [More classes]

    },

  },

  [More OS matches]

}

跟host.os類似的還有host.ip,host.name,host.region等。完全的組件請查閱http://nmap.org/book/nse-api.html.

網絡API連接

使用Nmap自帶的nsock庫可以高效且並行運行網絡I/O。

連接API

這是網絡api的一部分,下麵是連接api的例子。

require(“nmap”)

local socket = nmap.new_socket()

socket:set_timeout(1000)

try = nmap.new_try(function() socket:close() end)

try(socket:connect(host.ip, port.number))

try(socket:send(“login”))

response = try(socket:receive())

socket:close()

異常處理

Nmap Lua語言沒有異常處理機制,所以API提供了强大的對異常處理的功能。

local result, socket, try, catch

result = “”

socket = nmap.new_socket()

catch = function()

socket:close()

end

try = nmap.new_try(catch)

try(socket:connect(host.ip, port.number))

result = try(socket:receive_lines(1))

try(socket:send(result))

我們的第一個NSE腳本

接下來讓我們示例演示下如何編寫一個屬於自己的NSE腳本吧。

在此之前請閱讀nse開發所需要的基本知識。

http://nmap.org/book/nse-tutorial.html

駭客喜歡入侵攝像機來查看別人的豔照。最常見的是劫持AXIS攝像機。可以使用下麵的dork來蒐索。

inurl:axis-cgi/jpg

打開帶有axis-cgi/jpg/image.cgi的url,然後你就可以看到私人或者公共的相機,這是未經授權的。參攷下麵的例子。

現在我們可以嘗試使用nse來實現漏洞的利用了。

1、創建axis.nse檔案,並寫入以下程式碼實現自動化。

description = [[Attempts to detect webcams AXIS vulnerable to unauthenticated access to the video stream by queryingthe URI ” /axis-cgi/jpg/image.cgi “.

2、我們載入開發時需要的庫

local http = require “http”

local shortport = require “shortport”

local stdnse = require “stdnse“

local http = require “http”

local shortport = require “shortport”

local stdnse = require “stdnse“

3、定義執行規則

portrule = shortport.http

4、定義存在漏洞的標識,比如狀態碼

action = function(host, port)

local uri = ” /axis-cgi/jpg/image.cgi”

local _, status_404, resp_404 = http.identify_404(host,port)

if status_404 == 200 then

stdnse.print_debug(1, “%s: Web server returns ambiguous response. Axis webcams return standard 404 status responses. Exiting.”, SCRIPT_NAME)

return

end

stdnse.print_debug(1, “%s: HTTP HEAD %s”, SCRIPT_NAME,uri)

local resp = http.head(host, port, uri)

if resp.status and resp.status == 200 then

return string.format(“Axis video feed is unprotected:http://%s/axis-cgi/jpg/image.cgi “, host.ip)

end

End

action = function(host, port)

local uri = ” /axis-cgi/jpg/image.cgi”

local _, status_404, resp_404 = http.identify_404(host,port)

if status_404 == 200 then

stdnse.print_debug(1, “%s: Web server returns ambiguous response. Axis webcams return standard 404 status responses. Exiting.”, SCRIPT_NAME)

return

end

stdnse.print_debug(1, “%s: HTTP HEAD %s”, SCRIPT_NAME,uri)

local resp = http.head(host, port, uri)

if resp.status and resp.status == 200 then

return string.format(“Axis video feed is unprotected:http://%s/axis-cgi/jpg/image.cgi “, host.ip)

end

End

 你可以從https://github.com/bikashdash/Axis_Vuln_Webcam 找到這個腳本。

 引用:

https://secwiki.org/w/Nmap/External_Script_Library

http://nmap.org/book/nse-tutorial.html

*參攷來源:resources.infosecinstitute,FB小編東二門陳冠希編譯,轉載請注明來自FreeBuf駭客與極客(FreeBuf.COM)