html parser c3,XSS语义分析的阶段性总结(二)

classMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print( "Encountered a start tag:", tag)

defhandle_endtag(self, tag):print( "Encountered an end tag :", tag)

defhandle_data(self, data):print( "Encountered some data :", data)

parser = MyHTMLParserparser.feed( '

Test''

Parse me!

')

6f6eccc1d1db4444d71efbaa92069ce8.png

我们需要定义一个我们自己的 HTML 解析器来处理我们的标签,标识出来标签,html注释,html标签,属性,css等等

部分代码如下

33a6b6bdc02578e7475937330876cc4d.png

寻找反射点的思路和js的类似,通过遍历标签来来解析html结构, tagname 代表标签名, attibutes 代表属性, content 代表数据内容, #comment 代表注释,每个标签被封装为字典形式的列表元素

使用以下的demo

![4](K:git blogEthancck.github.iohexosourceimagesx3scan14.png)![4](K:git blogEthancck.github.iohexosourceimagesx3scan14.png) < html>< body>< ahref= "?q=1&w=2&e=3&r=4&t=5">test a>< style>body{background: #aaaflag{ 111222};} style>< >vara = 'xx';flag{ 111222} >< div>< textarea>flag{111222} TexTarea>kkk div>ffff < aaaaa>bb< inputstyle= "color:flag{111222}"value2= "flag{111222}"aflag{ 111222}= "aaa"/> body> html>

处理后的效果

76ab81350ec6a41b7a500b5dc02185e6.png

处理完html标签,接下该寻找sink输出点在html的上下文。思路跟js的寻找思路是相同的

通过遍历列表内容来找到我们的 input ,部分代码如下:

df72da61be432f2702f6f27f05b3651b.png

最后会给出输出点上下文的一些细节信息,如是否是html标签等等

a39ce887c97b9554995ce48932e86176.png

然后根据不同的上下文给出我们的payload,使用html语法树有很多好处,比如可以准确判断回显的位置

探究发包

X3Scan的扫描思路参考了一些xray的扫描思路,比如不发送一些产生危害的payload,只根据回显的上下文发送一些flag测试一些关键字符是否被转义和过滤,如<>,".',等,如果没有过滤最后给出建议payload,如: confirm

首先对于无法使用html和js解析的回显,如jsonp和json格式的相应包,我们使用如下的发包顺序:

随机flag ---》判断回显 ----》解析找不到回显 ---》发送 ---》判断响应包中字符是否转义---》给出payload

最后给出 1 的payload,对与jsonp_xss这里有一个tip,正常情况下判断jsonp_xss,会首先判断 content-type 是包含 text/html ,然后继续测试,实际测试中当 content-type 为空时,也可能存在xss漏洞,因此应该对两种情况都进行一下判断。

if'html'in(resp_headers. get( "content-type", "").lower) or resp_headers. get( "content-type")==None:

对于html标签内的内容

xxxxx

扫描器会依次发送 0xb9d8c , 当确认标签可以闭合,会给出 1

707aae4c06fc0a799223b695ae9245d2.png

对于标签属性

demo:https://brutelogic.com.br/xss.php?b3=

扫描器会依次发送 0xb78123 , 'psafq=' , '> , "psafq=" , "> ,当确认引号和尖括号没有被过滤时,最终给出 ">1 , "OnMoUsEoVeR=confirm// 。

abe103b15ad860304d58b2860d3dc9d4.png

对于html注释

` `

扫描器会依次发送 0xfda748 , --> , --!> ,当确定 --> 或 --!> 没有过滤时,给出payload, -->

对于标签的回显

扫描器会依次发送 0x829a5c , -829a5c- , ><>dncjbwv> ,当最后确认 > 未被过滤时,最终给出payload, ><>confirm>

另外一种情况就是回显到标签的注释里面

使用以下demo

< html>< body>< >var a = 1;// inline <?phpecho $_GET[ "a"]; ?>/*<?phpecho $_GET[ "b"]; ?>*/ > body> html

扫描器会依次发出 0x829a5c , -829a5c- , ><>dncjbwv> , n;rmhwe;// ,最后给出payload, ><>confirm> , /n;prompt(1);// 。

对于块注释,扫描器会依次发出, 0xc13f , */0xc13f;/* ,最后给出payload, */prompt(1);/*

通过上面的分析,我们可以发现使用html语法树有很多好处,比如通过发送一个随机payload,例如: ,然后通过html语法树检测是否有 wrqweew 这个标签,便可以确定payload是否执行成功了。

对于回显在js的情况,发送测试payload后,通过js语法树解析确定 Identifier 和 Literal 这两个类型中是否包含,如果payload是 Identifier 类型,就可以直接判断存在xss,最后给出payload, confirm;// 。如果payload是 Literal 类型,再通过单双引号来测试是否可以闭合。

另外,还有一些比较精致的技巧,比如对payload的随机大小写,由于html对大小写是不敏感的,但是一些waf由于设计缺陷能会被绕过。

大致流程

扫描器大致流程:

发送随机字符 --》确认参数回显---》通过html/js解析确认回显位置--》根据回显的上下文发送不同的payload进行测试--》使用html,js语法树解析是否多出来标签,属性,js语句等来确定是否执行成功

成果展示

由于一直处于开发阶段,并没进行大规模测试,但是偶尔也会有个小惊喜,某次调bug的时候发现京东某站的xss

1098d0627c34a3e6e89164095c5fad55.png

"

XSS进阶二

http://hetianlab.com/expc.do?ce=ae2460c3-845b-4aa3-a38a-976ca41f62f7

(恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而形成XSS攻击)"

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
org.htmlparser.Tag org.htmlparser.Node org.htmlparser.Text org.htmlparser.Parser org.htmlparser.Remark org.htmlparser.tags.Div org.htmlparser.Attribute org.htmlparser.tags.Html org.htmlparser.tags.Span org.htmlparser.NodeFilter org.htmlparser.lexer.Page org.htmlparser.NodeFactory org.htmlparser.http.Cookie org.htmlparser.lexer.Lexer org.htmlparser.sax.Locator org.htmlparser.tags.Bullet org.htmlparser.tags.JspTag org.htmlparser.lexer.Cursor org.htmlparser.lexer.Source org.htmlparser.lexer.Stream org.htmlparser.sax.Feedback org.htmlparser.tags.BodyTag org.htmlparser.tags.FormTag org.htmlparser.tags.HeadTag org.htmlparser.tags.LinkTag org.htmlparser.tags.MetaTag org.htmlparser.nodes.TagNode org.htmlparser.sax.XMLReader org.htmlparser.tags.FrameTag org.htmlparser.tags.ImageTag org.htmlparser.tags.InputTag org.htmlparser.tags.LabelTag org.htmlparser.tags.StyleTag org.htmlparser.tags.TableRow org.htmlparser.tags.TableTag org.htmlparser.tags.TitleTag org.htmlparser.util.NodeList org.htmlparser.beans.LinkBean org.htmlparser.nodes.TextNode org.htmlparser.sax.Attributes org.htmlparser.tags.AppletTag org.htmlparser.tags.ObjectTag org.htmlparser.tags.OptionTag org.htmlparser.tags.ScriptTag org.htmlparser.tags.SelectTag org.htmlparser.util.Translate org.htmlparser.util.sort.Sort org.htmlparser.beans.BeanyBaby org.htmlparser.http.HttpHeader org.htmlparser.lexer.PageIndex org.htmlparser.tags.BulletList org.htmlparser.tags.DoctypeTag org.htmlparser.tags.HeadingTag org.htmlparser.util.NodeList$1 org.htmlparser.beans.FilterBean org.htmlparser.beans.StringBean org.htmlparser.filters.OrFilter org.htmlparser.nodes.RemarkNode org.htmlparser.scanners.Scanner org.htmlparser.tags.BaseHrefTag org.htmlparser.tags.FrameSetTag org.htmlparser.tags.TableColumn org.htmlparser.tags.TableHeader org.htmlparser.tags.TextareaTag org.htmlparser.util.ParserUtils org.htmlparser.beans.BeanyBaby$1 org.htmlparser.filters.AndFilter org.htmlparser.filters.NotFilter org.htmlparser.filters.XorFilter org.htmlparser.tags.CompositeTag org.htmlparser.tags.ParagraphTag org.htmlparser.util.IteratorImpl org.htmlparser.util.NodeIterator org.htmlparser.visitors.HtmlPage org.htmlparser.util.sort.Ordered org.htmlparser.beans.HTMLLinkBean org.htmlparser.beans.HTMLTextBean org.htmlparser.lexer.StringSource org.htmlparser.nodes.AbstractNode org.htmlparser.util.sort.Sortable org.htmlparser.filters.RegexFilter org.htmlparser.lexer.PageAttribute org.htmlparser.scanners.JspScanner org.htmlparser.scanners.TagScanner org.htmlparser.tags.DefinitionList org.htmlparser.util.NodeTreeWalker org.htmlparser.util.ParserFeedback org.htmlparser.filters.StringFilter org.htmlparser.util.FeedbackManager org.htmlparser.util.ParserException org.htmlparser.visitors.NodeVisitor org.htmlparser.filters.IsEqualFilter org.htmlparser.filters.TagNameFilter org.htmlparser.scanners.StyleScanner org.htmlparser.util.ChainedException org.htmlparser.filters.HasChildFilter org.htmlparser.http.ConnectionManager org.htmlparser.http.ConnectionMonitor org.htmlparser.scanners.ScriptDecoder org.htmlparser.scanners.ScriptScanner org.htmlparser.PrototypicalNodeFactory org.htmlparser.filters.HasParentFilter org.htmlparser.filters.LinkRegexFilter org.htmlparser.filters.NodeClassFilter org.htmlparser.lexer.InputStreamSource org.htmlparser.util.CharacterReference org.htmlparser.util.SimpleNodeIterator org.htmlparser.filters.HasSiblingFilter org.htmlparser.filters.LinkStringFilter org.htmlparser.tags.DefinitionListBullet org.htmlparser.util.CharacterReferenceEx org.htmlparser.filters.HasAttributeFilter org.htmlparser.util.DefaultParserFeedback org.htmlparser.visitors.TagFindingVisitor org.htmlparser.visitors.LinkFindingVisitor org.htmlparser.scanners.CompositeTagScanner org.htmlparser.util.EncodingChangeException org.htmlparser.visitors.UrlModifyingVisitor org.htmlparser.filters.CssSelectorNodeFilter org.htmlparser.tags.ProcessingInstructionTag org.htmlparser.visitors.ObjectFindingVisitor org.htmlparser.visitors.StringFindingVisitor org.htmlparser.visitors.TextExtractingVisitor org.htmlparser.filters.CssSelectorNodeFilter$1 org.htmlparser.parserapplications.SiteCapturer org.htmlparser.parserapplications.WikiCapturer org.htmlparser.parserapplications.LinkExtractor org.htmlparser.parserapplications.LinkExtractor$1 org.htmlparser.parserapplications.StringExtractor org.htmlparser.filters.CssSelectorNodeFilter$YesFilter org.htmlparser.parserapplications.filterbuilder.Filter org.htmlparser.filters.CssSelectorNodeFilter$AdjacentFilter org.htmlparser.parserapplications.SiteCapturer$LocalLinkTag org.htmlparser.parserapplications.SiteCapturer$LocalFrameTag org.htmlparser.parserapplications.SiteCapturer$LocalImageTag org.htmlparser.parserapplications.filterbuilder.FilterBuilder org.htmlparser.parserapplications.filterbuilder.HtmlTreeModel org.htmlparser.parserapplications.filterbuilder.SubFilterList org.htmlparser.filters.CssSelectorNodeFilter$AttribMatchFilter org.htmlparser.filters.CssSelectorNodeFilter$HasAncestorFilter org.htmlparser.parserapplications.SiteCapturer$LocalBaseHrefTag org.htmlparser.parserapplications.filterbuilder.HtmlTreeCellRenderer org.htmlparser.parserapplications.filterbuilder.wrappers.OrFilterWrapper org.htmlparser.parserapplications.filterbuilder.layouts.NullLayoutManager org.htmlparser.parserapplications.filterbuilder.wrappers.AndFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.NotFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.RegexFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.StringFilterWrapper org.htmlparser.parserapplications.filterbuilder.layouts.VerticalLayoutManager org.htmlparser.parserapplications.filterbuilder.wrappers.TagNameFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasChildFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasParentFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.NodeClassFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasSiblingFilterWrapper org.htmlparser.parserapplications.filterbuilder.wrappers.HasAttributeFilterWrapper
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值