响应变参数-挖掘潜在的逻辑越权

2019-03-17 15:10:36 37 4165

开始

对一个网站做测试的时候发现了这样一条请求:

这条请求返回的是个人信息(用户ID、手机号、密码)

{"responseData":{"userid":"用户id","login":"用户名","password":"密码","mobilenum":"手机号","mobileisbound":"01","email":null}}

一开始的想法是变为GET请求(可行),然后增加JSONP劫持的回调参数。。。(失败)

过程

挖不到漏洞怎么办?瞎想,想多了,尝试多了就会有惊喜!后来想到响应变参数的方式。

一开始我尝试的是将返回的JSON内容变为HTTP请求参数的格式,但没成功。

后来一想会不会是因为参数命名格式问题导致的,于是开始了下面的测试。

注意同网站其他请求参数的命名方式

结论:大写、英文

响应变参数

注意参数值都应为B用户,也就是你需要准备A、B两个用户

上面所述的返回信息中包含了很多“参数”,可生成如下(这里可以使用我写的一个BurpSuite插件进行转换 - https://github.com/gh0stkey/Json2Dict ):

userid=B用户id
login=B用户名
password=B用户密码
mobilenum=B用户手机号
email=B用户邮箱

整合

B信息+命名规则,最后变成如下的字典:

F12进入Console使用JavaScript的 str.toUpperCase()转换成大写字母

USERID=B用户id
LOGIN=B用户名
PASSWORD=B用户密码
MOBILENUM=B用户手机号
EMAIL=B用户邮箱

结尾

然后Burp Intruder模块开启(使用A用户的凭证去跑),导入字典(这里参数位置在POST请求正文中),Start :

测试结果发现使用LOGIN参数可以成功的从A用户的个人信息越权获取到B用户的个人信息~

关于作者

mstkey19篇文章212篇回复

信息安全业务爱好者

评论37次

要评论?请先  登录  或  注册
  • 37楼
    3 天前 13:41
    maohou

    burpsuite可以直接修改响应参数的

    1

    burp自带的修改不能实现这种效果吧

  • 36楼
    4 天前 14:54

    就利用那个A的登录的那个凭证,然后把其中的所有参数换成另一个用户的,去看能否获取B的信息?

  • 35楼
    2019-4-17 15:35

    emmmm逻辑讲讲代码审计不好吗

  • 34楼
    2019-4-9 11:36

    我的理解是 发送的请求必要要满足服务端的格式,所以必须要USERID、LOGIN、PASSWORD、MOBILENUM、EMAIL几个参数全部符合规则,然后分别修改这几个参数为另一个用户的信息,尝试是否越权

  • 33楼
    2019-3-26 11:36
    绿剑01

    一些在客户端校验,或者服务端未未二次校验的,改响应包的参数确实有意外收获,但是这种问题一般很少

    1

    我理解也是,Burp里面的Do intercept - Response to this request

  • 32楼
    2019-3-26 10:34
    小居居

    师傅,最近正在学习越权的一些思路,这篇文章有个问题问一下:1. 文章是先用a,b两个账户分别获取USERID、LOGIN、PASSWORD、MOBILENUM、EMAIL、这几个参数。2. 然后,在修改A登录状态下,将某一请求中的参数变为B的上面获取到的参数的值,看是否可以访问到B账户对应的信息,这样的话确定存在越权,是这个思路吗?

    1

    我理解的也是这样子,,看到响应包后,构造相应包中的参数,去请求另一个账户的信息。

  • 31楼
    2019-3-26 08:45

    师傅,最近正在学习越权的一些思路,这篇文章有个问题问一下:1. 文章是先用a,b两个账户分别获取USERID、LOGIN、PASSWORD、MOBILENUM、EMAIL、这几个参数。2. 然后,在修改A登录状态下,将某一请求中的参数变为B的上面获取到的参数的值,看是否可以访问到B账户对应的信息,这样的话确定存在越权,是这个思路吗?

  • 30楼
    2019-3-23 15:13

    一般什么时候会出现这种情况;这时候程序接口一般是怎么写来接收参数的?

  • 29楼
    2019-3-22 20:13

    学习了 ,思路确实很奇特

  • 28楼
    2019-3-21 10:56
    pd1024

    说实话 感觉稍微有点没看明白。。可能我太菜了

    1
    mstkey

    首先核心思路是:响应变参数 其次就是准备两个账号 A B ,B的响应变参数放入A用户凭证的请求中 如果A凭证可越权获取B信息,同理也可以获取其他用户信息,遍历下参数就行了。这是越权的测试方法...

    2
    mstkey

    还是转换呀,通过那个getUserAuth请求的响应转换成参数啊

    4

    明白了!谢谢解答:)

  • 27楼
    2019-3-20 18:30
    pd1024

    说实话 感觉稍微有点没看明白。。可能我太菜了

    1
    mstkey

    首先核心思路是:响应变参数 其次就是准备两个账号 A B ,B的响应变参数放入A用户凭证的请求中 如果A凭证可越权获取B信息,同理也可以获取其他用户信息,遍历下参数就行了。这是越权的测试方法...

    2
    Sagat0219

    请教下老师傅,依照这个思路,用“A的凭证”加上“B的参数”越权,但是B的参数又是在什么阶段获取到的呢?

    3

    还是转换呀,通过那个getUserAuth请求的响应转换成参数啊

  • 26楼
    2019-3-20 16:36
    pd1024

    说实话 感觉稍微有点没看明白。。可能我太菜了

    1
    mstkey

    首先核心思路是:响应变参数 其次就是准备两个账号 A B ,B的响应变参数放入A用户凭证的请求中 如果A凭证可越权获取B信息,同理也可以获取其他用户信息,遍历下参数就行了。这是越权的测试方法...

    2

    请教下老师傅,依照这个思路,用“A的凭证”加上“B的参数”越权,但是B的参数又是在什么阶段获取到的呢?

  • 25楼
    2019-3-19 13:24

    思路值得学习,核心应该是测试时候多考虑get,post的变化

  • 24楼
    2019-3-19 12:07

    burp可以抓取response的包,修改后提交完成确权

  • 23楼
    2019-3-19 11:53

    思路可以 get到新知识点

  • 22楼
    2019-3-19 11:23

    一些在客户端校验,或者服务端未未二次校验的,改响应包的参数确实有意外收获,但是这种问题一般很少

  • 21楼
    2019-3-19 10:51
    silinger

    请教一下:对于用户的凭证(cookie session),原本A的请求的凭证格式是什么样的?在越权的时候凭证的格式修改成了什么?

    1

    简单的来说就是你抓了A用户的包,把A用户的包里加LOGIN参数,对应的参数值是B用户的信息,就越权查看到B用户了。

  • 20楼
    2019-3-19 10:51
    怕冷的企鹅

    大佬,那一句改为GET请求,增加JSONP劫持的回调参数是什么意思啊,还有修改响应包不行么

    1
    宇哥哥

    应该说的是增加callback之类的参数。

    2

    你真是特别关注啊,刚刚查了一下知道了

  • 19楼
    2019-3-19 10:48
    怕冷的企鹅

    大佬,那一句改为GET请求,增加JSONP劫持的回调参数是什么意思啊,还有修改响应包不行么

    1

    应该说的是增加callback之类的参数。

  • 18楼
    2019-3-19 10:28

    大佬,那一句改为GET请求,增加JSONP劫持的回调参数是什么意思啊,还有修改响应包不行么