Php 错误的SQL Server反注入
我的朋友正在运行一个网站,并且有一个PHP函数来逃避他的MSSQL语句。然而,他做得不好。当转义字符应为“”时,他正在使用\作为其转义字符。然而,当他试图向他解释它没有被正确地逃脱时,他不同意,也不愿意听,并邀请我尝试注射。我告诉他,我不会直接在他的网站上做这件事,但明天我会在我的电脑上运行我的Web服务器,让他看看。但是,我不确定该怎么做,因为即使转义错误,抛出反斜杠也会导致查询无效,语法无效,因此不会执行。我想知道是否有人对如何解决这个问题有任何意见 我的示例查询如下所示,类似于他的:Php 错误的SQL Server反注入,php,sql-server,code-injection,Php,Sql Server,Code Injection,我的朋友正在运行一个网站,并且有一个PHP函数来逃避他的MSSQL语句。然而,他做得不好。当转义字符应为“”时,他正在使用\作为其转义字符。然而,当他试图向他解释它没有被正确地逃脱时,他不同意,也不愿意听,并邀请我尝试注射。我告诉他,我不会直接在他的网站上做这件事,但明天我会在我的电脑上运行我的Web服务器,让他看看。但是,我不确定该怎么做,因为即使转义错误,抛出反斜杠也会导致查询无效,语法无效,因此不会执行。我想知道是否有人对如何解决这个问题有任何意见 我的示例查询如下所示,类似于他的: ms
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'])."')");
MSSQL的标准技巧是使用;完成当前查询并启动新查询,以及--删除查询结尾并忽略语法错误。因此,类似的方法可能会起作用(假设您正在利用的查询中没有换行符):
有关更多技巧,请参见。例如,如果您的查询是(请告诉我密码实际上是散列): 想象
var2
是\'';删除表用户--代码>。您的完整查询将是:
SELECT * FROM users WHERE username='var1' AND password='\''; DROP TABLE users; --'
这意味着:
SELECT * FROM users WHERE username='var1' AND password='\''
DROP TABLE users
哦,不,你刚刚杀死了你的数据库。轰
哎呀,重读你的问题。你能提出你的疑问吗?这将非常有用…对于accmail
参数post这个字符串
”);删除表Tbl\U用户--
转义:“这将是\”;删除表Tbl\U用户--
当通过连接字符串形成查询时,将给出
INSERT INTO Tbl_user (user_no,user_id,user_mail) VALUES ('$dk_user_no','accname','\'); drop table Tbl_user --
用示例查询编辑了我的帖子。为什么不备份他的数据库,通过注入删除他的表呢?这是证明他目前的方法有缺陷的有效方法。。。
SELECT * FROM users WHERE username='var1' AND password='\''
DROP TABLE users
INSERT INTO Tbl_user (user_no,user_id,user_mail) VALUES ('$dk_user_no','accname','\'); drop table Tbl_user --