sqlserver 2000 insert注入的问题
阅读原文时间:2023年07月08日阅读:1

一个sql server 2000的注入点

猜测语句如下:
insert into t1(col1, col2, col3) values('注入点1','数据点2','xxx');

注入点1的值可以通过opt1参数传入. 但是后端好像以逗号进行分割, 也就是传入demo','') 实际到sql执行时就只有demo'

数据点2的值可以通过opt2参数传入. 这个不是可注入的点, 它进行了过滤. 测试得到如下
        ' 单引号被替换成空格
        " 双引号被替换成"
        & 被替换成&
        + 被替换成空格
        ,、)、-- 不变

这种情况下求助各路大佬还有救吗? 

我测试发现注入点1传入 demo'+@@version+1+'还是可以报错得出数据库版本, 数据库名称和用户等一些信息
demo'+(select @@version)+1+' 则提示"上下文中不允许使用子查询。只允许使用标量表达式" 这个好像是sql server 2000不支持这种查询方法

然后最后提一下. 就是上面给出的猜测语句是我简化过得, 应该不了解sql server. 实际通过报道提示拼出来的语句可能如下
insert into t1(col1, col2, col3) values('注入点1', N'COL2 [数据点2]','xxx');

有懂的大佬求问下这个 N'COL2 [数据点2]' 在sqlserver中是什么意思

收藏 评分  

点评回复

举报

2#

 80uncle 发表于 2018-7-9 14:36:05 | 只看该作者

九零元老|主题 19|帖子 418|积分 62

注入点1传入 demo',1,1)--- 看返回什么
如过返回正常说明可以注入

接下来
demo',(select @@version),1)---  

点评回复

评分 举报

3#

 阿布1994 发表于 2018-7-10 16:50:18 | 只看该作者

正式成员|主题 20|帖子 303|积分 37

这waf这么变态放弃吧

点评回复

评分 举报

4#

 ′雨。 发表于 2018-7-10 20:05:33 | 只看该作者

九零元老|主题 30|帖子 253|积分 49

opt1 '/*
opt2 */,xxx,xxx

点评回复

评分 举报

5#

  楼主 evilhat 发表于 2018-7-10 20:28:44 | 只看该作者

正式成员|主题 6|帖子 45|积分 48

80uncle 发表于 2018-7-9 14:36
注入点1传入 demo',1,1)--- 看返回什么
如过返回正常说明可以注入

返回'COL2'附近的语法不正确. 在这里逗号用不了的, 后端把逗号后的去掉了

点评回复

评分 举报

6#

  楼主 evilhat 发表于 2018-7-10 20:31:57 | 只看该作者

正式成员|主题 6|帖子 45|积分 48

′雨。 发表于 2018-7-10 20:05
opt1 '/*
opt2 */,xxx,xxx

提示: 上下文中不允许使用'xxx'。此处只允许使用常量、表达式或变量。不允许使用列名

点评回复

评分 举报

7#

  楼主 evilhat 发表于 2018-7-10 20:32:50 | 只看该作者

正式成员|主题 6|帖子 45|积分 48

阿布1994 发表于 2018-7-10 16:50
这waf这么变态放弃吧

所以才来求教各位大佬还有药救不

点评回复

评分 举报

8#

 ′雨。 发表于 2018-7-11 19:19:34 | 只看该作者

九零元老|主题 30|帖子 253|积分 49

evilhat 发表于 2018-7-10 20:31
提示: 上下文中不允许使用'xxx'。此处只允许使用常量、表达式或变量。不允许使用列名

你自己在xxx这注入不就行了。。
都没限制了。

点评回复

评分 举报

9#

 ′雨。 发表于 2018-7-11 19:19:34 | 只看该作者

九零元老|主题 30|帖子 253|积分 49

evilhat 发表于 2018-7-10 20:31
提示: 上下文中不允许使用'xxx'。此处只允许使用常量、表达式或变量。不允许使用列名

你自己在xxx这注入不就行了。。
都没限制了。