发布于2022年10月18日3年前 今天翻译一篇文章,在有限制的地方挖出潜在xss Referer:https://brutelogic.com.br/blog/xss-limited-input-formats/ 收获还是可以的 正文 上面的文章给出的练习地址是:https://brutelogic.com.br/tests/[email protected] 可以从页面上看到,这个xss练习平台有4题 第一题 引用email参数输出,尝试以常规的方式插入xss payload 发现并没有成功,查看文章后注意文章提到的 查看php官网查看该函数 filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它 使用过滤器里的email来过滤,由于此函数里面的email过滤是通过RFC822协议来验证是否为邮箱的 只要你payload满足这个协议即可成功触发xss RFC822:http://sphinx.mythic-beasts.com/~pdw/cgi-bin/emailvalidate 尝试将payload插入 "<script>alert(1)</script>"@x.y 1 由于filter_input()函数会过滤掉空格,所以payload的时候要避免空格 通过这个题可以得到一个检测方法: 如果是用filter_input()函数来判断是否为email的话,输入 "<"@x.y filter_input()函数会认为这是个邮箱 使用preg_match()进行正则匹配的话,输入"<"@x.y 认为不是个邮箱 一般实际中遇见邮箱填写的地方可以试试 第二题 这题会根据你输入的url来生成url (a标签),猜测使用filter_input()或正则来匹配 (因为匹配url的正则能被绕过) 正则是 [a-zA-z]+://[^\s]* 测试javascript://alert(1) 可以看到正则成功匹配出了 插入payload尝试,发现不行 根据文章说到 不明白为什么要将%0AURL编码两次? 通过查询可以知道js里面的%0A是换行符,将%0A URL编码两次,浏览器默认解码一次,那么%0A就会存在 最后payload会变成这样 javascript:// alert(1) 第三题 这题根据测试,发现判断条件有些改变 使用上一题的payload发现并不行= =,后面继续阅读文章和自己实现 发现判断的url是这样的 https://google.com/search?q=Brute%252BXSS 正则认为这才是url = = 那么根据分析得到的payload是 javascript://https://google.com/search?q=Brute%252BXSS%250Aalert(1) 第四题 通过测试发现正则是判断长度的,长度如果不达到32将不显出 最后得出payload是 12345678901<svg onload=alert(1)>
创建帐户或登录后发表意见