Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 错误的SQL Server反注入_Php_Sql Server_Code Injection - Fatal编程技术网

Php 错误的SQL Server反注入

Php 错误的SQL Server反注入,php,sql-server,code-injection,Php,Sql Server,Code Injection,我的朋友正在运行一个网站,并且有一个PHP函数来逃避他的MSSQL语句。然而,他做得不好。当转义字符应为“”时,他正在使用\作为其转义字符。然而,当他试图向他解释它没有被正确地逃脱时,他不同意,也不愿意听,并邀请我尝试注射。我告诉他,我不会直接在他的网站上做这件事,但明天我会在我的电脑上运行我的Web服务器,让他看看。但是,我不确定该怎么做,因为即使转义错误,抛出反斜杠也会导致查询无效,语法无效,因此不会执行。我想知道是否有人对如何解决这个问题有任何意见 我的示例查询如下所示,类似于他的: ms

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

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

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 --