首页 新闻 会员 周边

EF的注入漏洞,在线等... :)

0
悬赏园豆:50 [已解决问题] 解决于 2016-08-12 18:55

今天无意中发现了EF的一个注入漏洞:

public IQueryable<PostTag> ExistPostTags(int blogId, IEnumerable<string> tagNames)
        {
            return _PostTag.Where(p => p.BlogId == blogId && tagNames.Contains(p.Name));
        } 

其生成的sql语句如下:

SELECT
    [Extent1].[TagID] AS [TagID],
    [Extent1].[TagName] AS [TagName],
    [Extent1].[BlogId] AS [BlogId],
    [Extent1].[UseCount] AS [UseCount],
    [Extent1].[CreateTime] AS [CreateTime]
    FROM [dbo].[blog_Tag] AS [Extent1]
    WHERE ([Extent1].[BlogId] = @p__linq__0) AND ([Extent1].[TagName] IN (N'store-generated', N'tag3'')) And ((''')) AND ([Extent1].[TagName] IS NOT NULL)

很明显地Contains方法生成的sql:IN(***),是直接拼接的,那么如此就存在了注入漏洞。

求大神,在线等。:)

问题补充:

1 输入:

)(

sql

IN (N')('))

2 输入:

x'')('

sql:

IN (N'x'''')('''))
蝌蝌的主页 蝌蝌 | 初学一级 | 园豆:158
提问于:2016-08-12 12:05
< >
分享
最佳答案
1

你仔细看会发现.他会把单引号转义.并不是参数化查询才能解决注入

收获园豆:40
吴瑞祥 | 高人七级 |园豆:29449 | 2016-08-12 12:28
其他回答(7)
0

你觉得有注入漏洞,你注入一个看看啊。

并不需要大神,自己测试就够了。

收获园豆:5
爱编程的大叔 | 园豆:30839 (高人七级) | 2016-08-12 13:20
0

不要激动,先注入了在发帖,并提交issues

收获园豆:5
czd890 | 园豆:14412 (专家六级) | 2016-08-12 15:46
0

当时我就震惊了,点进来发现是乌龙...

幻天芒 | 园豆:37175 (高人七级) | 2016-08-12 16:57
0

EF以前的版本,像你这个查询是会参数化,到了6.*版本就不是了,不知道是出于什么原因改成这样。不过LZ也不用担心,微软的人不傻的,他们肯定会处理好注入问题。

我叫So | 园豆:186 (初学一级) | 2016-08-16 19:37
0

你注一下啊!

糖果的二师兄 | 园豆:204 (菜鸟二级) | 2016-08-20 09:28
0

我看到标题也表示很震惊,然后马上进来看了一下。然后我就放心了

LoveCoder | 园豆:216 (菜鸟二级) | 2016-08-24 17:16
0

哈哈哈,大愚若智。

李0539 | 园豆:442 (菜鸟二级) | 2019-05-20 11:17

哇,无情打脸

支持(0) 反对(0) 蝌蝌 | 园豆:158 (初学一级) | 2019-05-20 11:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册