今天翻了翻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;

#define 4c11f3876d494218ff327e3ca6ac824f_width 1337#define 4c11f3876d494218ff327e3ca6ac824f_height 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之文件上传 

https://www.hetianlab.com/expc.do?ec=ECIDfaf3-05da-4d49-9e11-72953b14f22c

(通过DoraBox靶场系列闯关练习,了解文件上传漏洞的基础知识及如何进行绕过上传恶意文件。)

欢迎投稿至邮箱:edu@heetian.com

有才能的你快来投稿吧!

投稿细则都在里面了,点击查看哦

重金悬赏 | 合天原创投稿涨稿费啦!

点击这里提升自己

php修改文件访问目录为 .htaccess_借github上韩国师傅的一个源码实例再次理解.htaccess的功效...相关推荐

  1. 修改文件或者目录读写权限时,提示“拒绝访问”的解决办法

    修改文件或者目录读写权限时,提示"拒绝访问". 在 windows 2008下,当你使用这个方法的时候碰到困难了,因为我们没有权限去配置安全,比如我们以inetpub下的ASP C ...

  2. Linux学习-30-chgrp、chown等修改文件和目录的所有者和所属组命令

    9 Linux权限管理详解 所谓权限管理,其实就是指对不同的用户和用户组,设置不同的文件访问权限,包括对文件的读.写.删除等,在 Linux 系统中,每个用户都具有不同的权限,拿非 root 用户来说 ...

  3. linux怎么修改目录的所有者,linux修改文件或目录的所有者(chown)和用户组

    chown更改文件或目录的所有者 注意:所有者,必须存在于(/etc/passwd)下.比如: linux修改文件或目录的所有者(chown)和用户组 更改文件或目录的所有者命令: 1.新建测试文件t ...

  4. linux chown命令: 修改文件或目录的所有者或群组

    linux chown命令: 修改文件或目录的所有者或群组 介绍: chown命令可以修改文件(目录)的所有者和群组信息. 语法: chmod [-cfhvR] user[:group] file.. ...

  5. linux下什么文件不能修改,Linux和Unix下root也不能修改文件与目录的命令

    chattr 只有超级权限的用户才具有使用该命令的权限,这项指令可改变存放在ext2.ext3.ext4.xfs.ubifs.reiserfs.jfs等文件系统上的文件或目录属性. 1.功能说明 改变 ...

  6. php 修改文件访问时间,php获取文件的创建、修改时间及访问时间

    filemtime() 函数返回文件内容上次的修改时间 若成功,则时间以 Unix 时间戳的方式返回.若失败,则返回 false. 语法 : filemtime(filename) 参数描述 file ...

  7. Linux:chmod命令-修改文件或目录的权限

    给新安装的tomcat/bin目录下的所有文件增加执行权限(所有用户.组) chmod -R a+x /usr/local/tomcat/bin --------------------------- ...

  8. php 修改文件访问时间,PHP中获取文件创建日期、修改日期、访问时间的方法

    php获取文件创建时间.修改时间常用代码filemtime ( string filename ) 返回文件上次被修改的时间,出错时返回 FALSE.时间以 Unix 时间戳的方式返回,可用于 dat ...

  9. php修改文件临时目录,PHP_详谈PHP文件目录基础操作,我们知道,临时声明的变量是 - phpStudy...

    详谈PHP文件目录基础操作 我们知道,临时声明的变量是保存在内存中的,即便是静态变量,在脚本运行完毕后也会被释放掉,so,想长久保存一个变量的内容,方法之一就是写到文件中,放到硬盘或服务器上,为此文件 ...

最新文章

  1. ABP理论学习之开篇介绍
  2. ServletConfig对象和ServletContext对象
  3. 3DSlicer31:结构的实例分析IGSReader
  4. 学习 PixiJS — 交互工具
  5. 千亿级的数据难题,优酷工程师怎么解决?
  6. super在java怎么用_super怎么调用啊。。
  7. UE3 MemLeakCheck Tracking(内存泄露检测追踪)
  8. redis怎么确认启动成功_不懂分Redis?现在开始动手!
  9. HDU1860 统计字符【水题+输入输出】
  10. python 字节字符串_Python字符串转换为字节,字节转换为字符串
  11. Linux常用命令、权限管理和开发工具详细介绍
  12. 关于vue-cli中-webkit-flex-direction: column失效问题
  13. 数据库工程师基础学习1----计算机硬件基础知识,计算机体系结构与存储系统
  14. UDS诊断基础知识简介-ISO14229
  15. 推荐一些游戏项目,直接起飞,不看后悔
  16. Python生成彩色字符画
  17. 用Excel制作贪吃蛇
  18. Win10 电脑屏幕亮度随背景颜色变化而变化
  19. linear-gradient 实现切角效果
  20. 论文阅读笔记(1):Multi-Task Feature Learning for Knowledge Graph Enhanced Recommendation

热门文章

  1. 【Python】调用百度云API人脸检测 Face Detect
  2. 【控制】《多智能体系统的协同群集运动控制》陈杰老师-第6章-参数不确定的高阶非线性多智能体系统一致性控制
  3. STM32 基础系列教程 27 - USB_HID
  4. 个人书法记录-2019.4.22
  5. 类和对象—对象特性—拷贝构造函数调用时期
  6. 示波器基本原理之二:采样率
  7. Android项目:使用pulltorefresh开源项目扩展为下拉刷新上拉加载更多的处理方法,监听listview滚动方向...
  8. 为IT基础设施提供云端储存,云数据存储公司Nasuni获3800万美元股权融资
  9. Spark 读 Elasticsearch
  10. asp:HyperLink vs asp:LinkButton