漏洞分析技术

漏洞分析技术,第1张

解析漏洞整理

1。什么是解析漏洞

以其他格式执行脚本格式的效果。

2。分析漏洞产生的条件

1.命名规则

2.搭建平台

3。常见解析漏洞

(1)IIS5.x-6.x解析漏洞

使用IIS5.x-6.x版本的服务器多为windowsserver2003,其网站较为陈旧,开发语句一般为asp解析漏洞只能解析asp文件,而不能解析aspx文件。


1)目录解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg

原理:默认情况下,服务器会发送..

2)文件解析
形式:www.xxx.com/xx.asp;。jpg

原理:服务器默认不解析;数字背后的内容,所以xx.asp;。jpg被解析成一个asp文件。

3)解析文件类型
IIS6.0的默认可执行文件除了asp还包括这三种类型:

/test.asa

(二)IIS7.5解析漏洞

iis7.5的漏洞和nginx类似,因为在PHP配置文件中开启了cgi.fix_pathinfo,这不是nginx或者IIS7.5本身的漏洞。

(3)apache解析漏洞
漏洞原理

Apache解析文件的规则是从右向左判断解析,如果后缀是未识别文件解析,则再次向左判断。比如test.php.qwe.asd”。qwe”和”。asd”不被apache识别,apache会把wooyun.php.qwe.asd解析成php。

漏洞形式

www.xxxx.xxx.com/test.php.php123

其他配置问题导致漏洞

(1)如果Apache的conf中有这样一行配置AddHandlerphp5-script,php,那么只要文件名包含。php,即使文件名是test2.php.jpg,也会用php执行。

(2)如果Apache的conf中有这样一行配置addtypeapplication/x-httpd-php.jpg,即使扩展名是jpg,也可以用PHP执行。

修复方案

1.apache配置文件,禁止执行类似。php。添加

2。伪静态可以解决这个问题,重写类似。php。*.打开apache的httpd.conf,找到loadmodulerewrite_modulemodules/mod_rewrite.so

。删除#符号,重新启动apache,并创建一个。网站根目录下的htaccess文件。

(四)Nginx解析漏洞
漏洞原理

Nginx默认支持CGI解析PHP,常见的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。访问www.xx.com/phpinfo.jpg/1.php,的URL时$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后它会被构造为SCRIPT_FILENAME并传递给PHPCGI。但是为什么PHP接受这样的参数并将phpinfo.jpg解析为PHP文件呢?这涉及到fix_pathinfo的选项。如果开启这个选项,PHP中会触发以下逻辑:

PHP会认为SCRIPT_FILENAME是phpinfo.jpg,1.php是PATH_INFO。所以将phpinfo.jpg作为PHP文件解析

漏洞表单
www.xxxx.com/uploadfiles/image/1.jpg/1.php

www.xxxx.com/uploadfiles.1.jpg%00.php

www.xxxx.com/uploadfiles/image/1.jpg/%20\0.php

另一种方式:上传一个名字叫test.jpg,然后访问test.jpg/.php,在这个目录下生成一句话。

摘要:

IIS6.0(可以定制x和脚本格式)

文件命名形式:

正常名字:www.xxx.com/logo.jpg

触发漏洞命名:www.xxx.com/logo.asp;。jpg或logo.asp;.x.jpg

文件夹命名形式:

正常名字:www.xxx.com/images/qq.jpg

触发漏洞命名:www.xxx.com/image.asp/qq.jpg

IIS7。X(x自定义,只能执行php)

正常名字:www.xxx.com/logo.jpg

触发漏洞命名:www.xxx.com/logo.jpg/x.php

Apache(xxxx代表任何后缀,向上标识和解析)

正常名字:www.xxx.com/a.php

触发漏洞命名:www.xxx.com/a.php.xxxx

Nginx与iis7.x一致


4。一个简单的分析例子

测试环境为:windwos2003+iis6.0注意:测试环境必须在windwos2003+iis6.0才能成功解析,不能用Cyclone之类的软件测试。

1)文件解析

直接上图地址:http://192.168.87.129:8067/6.jpg。

换图后,邮票名称为:stamp如果你去参观。jpg再次,你会发现jpg格式的图片已经被解析成asp脚本语言了。

也可以改成:6.asp;1234.jpg也有同样的效果。

2)目录解析

把文件改成正常的图片格式文件,然后拷贝到test.asp的一个目录下,然后发现可以正常解析。

5。分析利用场景


漏洞分析主要用在文件上传,上传一些图片等等,然后通过分析漏洞分析成一种动态语言。上传的重点是命名规则,因为如果你不知道服务器的文件命名规则,就不容易利用解析漏洞,因为我们要获取我们上传的文件名,只有获取了上传的文件名才能进行下一步,而命名规则不外乎以下两条。

测试源代码:http://download.csdn.net/detail/u011781521/9766646下载后,在服务器上创建一个新的网站并复制进去。

然后访问首页:http://192.168.87.129:8898/index.ASP。

后台登录地址:http://192.168.87.129:8898/tcnet/admin_login.asp

文件上传地址:http://192.168.87.129:8898/upload.ASP?我的表单。editname=bookpic&uppath=upfile&&Filelx=jpg用户名和密码:adminadmin注意:您必须登录才能使用文件上传功能。

1。本地和服务器的命名是一致的

1)文件路径上传利用率

直接上传解析漏洞名称的后门文件。

访问这个地址:http://192.168.87.129:8898/upload.ASP?我的表单。editname=bookpic&uppath=upfile&&filelx=jpg

先直接上传一个asp文件,尝试上传。

发现无法上传。那我们就利用解析漏洞,尝试把asp改成fk.asp;。jpg(注:这里是图片句子)

好了,可以上传了。复制上传的地址并访问。

图片可以查看,但是asp没有解析。。。该做什么?重新上传xxx.asp;。jpg,然后用Burp抓取包修改。

右键单击将其发送到中继器。

修改“文件路径”以在upfile/后添加aaa.asp;然后去你会发现这是一个解析漏洞。

然后访问这个地址,asp就成功解析了。

然后用菜刀连接。

密码是“包含”;对应的asp语句<%executerequest("include")%>;然后单击添加。。

连接成功。

2。本地和服务器名称不一致,根据时间、日期等命名。

1)文件类型突破

这里,DVWA用于测试,

然后点击“查看源代码”查看源代码。

低位代码:

[html] viewplain copy  <?服务器端编程语言(ProfessionalHypertextPreprocessor的缩写)
  • if(isset($_POST['Upload']){//确定上传是否为空
  • $target_path=DVWA_WEB_PAGE_TO_ROOT。"hackable/uploads/";//获取网站的绝对路径,然后用绝对路径+相对路径获取完整路径。
  • $target_path。=basename($_FILES['uploaded']['name']);//根据上面得到的完整路径+得到的文件名。
  • 如果(!move_uploaded_file($_files['uploaded']['tmp_name'],$target_path)){//确定您上传的图片是否已成功移动到完整路径。
  • //没有
  • 回声'<pre>您的图像未上传。</pre>;';
  • }
  • 否则{
  • //是的!
  • 回声"<pre>{$target_path}已成功上传!</pre>;;
  • }
  • }
  • ?>

    $_FILES['uploaded']['name']:获取$_FILES的全局文件变量的上传文件名。

    源代码中存在的问题:

    第一个没有验证后缀格式。

    什么格式都可以上传。。

    第二个客户端和服务器的文件名是一致的。


    中等代码:


    [html] viewplain copy  <?服务器端编程语言(ProfessionalHypertextPreprocessor的缩写)
  • if(isset($_POST['Upload']){
  • //我们去哪里写?
  • $target_path=DVWA_WEB_PAGE_TO_ROOT。"hackable/uploads/";
  • $target_path。=basename($_FILES['uploaded']['name']);
  • //文件信息
  • $uploaded_name=$_FILES['uploaded']['name'];
  • $uploaded_type=$_FILES['uploaded']['type'];
  • $uploaded_size=$_FILES['uploaded']['size'];
  • //是否判断这是一张图片?
  • if(($uploaded_type=="image/JPEG"||$uploaded_type=="image/png))&;&
  • ($uploaded_size<100000)){
  • //我们可以将文件移动到上传文件夹吗?
  • 如果(!move_uploaded_file($_FILES['uploaded']['tmp_name'],$target_path)){
  • //没有
  • 回声'<pre>您的图像未上传。</pre>;';
  • }
  • 否则{
  • //是的!
  • 回声"<pre>{$target_path}已成功上传!</pre>;;
  • }
  • }
  • 否则{
  • //无效文件
  • 回声'<pre>您的图像未上传。我们只能接受JPEG或PNG图像。</pre>;';
  • }
  • }
  • ?>

  • $_FILES['uploaded']['name'];获取$_FILES全局文件变量的上传文件名。

    $_FILES['uploaded']['type'];获取$_FILES全局文件变量的上传文件类型。

    $_FILES['uploaded']['size'];获取$_FILES全局文件变量的上传大小。

    验证文件上传类型和大小,是否是本地的,以及服务器名称是否一致。


    然后我们上传一个asp文件,用打嗝抓取包,看能不能上传成功。

    拦截后发给复读机,然后走。

    上传失败。。。这个很好奇。很明显,这里验证文件后没有图章名称。为什么不能上传????但是,他在这里验证了文件类型!!让我们看看上传的是什么类型的文件。

    看,它的上传类型是:application/octet-stram,所以他把上传的asp当做application。

    然后让我们将内容类型的类型更改为image/jpeg。

    再去一次,发现上传成功了。

    2)%00截断:截断字符


    注意:数据包由%00修改,一定要对url进行编码。

    6.asp;。jpg更改为6.asp%00.jpg

    然后选择正确的按钮到网址代码%00。

    在这种情况下。jpg被截断,然后变成6.asp。

    高代码:

    [html] viewplain copy  <?服务器端编程语言(ProfessionalHypertextPreprocessor的缩写)
  • if(isset($_POST['Upload']){
  • //我们去哪里写?
  • $target_path=DVWA_WEB_PAGE_TO_ROOT。"hackable/uploads/";
  • $target_path。=basename($_FILES['uploaded']['name']);
  • //文件信息
  • $uploaded_name=$_FILES['uploaded']['name'];
  • $uploaded_ext=substr($uploaded_name,strrpos($uploaded_name,'.')+1);
  • $uploaded_size=$_FILES['uploaded']['size'];
  • $uploaded_tmp=$_FILES['uploaded']['tmp_name'];
  • //确定是不是图片?
  • if((strtolower($uploaded_ext)=="jpg"||strtolower($uploaded_ext)=="JPEG"||strtolower($uploaded_ext)=="png")&;&
  • ($uploaded_size<100000英镑);&
  • getimagesize($uploaded_tmp)){
  • //我们可以将文件移动到上传文件夹吗?
  • 如果(!move_uploaded_file($uploaded_tmp,$target_path)){
  • //没有
  • 回声'<pre>您的图像未上传。</pre>;';
  • }
  • 否则{
  • //是的!
  • 回声"<pre>{$target_path}已成功上传!</pre>;;
  • }
  • }
  • 否则{
  • //无效文件
  • 回声'<pre>您的图像未上传。我们只能接受JPEG或PNG图像。</pre>;';
  • }
  • }
  • ?>

  • strrpos($uploaded_name,'.')+1的作用就是去文件的最后一个点

    例如:

    www.jpg.zip.txt.asp

    他会截住最后一点,所以绕不过去。

    然后还有一个判断。要执行下面的代码,格式必须是图片类型。

       

    欢迎分享,转载请注明来源:内存溢出

    原文地址: http://www.outofmemory.cn/zz/755410.html

    (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    上一篇 2022-04-30
    下一篇 2022-04-30

    发表评论

    登录后才能评论

    评论列表(0条)

    保存