我的朋友正在运行一个网站,并且有一个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'])."')");
答案 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 --