• 上传漏洞(二)


    绕过上传漏洞

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

    客户端检测:客户端使用Javascript检测,在文件未上传时,就对文件进行验证。

    服务端检测:服务端脚本一般会检测文件的MIME类型,检测文件扩展名是否合法,检测文件内容是否合法。

    一、客户端检测绕过

    (1)Firebug

    firebug是火狐浏览器的插件,可以轻松调试前端代码。新版本的火狐浏览器应该自带了这个插件。使用firebug删除javascript的验证事件,javascript验证就会失效。

    (2)中间人攻击

    使用burpsuit进行中间人攻击,上传前先把文件改为合法名字,用burpsuit拦截请求,此时已经通过了客户端检测,然后在burpsuit中将文件名修改掉,Content-Length也要修改为对应的长度。

    客户端验证是防止用户输入错误,减少服务器开销,服务器验证才可以真正防御攻击者。

    二、服务端检测

    (1)黑名单验证

    在黑名单中定义一些不安全的扩展名,服务器收到文件后,与黑名单中的扩展名进行匹配,若匹配到,则认为文件不合法。黑名单过滤是不安全的,因为很可能漏掉一些扩展名。而且还有其他绕过方式,如:大小写绕过,windows下可以用‘asp.‘绕过,‘.’会被忽略。

    (2)白名单验证

    与黑名单方式相反,上传的文件与白名单的扩展名进行匹配,若匹配到,则上传成功,否则,拒绝上传。

    白名单方式也不是绝对安全,如果配合一些解析漏洞,还是会有被攻击的可能,如IIS6.0会将1.asp;1.jpg当做JPG格式,但是会把它当做asp脚本来执行。

    (3)MIME验证

    MIME类型用来设定某种扩展名文件的打开方式,如GIF图片的MIME为image/gif,CSS文件的MIME类型为text/css。

    这种验证方式得绕过也很简单,拦截HTTP上传文件的请求,将Content-Type修改,即可绕过。

    (4)目录验证

    有些网站在上传文件时,如果上传的目录不存在,则会新建一个文件夹,这是很危险的,如果Web容器为IIS6.0,我上传到一个后缀为.asp的目录,这个目录不存在,就会新建,然后上传恶意文件到这个目录,就会造成攻击。

    (5)截断上传攻击

    %00截断,比如:username%00admin,则只会显示username,%00之后的字符串被截断了。

    我们上传一个1.asp php,然后用burpsuit拦截请求,点击HEX选项将文件名中的空格(16进制是20)改为00,即NULL,然后提交请求,上传的文件为1.asp,这样就造成了%00截断上传。

    修复上传漏洞

    修复上传漏洞也不难:

    ①查看Web容器版本,要及时更新,如果不需要,关闭危险配置项。

    ②使用白名单验证文件扩展名。

    ③接收文件,对文件进行重命名。

    ④严格控制文件上传路径,只要攻击者不知道文件路径,就很难造成攻击。

  • 相关阅读:
    小甲鱼与客服的对话,代码与解析
    (role,line_spoken) = each_line.split(':',2) 小甲鱼python 一个任务
    python open() 方法 No such file or directory: 应该怎么解决
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
    并发编程
  • 原文地址:https://www.cnblogs.com/whitehawk/p/9892506.html
Copyright © 2020-2023  润新知