命令注入
什麼是命令注入?
就是通過WEB程序在服務器上拼接系統命令
準備階段:
打開Firefox瀏覽器
打開我們的環境DVWA
1.選擇我們的簡單等級
2.進入我們的命令注入頁面
3.首先讓我們輸入ip地址
輸入127.0.0.1
這裏和我們平時cmd的命令一樣,web系統調用了我們的系統命令
4.確認命令注入流程
首先查看是否調用系統命令
再看函數或函數的參數是否可控
是否拼接注入命令
5.確認可控字段
我們發現ping+空格是固定的,而ip地址是可控的:任意
6.確定命令語句
最常用的是我們的兩個&& and符號
ping 127.0.0.1 && net user
7.確定注入字段
ping 127.0.0.1&&net user
則ping是固定字段
注入字段是127.0.0.1&&net user
8.驗證注入命令
執行成功
9.進入普通模式
再試用127.0.0.1&&net user
我們則發現命令注入不成功
我們猜測兩個&符號被過濾掉了
9.1.我們再想想還有什麼符號可以連接兩條命令
其實一個&的符號也可以連接兩條命令的
9.2我們則結果測試成功
10.進入高等難度
嘗試了兩個方法都不行
windows下面除了&和&&
則我們要想到管道符號|
將我們的上一個命令傳輸的結果,通過管道傳輸給下一個命令
則發現執行成功
11.進入不可能模式
限制了輸入IP的格式
有效防止了命令注入
12.修復方法
最好使用白名單,在修復命令漏洞中黑名單是不靠譜的,而用白名單,像這個限制ip地址的格式
13.總結:
A&B
簡單的拼接
AB之間無制約關係
A&&B
A執行成功,然後纔會執行B
A|B
A的輸出,作爲B的輸入
A||B
A執行失敗,然後纔會執行B
14.實戰技巧:
過濾了敏感命令怎麼辦?
這就是爲什麼不推薦用黑名單進行過濾
14.1 如果過濾了whoami
我們可以使用who"“ami或者who”“am”" i進行繞過
如果在linux中,還支持單引號 who’'ami
15.如果不顯示輸出結果怎麼辦?
延時注入:
Windows 命令
ping 127.0.0.1 -n 5 >nul #>nul的意思是不在屏幕上顯示ping的結果
Linux命令
sleep 5 #如果超過5秒就存在這個漏洞
遠程請求:
Windows
ping,telnet等
Linux
wget,curl等 #我們可以搭一個web讓他用wget請求,如果前端沒有響應信息,但是我們服務器可以看到我們的請求,但是現在比較流行的是nslookup