freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

新手渗透测试训练营——SQL注入
2018-09-12 19:34:37

学习渗透测试,一定要掌握各种漏洞的检测和利用方法。今天我们分析一下dvwa环境中sql注入从低级到高级的渗透步骤。

手动挖掘Sql注入,首先要发现注入点。以low级别为例,发现一个可以输入内容的文本框时,首先测试一下是不是存在sql注入。

Low Level

分别在文本框中输入1和1’进行测试。输入1时,回显正常,如下:

1.png

输入1’时,提示错误。此外,我们可以看到,我们在文本框中输入的内容会显示在url中,也就是说id参数通过get 方式传递。

2.png

确定了存在注入的点,就开始尝试注入。通过union select 1,2……测试该注入点可以显示的字段数。union select 1,unionselect1,2 均正常。union select1,2,3时出现报错,说明该注入点最多可以显示两个不同的字段。

3.png4.png

 

 

确定该注入点可以显示的字段数之后,通过database()函数,获取当前数据库名称。当前数据库名称时“dvwa”

 5.png

特别需要注意的是:直接用1’union selectdatabase(),user()进行注入,查看当前数据库和用户时,会报错,提示有三个单引号。这三个单引号是系统自动加上的,只要用“--”注释掉,就可以正常执行了。'--'是mysql数据库的单行注释符,而且第二个'-'后面一定要有一个空格(下面构造的SQL语句也是如此),这里它把后台添加的单引号注释掉了。用#注释时,会把submit注释掉。

6.png


知道当前数据库名称后,可以利用information_schema数据库获取当前数据库中存在的表。如下图所示,dvwa数据库中有两个表,分别为:guestbook和users。

 7.png

 知道当前数据库以及数据库中的表的名称之后,就可以猜解每个表中的有那些列。如下所示们可以dvwa.users表中有user和password这两组非常重要的数据。获得这个两组数据,就可以明确知道登陆用户以及该用户对用的密码。

 

 8.png

用1’union select password,user fromdvwa.users -- 命令查看password和 user这两列中的数据。两列中的数据如下:

9.pngMedium Level

ID通过下拉菜单进行选择。选择不同ID时,URL并没有任何变化。

10.png

那么参数id并不是通过get方式传递的。通过burpsuit抓包,看一下抓取的请求包,发现参数使用post方式传递。可以看到我们上传的id参数如下:

11.png

通过修改参数id后面的注入语句进行注入尝试。具体可参考low级别的渗透过程。

在用1 union select1,table_name from information_schema.table wheretable_schem=dvwa命令,尝试查找dvwa数据库中的表时提示Unknown column 'dvwa' in 'where clause'。所以改用database()函数获取数据库名。Database()函数获取数据库名称时,没有出现报错。该命令显示,dvwa数据库中有两张表,分别是:guestbook和users。

 12.png

知道dvwa中是的两个表的名字之后,继续查看每个表中包含那几个列:1 union select table_name,column_name from information-schema.columns where table_schema=database() and table_name=table_name。

13.png

由上一句注入测试,可以看到users表中有user和password两列。将这两列内容导出,我们就可以得到用户登录数据库。用select password,user from dvwa.users命令,查看password和user两列的内容。

14.png

High Level

先测试是否存在注入点。Id=1正常,id=1’时报错。可以确定存在sql注入漏洞。

15.png

利用union selectdatabase(),user()进行注入,发现只能显示一行内容,那么可以猜测源代码中,对回显的数量,做了限制。

16.png在sql命令中,用#注释,发现可以回显多行内容。那么源代码中,应该是在id参数之后,对显示的内容做了限制。#注释掉id参数后面的命令,把对回显的限制注释掉了。

17.png

可以回显之后,后面的注入操作与low级别相同。

反过来,我们查看一下源码,可以发现,在id之后,利用limit语句限制select语句返回的数据数量。

18.png


*本文作者:EVA。本文属丁牛科技原创,如需转载请标明出处。

# SQL注入
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者