首页
社区
课程
招聘
[原创]正确使用snprintf导致的权限绕过
发表于: 2017-12-12 14:20 8878

[原创]正确使用snprintf导致的权限绕过

2017-12-12 14:20
8878

从事二进制漏洞的研究人员几乎都接触过strcpy和sprintf导致的缓冲区溢出漏洞,而在漏洞的修复建议中,都建议进行边界检查,同时使用strncpy和snprintf。snprintf的正确用法如下:

snprintf(dst,sizeof(dst),"%s",src);

在正确使用strncpy和snprintf的前提下,肯定是没有问题的,不过笔者也见过如下使用snprintf的开发人员:

snprintf(dst, strlen(src), "%s", src);

当然,这种完全属于使用不当的低级错误不值得讨论。笔者在研究路由器固件的过程中,意外的发现了一个漏洞,是在正确使用snprintf的情况下,由于代码整体的逻辑不够严谨,从而导致了权限绕过。在这里展示出来与大家分享一下这个有趣的漏洞。

近几年,各种路由器漏洞层出不穷,除了常见的是命令注入和缓冲区溢出漏洞,还有一类路由器漏洞就是权限绕过。一般的权限绕过分如下几种:

(1)     厂商留有隐藏的调试或者维护接口;

(2)     通过漏洞能够获取用户名+密码;

(3)     通过特殊构造的数据包可以无需用户名和密码实现任意请求。

在网上搜索一下,以上三种情况都有不少的案例,本文讨论的漏洞为第(3)种情况。为了能更好的理解,这里先简单介绍下路由器web方面的权限控制。

通常来看,大多数路由器的权限设定将htm/asp/php等页面需要登录才能访问,而css/js/png等资源是无需登录即可访问的。之后的逻辑通过sprintf函数将uri格式化到”/www/%s”或者”/web/%s”来生成路径,之后再访问对应的资源生成response。简单的示意图(省略了无关逻辑)如下:


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 1
支持
分享
最新回复 (7)
雪    币: 3255
活跃值: (1921)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
就这样开始水起来了么?
2017-12-13 09:46
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
snprintf(dst,sizeof(dst),"%s",src);    你确定这是对的?
2017-12-14 15:19
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
count
Maximum  number  of  characters  to  store. 
2017-12-14 15:19
0
雪    币: 1121
活跃值: (752)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
5
aazhiming snprintf(dst,sizeof(dst),"%s",src); 你确定这是对的?
您的高见呢?别光扯,你觉得怎么用对?
2017-12-18 08:52
0
雪    币: 1121
活跃值: (752)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
6
MsScotch 就这样开始水起来了么?
呵呵
2017-12-18 08:53
0
雪    币: 1121
活跃值: (752)
能力值: ( LV5,RANK:66 )
在线值:
发帖
回帖
粉丝
7
MsScotch 就这样开始水起来了么?
***********
2017-12-18 09:29
0
雪    币: 235
活跃值: (56)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
新的绕过方法,学习了
2018-1-4 18:05
0
游客
登录 | 注册 方可回帖
返回
//