sqli-labs学习笔记
Posted shayebudon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqli-labs学习笔记相关的知识,希望对你有一定的参考价值。
1-2关 基于错误的字符串/数字型注入
一、找漏洞
用 and 1=1/1=2判断整形类型,加单引号判断字符串和整形类型)
这题就是?id=1(数字随便输)输入?id=1 and 1=1 以及输入 ?id=1 and 1=2发现并有什么什么变化
当输入?id=1时
页面不报错
当输入?id='时
页面出现报错语句 ,当输入单引号时,页面由正常页面变为报错页面,可以判断时单引号注入漏洞
二、猜解字段数
字段数可能时sql数据库中的变量
确定字段数是因为知道了准确的字段数才可以用union来进行操作获取你想要的东西,因为union select ...后面的字段必须与数据库的字段相对应,就是假设你数据库里有3个字段,但是你输入union select 1,2你会发现会报错在这题中,必须对应三个数字 union select 1,2,3才能够成功执行,所以这才需要order by 来知道字段数从而使用union
输入?id=1' order by 4 --+(--+为注释语句)发现报错
输入?id = 1' order by 3 --+
页面正常,说明字段数为3。
三、获取数据库名字
知道了数据库字段数后,利用union来获取数据库名字,数据表名字,字段名以及字段名对应的数据信息。这里会先使id=-1',为什么呢,前面已经找了SQL注入漏洞出现报错,那么先要让其存在一个合理的报错形式 ,然后把后面的SQL语句也带进SQL里进行执行操作,从而获取信息。所以就是得让union 前面的为正确的报错行为,在id=1'添加符号,id默认为从0开始所以这是错的吧 或者直接在后面加个and 1=2也是错的吧,and 1=1就不可以了,因为这是正确语句不会报错对吧。这样的话union语句就可以正确执行进去了
输入 ?id=1' and 1=2 union select 1,2,3 --+ 然后回车就发现显示了2,3,这意味着2,3字段是可以回显到页面的,可以进行操作,那我直接更改3这个位置代码
进入下面的操作前,先介绍几个函数:
(1)version():查看数据库版本
(2)user():查看当前用户
(3)database():查看使用的数据库
(4) limit :limit
子句来分批获取所有数据
(5)group_concat():
一次性获取数据库信息。
查询用户,查询数据库,查询数据库版本
输入union select 1,2,user()--+看了下用户名
输入union select 1,2,database(0--+看了下使用得数据库(重点)
输入union select 1,2,version()--+看了下数据库版本
四、查表
想知道用户名和密码 必须先知道数据库
输入 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
我对这句代码理解认为 group_concat(table_name)这个就是合并到一起来显示表名,from information_shchema.tables这是固定的,字面理解就是来自信息图表数据库的存在的表单,然后 where 限制语句 where table_schema='security'只需要查找数据库名为security.找到了显示出所有表单,发现了有users表单,这里就应该会有我们想要的用户密码
五、查字段名以及字段数值
接着输入 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database()--+
然后就获取了表单里的字段名 发现了有username 和 password
输入 union select 1,2,group_concat(username,0x3a,password) from users--+
就可以得到每个用户名对应的密码(0x3a是字符冒号':'对应的16进制的ASCII码)
以上是关于sqli-labs学习笔记的主要内容,如果未能解决你的问题,请参考以下文章
[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段