XSS中DOM型注入技巧

XSS中DOM型注入技巧

  • 练习
    • [Ma Spaghet!](#Ma Spaghet!)
    • Jefff
    • [Ugandan Knuckles](#Ugandan Knuckles)
    • [Ricardo Milos](#Ricardo Milos)
    • [Ah That's Hawt](#Ah That's Hawt)
    • Ligma
    • Mafia
    • [Ok, Boomer](#Ok, Boomer)

练习

练习网站: https://xss.pwnfunction.com/

Ma Spaghet!

题目总体要求:它说要弹出1337,不能有用户的交互,其实就是不能让用户点击触发,比如a标签,让它自动触发

分析:有个url的类进行get的传参,有参数就接受,没参数就是 Somebody,再放到innerHTML里面,,这里问题就是传递的参数直接放到html标签里面去了,就跟反射型一样,对用户传递的参数没过滤好直接传进去了

看看innerHTML标签

官网地址: https://developer.mozilla.org/zh-CN/docs/Web/API/Element/innerHTML

script标签被禁用了,但是可以换其他的,比如img标签,前面是是一个不存在的图片路径,找不到1的图片路径,就触发onerror

复制代码
?somebody=<img src=1 onerror="alert(1337)">

防御的话可以换成innerTEXT,它会自动把 < 进行实体编码,这样就不会进行标签开始状态,不会被转移,只当作文本

Jefff

setTimeout定时器,执行一次,还有个定时器setInto循环执行

这里innerText就不用看了,看看eval这里能执行不,先进行闭合",再执行1337再闭合"

复制代码
  ?jeff=aaa";alert(1337);"



这样就是分别执行,会显示aaa


还有就是可以js中的特殊连接符-

复制代码
?jeff=aaa"-alert(1337);"


但是这里是将所以的东西当成一个执行

Ugandan Knuckles

这里看到input想到单引号闭合实现onclick,但是这里是点击才行,那就是在input里跟用户不交互实现的,那就是onfocus,获取焦点,input本身就有焦点,但是触发的时候还是需要用户去点才能触发,那就还有个autofocus自动对焦

这就是焦点

复制代码
?wey=aaa" onfocus=alert(1337) autofocus=";

Ricardo Milos

这里看到action,有个action的伪协议事件,而这里是两秒后自动提交

复制代码
?ricardo=javascript:alert(1337)

Ah That's Hawt

这里过滤了一下东西,这里还是用的innerHTML,但是这里过滤了括号,那函数触发不了了

那加上%28 %29呢

这里用%28 %29也被编码了,括号没有了,那加上25呢

还是没有解析,这里是onerro是在js的语法里面,解析不了urlcode,之前那个是因为在img标签里面,那我们这里加locatiion试试

复制代码
?markassbrownlee=<img src=1 onerror=location="javascript:alert%25281337%2529">

Ligma

这里字母数字没有了,那就考虑用编码的方式绕过

编码网站: https://jsfuck.com/

比如这里编码之后还是需要进行urlcode编码,因为有符号,再用burpsuit或者其他的软件urlencode就行了


Mafia

这里还限制了长度,alert函数,那可以换换其他的,比如confirm

那现在换换其他的,可以试试构造函数也就是匿名函数也就是Function,而function是普通函数

那就定义一个函数,在例子中是赋了一个变量,也可以不赋,直接执行就行Function()(),执行前面的()

复制代码
?mafia=Function(/ALERT(1337)/.source.toLowerCase())()

还有就是parseInt方法,利用进制数返回,进制数是2-36,也就是0-9 + 26个英文字母 =36

parseInt方法: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt

还有个跟parseInt相反的方法,将进制转成字符串

toString方法: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

那将alert进行parseInt的转换

t是最大的在20

30进制? 0-9 + 20 = 30

复制代码
?mafia=eval(8680439..toString(30))(1377)

location.hash方法

复制代码
eval(location.hash.slice())

location.hash将#后面的值取出来,再用slice截取函数截取后面#的内容

复制代码
?mafia=eval(location.hash.slice(1))#alert(1337)

Ok, Boomer

这里用了DOMPurify框架,那就往下setTimeout()方法试试

setTimeout方法: https://developer.mozilla.org/zh-CN/docs/Web/API/setTimeout

eval() 函数会将传入的字符串当做 JavaScript 代码进行执行

将想要的操作放在字符串里

但是要看看框架的东西

DOMPurify框架白名单: https://github.com/cure53/DOMPurify/blob/main/src/regexp.js

javascript在框架里面,试试白名单里面的

复制代码
?boomer=<a id=ok href="cid:alert(1337)">
ok是为了走进函数里面
相关推荐
zhougl9962 小时前
html处理Base文件流
linux·前端·html
花花鱼2 小时前
node-modules-inspector 可视化node_modules
前端·javascript·vue.js
HBR666_2 小时前
marked库(高效将 Markdown 转换为 HTML 的利器)
前端·markdown
careybobo3 小时前
海康摄像头通过Web插件进行预览播放和控制
前端
杉之5 小时前
常见前端GET请求以及对应的Spring后端接收接口写法
java·前端·后端·spring·vue
喝拿铁写前端5 小时前
字段聚类,到底有什么用?——从系统混乱到结构认知的第一步
前端
再学一点就睡5 小时前
大文件上传之切片上传以及开发全流程之前端篇
前端·javascript
木木黄木木6 小时前
html5炫酷图片悬停效果实现详解
前端·html·html5
请来次降维打击!!!7 小时前
优选算法系列(5.位运算)
java·前端·c++·算法
難釋懷7 小时前
JavaScript基础-移动端常见特效
开发语言·前端·javascript