【RCTF-2015】bug
信息:
题目来源: RCTF-2015
标签:PHP
、SQL注入
解题过程
访问网址,提示需要登陆:
使用admin用户名进行注册,提示:
对登陆页面与注册页面进行Fuzz,没有发现注入点。
登陆后页面如下:
Manage页面提示需要管理员权限,猜测需要获取管理员账号的密码。登陆页面提供了找回密码功能,对此功能进行测试:
修改用户名为:admin,成功修改管理员密码。
使用管理员登陆,进入Manage选项时,提示IP Not allowed!
,猜测需要使用127.0.0.1
访问。
进入管理页面后,查看源代码获得提示:
do的参数没有给出,根据module=filemanage
,猜测do的内容与文件操作有关。
经过尝试()得到完整的url为:
http://220.249.52.133:38165/index.php?module=filemanage&do=upload
猜测需要绕过文件类型检测。
屏蔽js脚本进行尝试,发现不是前端验证。
进行抓包测试:
application/octet-stream:只能提交二进制,而且只能提交一个二进制,如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)
修改MIME为图片格式,还是识别出php脚本:
经过测试这里不仅对后缀进行了黑名单过滤,同时会检查文件的开头内容,所以不能以<?php
与<?
开头。
可以使用用<script language="php"></script>
来进行绕过,后缀为php5或php4时可看到flag。
文件解析漏洞总结-Apache
1.多后缀名
Apache认为,一个文件可以有多个后缀,如:werner.txt.png.mp3
。这一文件,放在Windows里,毫无疑问,就是个mp3文件。
而在Apache中,则可能有所不同,如果有必要,Apache会从后(右)往前(左),一一辨别后缀。何时有必要?当Apache不认识某个后缀时,便有必要。
如某文件名为:werner.mp3.html.qwe.arex
,Apache在处理时,先读取最后一个后缀,为.arex
,一看,这啥玩意啊,不认识,继续读取下一个后缀.qwe
,一看,呀,这又是啥,还是不认识,继续读下一个后缀.html
,一看,哦,这是个超文本标记语言文件,俗称网页文件,这回认识了,也就不继续读下一个后缀了。
若是所有后缀都看完了没有一个认识怎么办?此时就会把该文件当做默认类型进行处理了,一般来说,默认类型是text/plain。
那么aaa.php.xxx为何没有被作为php代码执行呢?我猜是这样的,当然只是我的猜测,实在是找不到相关资料,只好猜了。
Apache看到文件aaa.php.xxx,按照多后缀名的解析规则,认为该文件是php程序文件,把该文件作为php程序文件处理。怎么处理呢?交给php解释器,Apache本身并不懂php。而php解释器却有着和Apache不同的后缀解析规则,可能只认最后一个后缀,故而认为aaa.php.xxx不是php程序文件,拒绝执行。
在我的测试环境中,php以模块(module)的模式工作于Apache的领导下。这种模式下php接受到领导Apache分配的任务——aaa.php.xxx,一看,不是php程序文件,没法执行,但也没有报错,而是返回了文件内容本身。php还可以以FASTCGI的模式工作于Apache中,此种模式下php遇到类似aaa.php.xxx这种不是php程序的文件,会触发500错误。
2.罕见后缀
kali@kali:~$ cat /etc/mime.types | grep php
#application/x-httpd-php phtml pht php
#application/x-httpd-php-source phps
#application/x-httpd-php3 php3
#application/x-httpd-php3-preprocessed php3p
#application/x-httpd-php4 php4
#application/x-httpd-php5 php5
不仅php,就连phtml、pht、php3、php4和php5都是Apache和php认可的php程序的文件后缀。
利用这些“罕见”的后缀名,也可能绕过安全检查,干些“坏事”。
3.妙用.htaccess
.htaccess
是Apache的又一特色。一般来说,配置文件的作用范围都是全局的,但Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess
(分布式配置文件)。
要想使.htaccess
文件生效,需要两个条件,一是在Apache的配置文件中写上:
AllowOverride All
二是Apache要加载mod_Rewrite模块。加载该模块,需要在Apache的配置文件中写上:
LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so
若是在Ubuntu中,可能还需要执行命令:
sudo a2enmod rewrite
配置完后需要重启Apache。
需要注意Apache可能有多个配置文件,后加载的配置文件会覆盖先加载的配置文件中的配置。所以在某个配置文件中将AllowOverride设置成All,若是其后加载的某个配置文件中AllowOverride的设置是None,则也是没有用的。一般来说,先加载httpd.conf,再加载conf.d/中的配置文件,最后加载sites-enabled/中的配置文件。
这意味着,.htaccess并不总是有效的。而且不幸的是,在我的测试环境中.htaccess默认无效。好吧,为了测试,我只好将它改为有效。以下讨论均在.htaccess有效的前提下进行。
.htaccess文件可以配置很多事情,如是否开启站点的图片缓存、自定义错误页面、自定义默认文档、设置WWW域名重定向、设置网页重定向、设置图片防盗链和访问权限控制。但我们这里只关心.htaccess文件的一个作用——MIME类型修改。如在.htaccess文件中写入:
AddType application/x-httpd-php xxx
就成功地使该.htaccess文件所在目录及其子目录中的后缀为.xxx的文件被Apache当做php文件。另一种写法是:
<FilesMatch "shell.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
该语句会让Apache把shell.jpg文件解析为php文件。
最新文章
- Struts2理解--动态方法和method属性及通配符_默认Action
- Team Foundation Server 15 功能初探
- 以 MAMP 为 Mac OS X 安装并设置 PHP开发环境
- canvas粒子demo
- z-index 用法
- CI练手下,找找感觉
- C# 控件包
- codeforces #262 DIV2 C称号Present(二分法+贪婪)
- Cygwin-添加到右键菜单脚本--一键安装、卸载
- C# Post和Get请求
- iOS设置圆角的方法及指定圆角的位置
- js判断IE浏览器版本(IE8及以下)
- reStructuredText文件语法简单学习
- 20165205 《网络对抗技术》 Exp0 Kali安装
- 30. pt-upgrade
- python 2解决编码问题
- IIS搭建Web服务器,外网可以访问,但无法加载视频
- script weixin app / weixin xiao chen xu
- MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置
- 24.Linux-Nand Flash驱动(分析MTD层并制作NAND驱动)
热门文章
- v-bind 缩写
- FastJson将Java对象转换成json
- 撒花,推荐一下我怒肝的 GitHub
- @loj - 2106@ 「JLOI2015」有意义的字符串
- Java复习目录
- mysql内连接
- rust 神奇的特质
- opencv3.1.0 计算机中丢失 opencv_world310d.dll _vs2017解决方法
- cc22a_demo_c++重载自增自减操作符-代码示范
- &#39;ipconfig&#39; 不是内部或外部命令,也不是可运行的程序 或批处理文件