前言 找到SQL注入漏洞后,我们可以用它来干什么呢?那么本篇文章给大家带来的就是SQL注入漏洞利用技术,现在是时候让我们去体验一下漏洞利用的乐趣了。
目录
第三节 利用SQL注入
3.1、识别数据库
3.2、UINON语句提取数据
3.3、枚举数据库
3.4、窃取哈希可令
3.5、获取WebShell
第四节 SQL盲注利用
4.1、初识SQL盲注
4.2、SQL盲注入技术-基于布尔
4.3、SQL盲注入技术-基于时间
4.4、我们的好朋友-Python
正文
3.1、识别数据库
要想发动sql注入攻击,就要知道正在使用的系统数据库,不然就没法提取重要的数据。
首先从Web应用技术上就给我们提供了判断的线索:
Web容器也给我们提供了线索,比如安装IIS作为服务器平台,后台数据及很有可能是Microsoft SQL Server,而允许Apache和PHP的Linux服务器就很有可能使用开源的数据库,比如MySQL和PostgreSQL。
基于错误识别数据库
大多数情况下,要了解后台是什么数据库,只需要看一条详细的错误信息即可。比如判断我们事例中使用的数据库,我们加个单引号。
1
error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1
从错误信息中,我们就可以发现是MySQL。
|
1
2
3
|
Microsoft OLE DB Provider for ODBC Drivers 错误 '80040e14'
[Microsoft][ODBC SQL Server Driver][SQL Server]Line 1:
|
上面错误信息可以发现是Microsoft SQL Server,如果错误信息开头是ORA,就可以判断数据库是Oracle,很简单,道理都是一样的,就不一一列举了。
基于数字函数推断
| 数据库服务器 |
函数 |
| Microsoft SQL Server |
@@pack_received、@@rowcount |
| MySQL |
connection_id()、last_insert_id()、row_count() |
| Oracle |
BITAND(1,1) |
| PostgreSQL |
select EXTRACT(DOW FROM NOW() |
3.2、UINON语句提取数据
UNION操作符可以合并两条或多条SELECT语句的查询结果,基本语法如下:
|
1
2
3
|
select column-1 column-2 from table-1
UNION
select column-1 column-2 from table-2
|
如果应用程序返回了第一条查询得到的数据,我们就可以在第一条查询后面注入一个UNION运算符来添加一个任意查询,来提取数据,是不是很容易啊,当然在使用UNION之前我们必须要满足两个条件:
两个查询返回的列数必须相同
两个查询语句对于列返回的数据类型必须相同
首先我来看第一个条件,如何知道第一条查询的列数呢?我们可以使用NULL来尝试,由于NULL值会被转换成任何数据类型,所以我们不用管第二个条件。
就是这样的一个个加上去进行尝试,直到不返回错误。
神奇的ORDER BY子句
我们先尝试了12,返回错误,说明列数是小于12的,我们继续尝试了6,返回错误,同理,列数小于6的,我们尝试3,返回正常,说明列数是大于等于3的,继续尝试4,返回错误。说明列数是小于4,列数大于等于3,小于4,可以得到列数是3。使用order by子句可以帮助我们快速得到列数。
得到列数后我们还需要满足第二个条件
很简单,只要一次一列使用我们的测试字符串替换NULL即可,可以发现第一列和第二列都可以存放字符串,第三列数据没有输出。
接下来就让我们提取数据库用户名和版本号:
3.3、枚举数据库
这里由于篇幅问题,我们只以MySQL数据库为例了,枚举数据库并提取数据遵循一种层次化的方法,首先我们提取数据库名称,然后提取表,再到列,最后才是数据本身。要想获取远程数据库的表、列,就要访问专门保存描述各种数据库结构的表。通常将这些结构描述信息成为元数据。在MySQL中,这些表都保存在information_schema数据库中
第一步:提取数据库 在MySQL中,数据库名存放在information_schema数据库下schemata表schema_name字段中
1 |
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|
|