BUUCTF刷題記錄
阿新 • • 發佈:2020-11-19
- [GXYCTF2019]Ping Ping Ping
要輸入ip,學習$IFS內部欄位分隔符(Internal Field Separator, IFS)定義一個定界符,預設是空格,學習管道符"|","|"是管道命令操作符,簡稱管道符。利用Linux所提供的管道符“|”將兩個命令隔開,管道符左邊命令的輸出就會作為管道符右邊命令的輸入。連續使用管道符意味著第一個命令的輸出會作為第二個命令的輸入,第二個命令的輸出又會作為第三個命令的輸入,依此類推。
linux常見過濾:
過濾空格:
< 、<>、%20(space)、%09(tab)、$IFS$9
、${IFS}
、$IFS
命令分隔符:
linux中:%0a(換行) 、%0d(回車) 、; 、& 、| 、&&、||
windows中:%0a、&、|、%1a(一個神奇的角色,作為.bat檔案中的命令分隔符,SUB 在文字檔案中表示檔案結果)
花括號:
{cat,flag} 逗號代替空格
拼接繞過:
$a=l;$b=s;$a$b(就是ls)
最後使用的payload為:
?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php
其中,$IFS在linux下表示分隔符,但是如果單純的cat$IFS,bash直譯器會把整個IFS當做變數名,所以導致輸不出來結果,然而如果加一個{}就固定了變數名,同理在後面加個$可以起到截斷的作用,但是為什麼要用$9呢,因為$9只是當前系統shell程序的第九個引數的持有者,它始終為空字串。
參考:
https://www.jianshu.com/p/e10f27249338
http://blog.chinaunix.net/uid-22566367-id-381955.html