day2-day3-day4上午-SSRF漏洞

SSRF漏洞

1.SSRF漏洞介绍

SSRF(Server-Side Request Forgery)服务端请求为伪造,SSRF是⼀种由攻击者构造形成由服务端发起请求的⼀个安全漏洞。 ⼀般情况下,SSRF攻击的⽬标是从外⽹⽆法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连⽽与外⽹隔离的内部系统)SRF漏洞形成的原因⼤多是因为服务端提供了从其他服务器应⽤获取数据的功能且没有对⽬标地址作过滤和限制。
个人理解:ssrf漏洞就是利用他人的电脑进行攻击,可以比作为我是幕后主谋,但是我没有直接攻击,而是指挥别人去攻击我想要攻击的目标。类似让服务器本身发起攻击。

2.SSRF的挖掘和发现

SSRF漏洞发现及挖掘能够对外发起⽹络请求的地⽅,就可能存在 SSRF 漏洞从远程服务器请求资

  • 数据库内置功能(Oracle、MongoDB、MSSQL、Postgres、CouchDB)
  • Webmail 收取其他邮箱邮件(POP3、IMAP、SMTP)
  • ⽂件处理、编码处理、属性信息处理(ffmpeg、ImageMagic、DOCX、PDF、XML)
  • 分享:通过URL地址分享⽹⻚内容
  • 转码服务
  • 在线翻译
  • 图⽚加载与下载:通过URL地址加载或下载图⽚
  • 图⽚、⽂章收藏功能
  • 未公开的api实现以及其他调⽤URL的功能
  • 从URL关键字中寻找
    share、wap、url、links、display、u、3g、sourceURL、image、URl、domain

3.SSRF进阶

1. curl基础知识

curl url(获取⽹址的⽂本信息)
curl www.baidu.com
curl -i url(获取⽂本的头部及⽂本信息)
curl -i www.baidu.com
curl -v(获取整个通信过程)
curl -v www.baidu.com
curl -X url(使⽤特定⽅法请求⽹⻚⽂本)
curl -X GET www.baidu.com

2. gopher基础知识

Gopher是Internet上⼀个信息查找系统,它将Internet上的⽂件组织成某种
索引,⽅便⽤户从Internet的⼀处带到另⼀处。
其中内容可以是字符串,php代码,⽂件等。gopher协议是ssrf利⽤中最强⼤的协议
限制:gopher协议在各个编程语⾔中的使⽤限制

3.利用curl和gopher(ssrf的利用)

  1. 在本机上打开phpstudy,在根目录下面创建一个php文件,内容如下。
    image
    image
  2. 查询本机ip,在浏览器中访问第一步中创建的文件,并加上参数,看是否成功,成功结果如下。
    模糊部分为自己本机的ip
    image
  3. 第二步成功以后,利用burp抓包,将抓到的请求url编码。
    image
    image
  4. 在kali上,按照如下命令发送。
    模糊部分为:你刚刚的ip:80
    image

4.ssrf的练习靶场ctfhub

image

  1. 题目一-内网访问
    image
    在url=后面直接访问127.0.0.1/flag.php就可以

  2. 题目二-伪协议读取文件
    这里首先要知道我们的目录是在/var/www/html/下面,或者也有根目录下面,或者在某些目录下面,需要靠一些命令去搜寻。这里就只需要在url后面加上file:///var/www/html/flag.php读取,然后再查看源代码即可得到。但是我这里是尝试用了php://filter/read=convert.base64-encode/resource=/var/www/html/flag.php 却不可以,然后我也使用了/…/…/…/flag.php去构造路径也不可以。也不知道为什么。
    image
    image

  3. 题目3-端口扫描
    首先这里我以为使用namp之类的工具去扫描,但是看了大佬的博客就发现完全想错了。这里首先我看到的博客有两种方法,第一种是爆破端口,url后面加127.0.0.1:8000,使用bp去爆破。第二种是写脚本去爆破,但是我不太脚本是怎么写的。感觉可以研究研究。
    image
    image
    image

  4. 题目四-POST请求
    这道题首先使用dirsearch扫描出两个文件index.php,flag.php。使用伪协议以及view-source:查看源码,如下。
    image
    image
    然后url后面加上127.0.0.1/flag.php,访问。在源码部分我们发现了key。
    image
    image
    然后再将key提交,用bp截取数据包,然后二次url编码数据包gopher发送就行。
    image
    image

  5. 题目五-上传文件
    说实话,我一开始想到的是用php相关的函数上传,就是move_uploaded_file()函数,但是又想了一下,这个只是移动已经上传的文件,所以应该不是。虽然提示给的是上传到flag.php,但我没有懂提示的意思。后来参考了一下大佬的博客,我发现原来我没有懂提示的意思,,首先要上传文件,肯定要像文件上传的靶场一样,要有文件上传的地方。所以要访问到flag.php,没人说flag.php只能是flag,也可以是一个文件上传的部分。
    image
    这里之后,我原本以为这里是上传一个php小马,然后用蚁剑连接。但是首先遇到了一个问题,自己电脑不让写小马qaq。然后我就放弃了,去看了大佬的博客,然后发现随便上传一个文件就行,但是发现没有上传按钮,所以这里学到了一手。
    image
    上传文件完成之后记得抓包。这里老师说最好是改成127.0.0.1,这道题没有检查而已只不过.
    image
    后续处理包的方法有两种,因为两次编码后gopher发送后显示url太大,所以这里第一种方法是将那个数据包只留核心部分再二次url编码。第二种方法是使用脚本,脚本我放在github上了。https://github.com/poemThesky/poemThesky.github.io/blob/48987e494dd5fb9ae82f17c7dc3606027a449511/ctf/ctfhub-ssrf-%E7%9B%B8%E5%85%B3%E8%84%9A%E6%9C%AC/ssrf%E4%BA%94%E9%A2%98%E8%84%9A%E6%9C%AC.py
    image
    image

  6. FastCGI协议
    这个题完全不会,听了老师的讲解之后,发现首先就是构造了一个python脚本,然后在kali上自己打自己。将得到的exp.txt内容二次url加密之后再gopher发送就得到了flag文件的目录,最后再使用file协议读取这个flag文件就可以得到flag。
    脚本在后面的github上:https://github.com/poemThesky/poemThesky.github.io/blob/48987e494dd5fb9ae82f17c7dc3606027a449511/ctf/ctfhub-ssrf-%E7%9B%B8%E5%85%B3%E8%84%9A%E6%9C%AC/ssrfl-6%E9%A2%98fastccgi-fpm.py
    这里有几个需要注意的点,第一点,fastcgi好像是利用9000端口的漏洞,好像是利用原本有的php文件进行利用,但是具体的漏洞原理和脚本是怎么写的我没有看看懂。

    image

    image
    image
    image

  7. redis
    首先要知道redis的6379端口有漏洞,所以我们第一步是去探测是否存在。使用dict://127.0.0.1:6379 探测。然后构造对应的脚本,在如下的github:https://github.com/poemThesky/poemThesky.github.io/blob/3ff58951e26b53a0d59401208704c481650411e5/ctf/ctfhub-ssrf-%E7%9B%B8%E5%85%B3%E8%84%9A%E6%9C%AC/7%E9%A2%98%E7%AC%AC%E4%B8%80%E7%A7%8D%E6%96%B9%E6%B3%95redis.py
    脚本里面的内容二次url编码,然后直接甩到url的后面,这个过程不知道为什么很慢,而且返回503好像。然后再使用file:///var/www/html/shell.php 去读取文件内容,如果有就说明文件上传成功。然后再传入对应的参数"ls /"去查看对应的文件,发财有个flag文件,然后再使用cat查看就可以。
    第二种方法是使用脚本直接构造对应的传递的参数,脚本的github位置:https://github.com/poemThesky/poemThesky.github.io/blob/3ff58951e26b53a0d59401208704c481650411e5/ctf/ctfhub-ssrf-%E7%9B%B8%E5%85%B3%E8%84%9A%E6%9C%AC/7%E9%A2%98%E7%AC%AC%E4%BA%8C%E7%A7%8D%E6%96%B9%E6%B3%95python%E6%9E%84%E9%80%A0%E8%84%9A%E6%9C%AC.py。 然后再使用蚁剑去连接网站。如下是操作方法。
    image
    image
    image
    我这里的peak.php开始有点问题,后来换成了shell.php去弄,前面步骤一样,脚本已更新。
    image
    image
    image

  8. url BYPASS
    这道题我以为只用传入那个提示的必须输入的就行,但是发现好像不对。然后上网查了一下大佬的博客,看到了两种payload:
    ?url=http://notfound.ctfhub.com@127.0.0.1/flag.php

    ?url=http://notfound.ctfhub.com.127.0.0.1.nip.io/flag.php
    这两种都相当于等于?url=http://127.0.0.1
    第一种方法的原理:
    @符号:在URL中,@符号之前的部分通常用于指定用户名和(可选)密码。这意味着 notfound.ctfhub.com 被解析为用户名,而实际的主机名是 127.0.0.1。
    解析:浏览器或解析器会忽略用户名部分(notfound.ctfhub.com),直接访问 127.0.0.1。
    第二种方法的原理:
    域名解析:nip.io 是一个特殊的DNS服务,它将带有IP地址的子域名解析为该IP地址。在这个例子中,notfound.ctfhub.com.127.0.0.1.nip.io 实际上会解析到 127.0.0.1。
    解析:通过 nip.io 的解析规则,这个域名直接被解释为 127.0.0.1。
    nip.io 是一个特殊的DNS服务,它将域名中的IP地址部分直接解析为该IP地址。例如,anything.127.0.0.1.nip.io 会解析为 127.0.0.1。
    这使得 http://notfound.ctfhub.com.127.0.0.1.nip.io 实际上访问的是 127.0.0.1,而 notfound.ctfhub.com 部分被忽略。
    image

  9. 数字ip BYPASS
    这道题提示我们被禁了127,172等。然后我们访问,发现确实被禁了。
    image
    然后我们就考虑进制转换访问。
    127.0.0.1的十进制:2130706433
    127.0.0.1的十六进制:0x7F000001
    image

  10. 302跳转 Bypass
    这里说实话我看题目我猜测是要重定向的,我想上传一个重定向的文件上去,然后访问这个文件应该就可以了,但是还没有想到怎么上传一个重定向的文件上去??难道利用类似redis的漏洞去上传吗,但是这里有吗,还没有尝试过。另外一种方法是直接?url=localhost/flag.php

  11. dns重绑定 Bypass
    好吧这里也看不懂。这是大佬的解释:附件中讲的很清楚,由于我们无法在程序运行时以毫秒为单位手动更改DNS记录,所以要想实现DNS重绑定攻击,就必须配置一个自定义的恶意DNS服务器,并设定好指定域名的解析IP,再将TTL设置为0,使其解析时在非法内网IP与合法其他IP间反复横跳。我们可以自己编写解析服务,也可以利用测试dns重绑定漏洞的网站,让一个域名随意绑定两个IP。
    https://lock.cmpxchg8b.com/rebinder.html。

4.gopherus的构造工具

github地址:https://github.com/tarunkant/Gopherus

攻击 fastcgi:

python2 gopherus.py --exploit fastcgi
提示输⼊访问的⽂件可以是⾃带的⽂件 /usr/local/lib/php/PEAR.php
再次提示的是输⼊执⾏的命令
输⼊ ls /
回⻋即可

攻击redis:

python2 gopherus.py --exploit redis
输⼊ PHPShell
提示输⼊路径
我们使⽤默认的直接回⻋即可
提示输⼊webshell内容
我们使⽤默认的回⻋即可
如图告诉我们webshell的地址和密码。

5.关于ssrf的总结

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值