未授权访问绕过思路

极客

我踩过的坑和悟出的门道

说真的,每次一提到未授权访问绕过思路这个话题,我这心里就五味杂陈,为啥?因为我当初在这上面栽过的跟头,那可真不少啊!今天就来跟大家唠唠嗑,把我这些年摸爬滚打总结出来的未授权访问绕过思路,掏心窝子地分享给你们。

未授权访问绕过思路

先搞明白,啥叫“未授权访问”?

哎,别急着往下翻,咱得先把概念捋清楚,未授权访问说白了,就是你没有权限,但系统偏偏让你进去了,或者让你看到了不该看的东西,这种情况在Web安全里太常见了,什么后台页面直接访问啊、API接口没有鉴权啊、越权查看别人数据啊……啧啧,想想都头疼。

但今天咱重点聊的是未授权访问绕过思路——也就是说,明明有防护,我们怎么“巧妙地”绕过去,当然啦,我这里说的都是合法授权测试的前提下哈,别拿去干坏事,不然我可担不起这责任!

我的第一条未授权访问绕过思路:路径与URL的把戏

记得有一次做渗透测试,目标后台/admin死活进不去,403拦得死死的,我当时那个郁闷啊……后来灵机一动,试了试/admin/、/admin/.、//admin、/./admin,嘿,你猜怎么着?/admin/居然就进去了!这就是典型的未授权访问绕过思路之一——路径规范化差异。

不同的中间件、框架对URL的解析规则不一样,有的会把/admin/和/admin当成两个东西,有的对大小写敏感(/Admin试试?),还有的对URL编码处理有差异(%2fadmin、%252fadmin),这些小细节,往往就是未授权访问绕过思路的突破口,你说气人不气人?防护做得再好,一个斜杠就破防了。

第二条思路:HTTP头的“狸猫换太子”

这个我必须重点说!有多少次,我卡在401/403上,最后靠改Header就进去了,那感觉,啧啧,爽!

常见的未授权访问绕过思路里,HTTP头伪造绝对占一席之地。

  • X-Forwarded-For: 127.0.0.1 —— 假装自己是本地访问
  • X-Real-IP: 127.0.0.1 —— 同上,换个马甲
  • X-Original-URL: /admin —— 有些框架会认这个
  • X-Rewrite-URL: /admin —— 老套路但有时候真管用
  • Referer: https://target.com/admin —— 骗它说我是从内部页面跳过来的

我印象最深的一次,某个系统只允许内网IP访问管理接口,我加了X-Forwarded-For: 127.0.0.1,直接大摇大摆进去了,当时我都愣住了——这也行?但事实就是,很多系统信任这些头,这就给了我们未授权访问绕过思路的发挥空间。

第三条思路:接口与参数层面的“偷梁换柱”

有时候啊,正面刚不过,咱就绕道走,这也是我特别想强调的未授权访问绕过思路——别死磕一个点,找它的“兄弟接口”。

比如说,/api/v1/user/info需要鉴权,但/api/v1/user/info/、/api/v1/userInfo、/api/v1/user/info?id=1这些呢?有些开发者只在一个路由上加了鉴权中间件,换个路径就忘了,还有更绝的,把GET改成POST,或者加个?_method=GET,有时候也能绕过。

参数污染也是个好玩的未授权访问绕过思路,比如?role=user&role=admin,有的后端取第一个,有的取最后一个,还有的取数组……乱七八糟的,一不小心就绕过去了。

还有个思路:HTTP方法与会话的“小动作”

讲真,有时候我都觉得,这些系统咋这么“单纯”呢?改个请求方法,GET换成POST、PUT、OPTIONS,居然就放行了,这就是未授权访问绕过思路里成本最低的一种——HTTP方法绕过。

会话相关的,比如Cookie里的role=user改成role=admin(当然现在很少有这么傻的了),或者利用JWT的alg=none漏洞,或者干脆把Cookie删了试试——有的系统没Cookie反而当成游客放行,你说这逻辑是不是有点离谱?但偏偏就有!

最后唠两句心里话

写到这里,我真心想说:未授权访问绕过思路这东西,核心就一个字——细,你得细到去看每一个斜杠、每一个头、每一个参数、每一种请求方法,防护方往往是在“正常路径”上设卡,而我们的未授权访问绕过思路,就是要找那些“不正常但系统又认”的路径。

当然啦,我也得提醒一句:这些未授权访问绕过思路,一定要在合法授权范围内使用!我写这些是想帮做安全测试的朋友少走弯路,不是教人干坏事,技术本身没对错,看你怎么用,对吧?

好了,今天就唠到这儿,如果你也有好玩的未授权访问绕过思路,欢迎来跟我交流,咱一起研究研究,毕竟这行当,学无止境嘛!下次见啦~

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]