借github上韩国师傅的一个源码实例再次理解.htaccess的功效
今天翻了翻GitHub,很巧发现一个韩国师傅的实例;也是关于.htaccess的,就继续理解了一波;稍微修改了几行代码来理解一下;先来发出源码;
我们简单的审计;很明显,列出了禁止的后缀;但是很明显,这里没有禁用.htaccess;这里昨天的那片博客也已经讲的很明白,.htaccess是一个神器,我们可以篡改相关目录的php配置,导致解析出现我们遇期的效果;继续审计代码;首先一个if语句就ban掉了纯后缀的文件。例如(.htaccess);然后服务器创建临时文件;$name取得我们的原始文件名字;然后再以‘.’为分界点打断为数组,(这里我刚开始将其错看成了implode,怎么都说不通,太无语了);打断为数组之后删除最后一个元素;
这里要注意一下,虽然删除了最有一个元素,但是这里有个小坑,要看仔细,$ext是记录了被删除的内容,不是删除后的数组;这里本地复现这段代码;我们直接传入文件名;
同过复现我们可以看到,这里确实是的,$ext记录的是我们删除的后缀,而并不是我们删除后的数组;通过上面的实验效果我们可以看到数组第一个元素已经为空了所以反观代码下的empty($parts[0])也是达成的,但是删除就没有效果了这里判断元素数目是否为空;这里有个骚操作;因为我们看到之前的explode是按照以'.'为分割符来打断的;这里经过删除以后按理说是没有了,我们测试如下;看到这里元素数目确实为0;这样的话,我们是过不了if (count($parts) === 0)这个waf的;但是我们反观一下,如果传入..htaccess呢?那么就会打断为3个元素,删除前后两个还有中间的空元素,只要有元素存在,那么count就不为0;就可以绕过去;这里测试如下;对比两张图会理解的更清楚;
接着我们看到waf;
这个waf我们早已经可以绕过了;因为并没有出现敏感的字符;
再来看到又一个waf;
这个waf仅仅是判断了imagetype(读取第一个字节并且检查签名)这里我们抓包修改利用宏定义就可以;但是在修改的时候还需要满足我们.htaccess的语法;这个waf和后面的waf相结合,就很恶心人;这里难点是在后面的那个waf;要图片满足为1337*1337
$image_size变量中存储了我们服务器创建的临时文件的大小;这里我翻了一下php的官方文档;确定了一下;有个xbm文件;这也是一种图片文件,我们本地测试,改为.xbm看看效果,发现可以成功显示;(图片内容就是phpinfo)
那么我们就可用宏定义在这里伪造为xbm文件了;下面就放出有效的xbm文件头;
define 4c11f3876d494218ff327e3ca6ac824f_width xxxx(大小);这里我们可以在文件中加入文件头,这样php解析的时候就会认为是.xbm然后这里主要是我们可以自定义大小;所以这里按照题目要求,定义为1337;
这里加上#的原因不用多说,看过我上篇博客的都知道,不知道的师傅,可以去翻翻;这样就伪造成了有效的.xbm文件去通过检查,这里上传.htaccess文件;
照常理来说这个题没有难度,只要写入将jpg当作php来解析就好,然后直接抓包修改就ok;但是这里我结合之前发的文章提供一种新的思路;深究用户利用.htaccess的原理篡改配置导致的安全问题
自创;本地实测成功;
我先来个秒杀的.htaccess方法,直接在先来定义一个报错的文件在/images目录之下;名为shell.php因为是内容,这个题目的唯一缺点就是没有对文件内容中php进行检查,所以这里我们自定义一个报错文件shell.php(并不是上传shell.php);写入如下的一句php_value include_path "110",这里的包含目录是不存在的,所以就会写入我们的报错日志中;也就会在/images下创建一个shell.php文件;实测发现成功;
上传.htaccess然后触发报错;创建文件。这里的shell.php不是我们的木马文件,这里我们需要再传一个文件.htaccess;
写入
这个.htaccess文件会覆盖之前的那个.htaccess文件,这里我们的images目录之下已经有一个shell.php的文件了,但是里面是我们自定义包含目录的报错信息并不是木马;真正的木马在我们的.htaccess中;这里直接上传..htaccess(为了绕过之前的waf);这里直接传入,我们发现已经成功;因为.htaccess文件我们是没有权限访问的是forbidden;所以我们这里借用shell.php作为跳板;访问呢shell.php触发shell;
测试发现成功;(~~没想到这种思路竟然可以成功;原创思路)
这里;如果结合之前的那个题;对文件内容中<?做了一个过滤,那么可否用这样的方法过去呢,我本地测试了一下,传入utf7编码;这里我是依然将shell包含在了.htaccess中,并没有将其写入报错日志,所以这里实测的结果如下;传入的.htaccess如下;
这里我们访问一下shell.php看看还能不能继续作为跳板进行包含;这里发现如下的结果,
所以得出结论,.htaccess中修改的配置不能对其自身造成影响,比如这道题,.htaccess就不可以对自身的进行识别utf7编码进而解码包含;那么如果这么过滤;那么我们怎么办呢;老套路,和昨天发的一样,自定义报错日志,加入报错级别确保完全写入shell,然后<?绕过用utf7编码即可;然后再传.htaccess进行自定义目录包含,然后检测是否有unicode,然后自定义解码规则;老套路了。不过昨天那道题是我们将文件转移出html目录,这个题是无所谓;自定义在哪里都可以,这不在过多演示了;有兴趣的师傅可以去看看深究用户利用.htaccess的原理篡改配置导致的安全问题
这里再解释一下作者的做法;他的做法,是利用AddType 来自定义了拓展名;从而导致asp文件可以被当作php文件来解析;这里我的解法要复杂一点,但是可以利于理解.htaccess.
声明:作者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关。
相关实验:DoraBox之文件上传
(通过DoraBox靶场系列闯关练习,了解文件上传漏洞的基础知识及如何进行绕过上传恶意文件。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
聊聊前端工程化
我对工程化的理解 随着互联网的发展,软件工程师出现了!他们不用一砖一瓦,也不用尺子电钻,计算机是他们的施工现场,代码是他们的工程部件,键盘之上的指尖跃动是他们的工程活动,在你看不见的地方运行着的一项项服务,操作系统上你看得见的app,网页等是他们的工程产出。 然而有行业的地方就有江湖,正如不是每一个会盖房子的都是建筑工程师,同样的也不是每一个会编程的都可以叫做软件工程师。那普通程序员和软件工程师的区别在哪里?首先我认为工程的本质是让工作内容机械化,只需要靠重复就可以完成工作。说起来可能会觉得比较枯燥,然而实际上正是这种枯燥保障了工作的效率和正确率。基于此软件工程师的主要服务对象其实是其他程序员,他们的职能本质是通过上层的规范和设计让工程降低对开发者水平的敏感度。 什么是"前端工程化"? 目前来说,web业务日益复杂化和多元化,前端开发从WebPage模式为主转变为WebApp模式为主了。前端的开发工作在一些场景下被认为只是日常的一项简单工作,或只是某个项目的"附属品",并没有被当做一个"软件"而认真对待(无论是产品负责人还是开发者)。 在模式的转变下,前端都已经不是过去的拼几个页面和...
- 下一篇
关于消息推送服务的十问十答
近日小编受邀参与了开源中国高手问答栏目,收集到很多与推送相关的问题,也发现很多开发者都在使用消息推送服务,小编甚是欢喜。 相关阅读:关于移动消息推送,你了解多少? 随着移动互联时代进入下半场,寻找流量红利的突破口成为每个互联网人思考的命题。互联网的运营一切都是为了增长,毫无疑问,增长是运营的使命。 为了引出本文的主题,小编都上升到使命的高度了。 言归正传,消息推送服务承载着解决增长难题的重任,对于移动应用来说,消息推送服务已经成为“标配”,据相关数据显示,App集成的开发服务中,消息推送占比最高,且渗透率逐年递增。 消息推送虽然并不陌生,但围绕推送到达率、推送策略、心跳建设、技术选型等,大家还存在很多疑问。根据用户调研,小编整理了关于消息推送服务的十问十答,为大家揭开消息推送的神秘面纱。 1、Android系统和iOS系统的消息推送有何区别? Android和iOS都从属于移动消息推送,基本上可以分为自建通道和厂商通道。 在自建通道上,Android和iOS所采用的技术手段都差不多,实现方式上可能略有差别, 在厂商通道上,由Android开源的特性,Google提供了自己的FireBa...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装