
第一关判断是字符型还是数字型先假设为数字型如果是数字型2-1就会生效查不到信息所以由此得出这是字符型先判断闭合符常见闭合符‘、“、’、”、无引号型数字型如果闭合符正确他会报错因为我们后面还有一个闭合符我们可以把后面的闭合符注释掉再看看有没有数据显示也可以想办法把后面的那个闭合符组成一个完整的闭合符也是查不出东西的由此我们可以得出闭合符是‘然后我们就可以开始判断有几列数据了我们先假设它有四列多了我们就减少一点看看是不是3列有数据显示那就是3列 知道列数以后我们就需要判断它的回显位置因为它有可能username,id,password如果它回显的位置是1和3我们的语句就要写在对应的位置可以用union联合查询来找回显位置因为它会显示先查出来的数据所以我们需要把1改成-1让它前面的语句查不出东西改成-1是因为绝大多数数据库自增主键id都是从 1 开始不存在 id-1 的记录-56789也是可以的得到了回显位置我们就知道后面的语句写在哪了我们可以先查一下数据库名还有数据库的版本正常的写完整的查找语句也是可以的现在我们可以查询数据库里面有什么表让表名输出在一起我们可以用group_concat?id-4341 union select 1,(select database()),group_concat(table_name) from information_schema.tables where table_schemasecurity--查询security下的users表里面的所有字段名称同时返回表名、当前所在数据库名select table_name, database(), column_name from information_schema.columns where table_schemasecurity and table_nameusers; --我们可以用limit来查也可以使用group_concat接下来我们就开始查询数据可以用limit查也可以用group_concatlimitgroup_concat如果前端做了输出限制我们可以使用substring第二关同理第二关也是判断类型由此可知是数字型这是列数查询回显得知回显位置是23我们的语句就在·23输入查询security下的uagents这个表中没有username和password字段接着查users第三关结果图本人是全操作完的第四关第五关布尔盲注判断类型由此我们可以推断出它是字符型并且闭合符是’用order by 查出数据有3列联合查询也是这个界面我们可以先查询一下数据库长度8个当前数据库名获取该数据库下所有的表读取users下的账号密码修改limit 0,1→limit 1,1、limit 2,1依次读取全部账号密码第九关时间盲注判断类型使用sleep我们输入and 12 时没有回显所以我们改成and sleep(4),依然没有响应所以我们可以判断出是字符型然后就可以测试出来闭合符是‘然后慢慢猜数据库长度最后猜得8网页卡顿5秒然后猜数据库名115是s中间省略121是y得知数据库名是security然后猜数据库下的表慢慢猜再比对ascll表读取数据库username第0行的命令:?id1 and if(ascii(substr((select username from security.users limit 0,1),1,1))68,sleep(3),1) --读取数据库password第0行的命令?id1 and if(ascii(substr((select password from security.users limit 0,1),1,1))100,sleep(3),1) --建议使用脚本不然特别特别累