zoukankan      html  css  js  c++  java
  • 用户名和密码分开检验产生的mysql注入——[GXYCTF2019]BabySQli

    题目已经提示了是SQli,题目是一个登陆界面,需要用户输入用户名和密码进行登陆。

    首先我们可以看到返回密码错误的页面源码里有一串字符串,我们先用base32再用base64解密之后发现是mysql查询规则 select * from user where username = '$name'

    进行常规mysql注入,发现1' union select 1,2,3#不会报错,说明表中有三个字段。又因为查询规则中提到有username这个字段,所以盲猜user表中包括id、username、password这三个字段。

    由于题目存在过滤,我无法通过注入的方法获得表中的字段数据,所以我无法拿到准确的admin的密码。但看其他师傅说这题的考点在于用户名和密码分开检验,也就是说它是先检验username,把username对应的所有字段都查出来后,再检验密码能不能和查出来的密码对上,检验密码的过程可能会有一个md5的加密(不过我是真的不知道为什么能判断会有md5加密,大概是经验?)。

    这里涉及到一个新的知识点。select * from user where username = 1 union select 1,'admin','123'查询,就算是数据库中并没有这个数据,但是查询结果还是会返回结果。




    所以,我们这里可以构造用户名为 1' union select 1,'admin',md5('123')# ,然后在密码处输入123就可以实现注入。

    123的MD5结果为: 202cb962ac59075b964b07152d234b70

    所以最终结果为:1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#

    这里的123可以替换成abc等任何值,只需要输入相应的md5值就可以了。

    补充:
    通过这种方法检索出来的账号密码都是我们控制的。
    字段一般都是id、username、password这种顺序。
    加密方式可以mysql、mysql5、md5三种试一试。

  • 相关阅读:
    leetcode------Single Number II
    leetcode------Same Tree
    Hadoop2.x版本全分布式详细安装过程!!【原创!非抄袭!】
    Hadoop2.X版本伪分布式安装详细介绍【非抄袭,原创!】
    leetcode------Linked List Cycle II
    [转载]c# winform 获取当前程序运行根目录
    [转载]MongoDB设置访问权限、设置用户
    [转载]C#设置开机启动
    datagridview 右键选中行 并弹出菜单
    [转载]async & await 的前世今生
  • 原文地址:https://www.cnblogs.com/MisakaYuii-Z/p/13243241.html
Copyright © 2011-2022 走看看