zoukankan      html  css  js  c++  java
  • Training: MySQL I

    原题链接:http://www.wechall.net/challenge/training/mysql/auth_bypass1/index.php

    题目告诉我们这是一个经典的mysql注入挑战,我们的任务很简单,就是用admin登录,而且你被给了源码,而且有高亮版本

    我们点击source codehighlighted version两个超链接就可以分别看到两个版本(普通与高亮,其实代码都一样,只不过看你喜欢哪个,我觉得高亮要方便阅读一点)

    首先是表格结构的注释:users表分三个列,useridusernamepasswordidusername不用管,主要的是password,因为题目已经告诉我们username就是admin,根据注释password32位的char类型,ascii类型显示,不能为空

    然后是usernamepassword的传递:判断用户名和密码是否已经发送给服务器,其中的Common::getPostString是调用已有函数,功能为从表单中获取字符串信息;auth1_onLogin为下边的自定义函数,功能为验证用户名和密码

    然后又是一堆的代码,再是一个提示我们利用的代码。这是一个js函数声明。,数据库通过ayth1_db()函数链接,password通过md5加密,然后是一个usernamepassword的连接函数。这部分就是之前提到的自定义函数,用来处理表单提交的数据。函数与表单之间通过参数“username”和“password”传递数据,这里只需要知道从html表单中输入的usernamepassword就可以代入到这里的query中。接着result=result=db->queryFirst($query)处理MySQL语句并且将结果返回给result,如果查询结果不是false,说明结果存在。$result[username]) === admin’判断用户是否是admin,如果是说明管理员登录,完成登陆过程。

    读到这里基本上解题方法就出来了,我们主要的注入句是

    一条很简单的MYSQL语句,我们知道usernameadmin但是我们不知道password

    所以我们直接输入正确的username然后注释掉后面的password判断,构造payloadadmin’#

    #的作用是注释掉后面的内容,所以我们就构造了query的语句为

    $query = "SELECT * FROM users WHERE username='admin'#' AND password='$password'";

    形成SELECT * FROM users WHERE username='admin'

    所以这个问题就解决了

  • 相关阅读:
    梯度下降进阶
    梯度下降基础
    python---matplotlib
    python---numpy
    浅析Jupyter Notebook
    anaconda安装
    机器学习---导学
    python---线程与进程
    mapping values are not allowed in this context at line 115 column 10
    laravel进行单元测试的时候如何模拟数据库以及mockery的调用
  • 原文地址:https://www.cnblogs.com/wosun/p/11267502.html
Copyright © 2011-2022 走看看