CTF命令执行学习笔记
php常见的命令执行函数(这里只谈命令执行不涉及代码执行)
system、popen、shell_exec、exec、passthru、反引号(比如echo ls
;反引号实际是shell_exec的另一种形式)
//通常以以下形式出现,题外话eval中可以直接闭合php标签另起一个php...
<?php
$a=$_GET[1];
//一些过滤
system($a);
?>
命令执行绕过空格
1.$IFS、$IFS$9、$IFS$@、$IFS$*等
在linux中IFS是分隔符的意思,linux中变量分两种,全局变量env和局部变量set,set中包含了env的全部变量,我们查看IFS的值发现env | grep IFS为空,而set | grep IFS有值,说明IFS是局部变量
我们来查看下$IFS具体的值,不难看出包含空格制表符与换行符
实践结果貌似都可以…
2.%09
16进制09在ascii码中为制表符,理论上同样可以用于绕过空格
由于linux命令行中不会自动解码,找一个在线的靶机作为演示,源码中简单的过了了flag的并使用/i匹配大小写
这边呢我是使用反斜线绕过了他对flag字符的过滤,反斜线大多为转移的意思(tac和cat类似,正着读取和反着读取的区别)
上面我是正常使用的是%20也就是url解码后的空格,下面尝试下制表符
3.{tac,flag.php}
linux另一种执行命令的方式,不涉及编码直接虚拟机中尝试下
4.使用重定向比如 <
命令执行绕过关键字
1.可使用变量赋值的方法
2.可用相同功能命令代替(没错linux可以使用dir,之前我一直以为dir是windos特有的…)
3.反斜杠
4.单双引号(这个真是yyds)
5.通过创建文件+*(星号)的方式
6.内联执行
7.编码绕过
`echo Y2F0IGZsYWcudHh0Cg==|base64 -d`//图片挡住了。。。
8.通配符*、?
喜欢的可以关注下公众号啊@/@http://mp.weixin.qq.com/s?__biz=MzkxOTI5NzY4MA==&mid=2247485854&idx=1&sn=c7d2029045def6ebae38e57faf3659be&chksm=c1a50261f6d28b7754e8e6a61e865eb2dc3c3466fe8bb530bc2fbacd68eeb58a00d2eee5080b#rd