糟糕的SQL Server反注入

时间:2011-02-02 05:26:40

标签: php sql-server code-injection

我的朋友正在运行一个网站,并且有一个PHP函数来逃避他的MSSQL语句。但是,他没有做好。当它应该是'时,他正在使用\作为他的逃脱角色。然而,当试图向他解释它没有被正确逃脱时,他不同意并且不会听,并邀请我尝试进行一些注射。我告诉他,我不会直接在他的网站上这样做,但明天我会在我的电脑上运行我的网络服务器给他看。但是,我不确定如何去做这个,因为即使它被转义错误,抛出反斜杠也会导致查询无效,语法无效,因此不会执行。我想知道是否有人对如何解决这个问题有任何意见。

我的示例查询将如下所示,类似于他的:

mssql_query("INSERT INTO Tbl_user (user_no,user_id,user_mail) VALUES ('".mssql_escape($dk_user_no)."','".mssql_escape($_POST['accname'])."','".mssql_escape($_POST['accmail'])."')");

3 个答案:

答案 0 :(得分:4)

MSSQL的标准技巧是使用;完成当前查询并启动一个新查询,并 - 删除查询结束并忽略语法错误。所以这样的事情可能会起作用(假设您正在利用的查询中没有换行符):

'; DROP users --

有关更多技巧,请参阅http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/

答案 1 :(得分:0)

例如,如果您的查询是(请告诉我密码确实是哈希):

SELECT * FROM users WHERE username='var1' AND password='var2'

想象var2\''; DROP TABLE users; --。您的完整查询将是:

SELECT * FROM users WHERE username='var1' AND password='\''; DROP TABLE users; --'

这转换为:

SELECT * FROM users WHERE username='var1' AND password='\''
DROP TABLE users

哦,不,你刚刚杀了你的数据库。吊杆。


糟糕,只是重新阅读你的问题。你能提供你的疑问吗?那会非常有帮助......

答案 2 :(得分:0)

发布此字符串的accmail参数

'); drop table Tbl_user --

“Escaped:”这将是\'); drop table Tbl_user --

当通过连接字符串形成查询时,这将给出

INSERT INTO Tbl_user (user_no,user_id,user_mail) VALUES ('$dk_user_no','accname','\'); drop table Tbl_user --