1. 程式人生 > 實用技巧 >BUUCTF刷題記錄

BUUCTF刷題記錄

  1. [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