SQL注入 sql注入攻击的原理

SQL注入1.魔术引号
魔术引号(Magic Quote)是一个自动将进入PHP脚本的数据进行转移的过程。
在magic_quotes_gpcOn的情况下,如果输入的数据有:单引号

1.魔术引号

Magic Quote 是一个通过输入PHP 脚本自动传输数据的过程。

如果magic_quotes_gpc=On,如果输入数据包含单引号()、双引号(\”)、反斜杠() 或NUL(空字符),则其他字符会附加反斜杠。需要转义。如果此选项关闭,则必须调用addslashes函数来向字符串添加转义符。

魔术引号:在php.ini 文件中。

magic_quotes_gpc=开启

改成

magic_quotes_gpc=关闭关闭

我们先将magic_quotes_gpc给改为on来进行测试一下,注意更改完配置之后要将apache和mysql重新给启动一下。接着输入正确的查询语句发现页面报错,根据报错信息可以看到,传递到服务器的路径发生了变化,变成了\’\\\’d:/d.txt\\\’,单引号前加了斜杠,使我们没法正确找到文件的位置

2.内置函数

魔术引号是PHP 自带的过滤功能。您还可以执行手动防御操作,例如使用用Java 或PHP 语言编写的内置函数。这就是过滤的目的。

is_int()addslashes()mysql_real_escape_string0mysql_escape_string0

再次,让我们使用sqli-less 作为示例。在这个网站上你首先要明白的是,所谓的get类型的提交,是指通过URL的方式将数据发送到后台。当程序员最初创建网页时,他们认为URL主要只是传递1、2、3。下图并非用于添加SQL 语句。 less-2 源代码。

我们修改一下源代码,做一些数据型的判断,例如修改成,先判断传输的信息是不是个数字,如果是则返回yes,不是则no,这时候就要用到is_int函数。我们将源代码修改成下图,发现网页就无法正常输出

但当我们正常输入id=1时也发现页面无法正常显示,这时候就要考虑网页是否认为这个传参是以int型传输,还是string型进行传输的,我们将源代码增加一条echo gettype($id)判断在页面中的id是什么类型,如下图。发现是一个string型(字符串)。

这时候如果想让页面正常显示,也不想删除过滤,那我们只需要对id这个参数进行强制类型转换,这样页面就能正常显示。

3.自定义关键字

如果要查询数据,就需要运行SQL语句。也就是说,该语句必须包含某些关键字。例如select *from user where id=1,select是关键字。同样,插入时使用insert。所谓关键字过滤就是对这些后续语句的过滤。

str_replace() 函数以下语句将字符串“Hello world”中的“world”替换为“shanghai”。

?php

echo str_replace( \’世界\’ , \’上海\’ , \’你好世界! \’);

我们在less-2中往源代码中加入str_replace这个函数,例如我们将select过滤成yr,然后执行简单的查询语句,发现页面报错,查看报错信息,发现是select被过滤成了yr

http://localhost/sqli-labs-master/Less-2/?id=-1%20union%20select%201,2,3

4.其他安全防护软件

上述内置的基本过滤实际上非常简单,可以使用一些特定的绕过方法来绕过。这只是一个假的。保护比较困难,但却是本章的主要焦点。我们会讲解一些基本的防御方法,主要是了解防御的思路和流程。

以上关于#SQL注入的相关内容摘自网络,仅供参考。相关信息请参见官方公告。

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/93883.html

(0)
CSDN's avatarCSDN
上一篇 2024年7月26日 下午1:41
下一篇 2024年7月26日 下午1:41

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注