1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > mysql md5解密_Web渗透测试——Mysql数据库手工注入

mysql md5解密_Web渗透测试——Mysql数据库手工注入

时间:2020-12-14 15:16:34

相关推荐

mysql md5解密_Web渗透测试——Mysql数据库手工注入

我们之前讲到了SQL注入漏洞是一种非常危险的高危漏洞,攻击者可以利用许多工具轻而易举的获得目标站点后台管理权限,我们也介绍了许多SQL注入利用工具,有网友问我,既然可以使用工具自动注入,为什么还要用手工注入这种效率非常低的方式呢?其实真正的渗透测试高手都是用手工注入的方式进行测试的,这其中最重要的原因就是自动注入工具可能被安全软件认为是攻击行为,会被封IP,手工注入可以很好地避免这种情况,其次呢,有经验的渗透测试人员可以根据自己的经验和目标站点的情况,随时修改注入语句,使得注入成功完成,因此手工注入是渗透测试工作者必备的技能,大家不要过于沉迷于工具的使用。

SQL注入原理

当我们的Web在向后台数据库传递SQL语句进行数据库操作时。如果对用户输入的参数没有经过严格的过滤处理,那么攻击者就可以构造特殊的SQL语句,直接输入数据库引擎执行,获取或修改数据库中的数据。我们以下面这句SQL语句为例,用户请求以及服务器响应的过程如下:

select * from article where id=36

请求相应过程

SQL注入可能存在的位置

SQL注入可能的位置包括:GET、POST、COOKIE、头部、搜索等,其实我之前也介绍过SQL注入可能的位置,就在我之前发表的《十大常见web漏洞——SQL注入漏洞》中,有兴趣的可以翻看我的这篇文章,下面是这篇文章里的一张SQL注入可能的位置图:

SQL注入可能的位置

Mysql小知识

在进行Mysql数据库手工注入之前,我们必须了解一些Mysql数据库的小知识,下面我总结了一些我们必须要知道的Mysql数据库的小知识。

一个数据库

information_schema数据库是MySQL自带的,它保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。

一张表

在information_schema数据库中的columns表中存储着其他数据库的信息。

三个字段

在columns表中有三个字段,它们是table_schema、table_name、colume_name,这三个字段分别存储着其他数据库的数据库名称、表名、字段名。

几个常用查询

current_user()/user() —— 当前用户/所有用户、database() —— 当前数据库、@@datadir —— 数据库路径、@@version —— 数据库版本、@@hostname —— 服务器主机名等。

几个函数

Mid() —— 获取字符串中一部分、Ord() —— 返回字符串的ASCII的值、Concat() —— 用于连接一个或者多个字符串、Concat_ws() —— 用于连接一个或者多个字符串,第一个为分隔符。

Mysql手工注入流程

Mysql手工注入流程流程为:1确认是否存在注入——2获取数据库信息——3获取当前数据库——4获取数据库表信息——5获取表的字段信息——6获取关键字段内容,下面我们以DVWA为测试环境按照以上步骤,来进行Mysql数据库的手工注入。

1确认是否存在注入

首先我们登陆进入DVWA,首先确定"Security Level: low"为低安全级别,然后点击“SQL Injection”输入框提示我们输入用户ID,我们输入“1”,点击Submit按钮,返回ID为1的用户名为admin,如下图所示:

User ID为1

当我们输入“ ' ”单引号时,就会返回“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”这样一句SQL语法错误提示,这时就证明存在SQL注入,因为我们所输入的参数被放入到SQL语句中执行了,只是语法存在错误,只要我们构造符合语法的参数,就会返回我们想要的结果,我们可以点击右下角“View Soure”按钮,如下图所示,就可以找到执行的SQL语句:

SELECTfirst_name,last_nameFROMusersWHEREuser_id='$id';

当我们输入单引号“ ' ”时,SQL查询语句就会变成如下所示,由于存在语法错误,不会执行的。

SELECTfirst_name,last_nameFROMusersWHEREuser_id=''';

执行的SQL语句

2获取数据库信息

当我们确定存在SQL注入点之后,我们就可以构造SQL语句来返回我们想要的信息,首先确认表的字段数,我们可以构造以下参数,直到返回成功,然后再使用user()和database()查询,来获取数据库信息,如下图所示:

' union select 1; -- ';' union select 1,2; -- ';' union select 1,2,3; -- '......

返回数据库信息

3获取当前数据库

由于在第二步我们已经获取了数据库名dvwa,这里我们就不再赘述了,直接下一步。

4获取数据库表信息

到了这一步就需要用到我们之前提到的information_schema数据库中的columns表,在columns表中有三个字段,它们是table_schema、table_name、colume_name,这三个字段分别存储着其他数据库的数据库名称、表名、字段名,我们可以构造以下语句返回所有库中的所有表名,我们重点关注dvwa库下的users表。

' union select table_schema,table_name from information_schema.columns-- '

获取数据库表信息

5获取表的字段信息

这里我们已经获得了dvwa库中的users表,推测它之中存储着用户登录信息,接下来我们获取users表中字段信息,我们可以构造以下语句,我们重点关注user和password两个字段

' union select table_name,column_name from information_schema.columns where table_name='users' -- '

获取users表的字段信息

6获取关键字段内容

现在我们已经获得了dvwa库下的users表中的user和password两个字段,可能存储着用户名和登录密码信息,现在我们获取这两个字段的内容,可以构造以下语句,获取字段内容,如下图所示:

'union select user,password from users; -- '

获取关键字段user和password内容

这时我们获得的password字段是用MD5加密的,这时我们需要用工具进行进行解密,之前我在《Web渗透测试——密码学基础》一文中提到过MD5加密,我们可以使用在线解密网站:,进行解密,密码明文为password,至此我们就获得了站点的用户名和密码,就可以登录站点后台了,如下图所示:

MD5解密

以上就是Mysql数据库手工注入的全部内容,感谢阅读,欢迎关注@科技兴了解更多科技尤其是网络安全方面的资讯和知识。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。