TA的每日心情 | 慵懒 2017-4-9 19:10 |
---|
签到天数: 149 天 [LV.7]常住居民III
|
为了不影响厂商的正常用户数据,通常在测试前,会注册两个帐号,来进行测试越权,测试越权时大家需要准备两个东西:
Firefox
burp suite
不管是正常模式和隐身模式的Firefox走的都是同一个代理,所以不需要重新进行设置,关于如何设置代理之类的内容,笔者在这里就不写了 :),写得太基础容易被吐槽,两个帐号暂且称为攻击者A、受害者B,笔者使用Firefox普通模式与隐身模式分别登录两个不同的帐号,如图所示:
那么如何发现越权呢?正如上文所说越权一般都会存在在一些增删改查的地方,笔者就先从一些拥有敏感信息的地方(例如:收货地址/个人资料/用户订单等)进行测试,首先切换burp到Intercept is on 状态,点击收货地址,拦截到的请求如下:
GET /u/***addr.do?xcase=list&_t=1420876539083&_=1420876539084 HTTP/1.1
Host: www.***.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html, */*
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
X-Requested-With: XMLHttpRequest
Referer: http://***.com/member/
Cookie: cookie hide
X-Forwarded-For: 127.0.0.1
Connection: keep-alive
可以看到请求包是一个get请求,笔者猜想下访问这个页面所会执行的是伪sql为:
Select 收货人,地址,邮编,手机号码 from 收货地址表 where 所属用户编号=1111
从上的伪sql语句来看,查某一个人的收货地址必定需要知道这个人的用户编号,仔细看了下请求并没有发现任何携带用户编号/姓名的参数,估计程序员把用户身份验证的标识存在session中,查询地址的时候再读取出来,这样就没有办法去修改了,那么就把这个数据包放行了,看到如下的页面:
继续看下面的功能,页面中存在 默认地址/修改/删除 三个选项,先点击一下修改,请求包如下:
POST /u/*****.do?&_t=1420879245405 HTTP/1.1
Host: www.*******.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
Accept: text/html, */*
Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://www.******.com/member/
Content-Length: 39
Cookie: cookie hide
X-Forwarded-For: 127.0.0.1
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
xcase=init&DeliveryAddrDto.addrid=82833
通过上面一个请求的包,假设伪sql语句为:
Select 收货人,地址,邮编,手机号码 from 收货地址表 where 收货地址编号=82833
这次的数据包是不是又是将校验用户身份的值存在session当中了呢:),在当前环境下,笔者猜测下几种状态:
用户身份标识存在存在session当中并使用它进行校验 = 不可越权
用户身份标识存在存在session当中没有使用它进行校验 = 可越权
未将用户身份标识存在session中 = 可越权(这点排除)
*这里的校验是指:校验对应的收货地址是否属于当前登录的用户
那么为了校验这两个状态,笔者直接把其中代表地址编号的DeliveryAddrDto.addrid参数改为82833或者前面数字,如果没有使用用户表示进行校验的话,就可以直接获取到其他收货地址编号的内容,实际测试结果是没有进行校验,如图所示:
觉得好就转过来的 |
|