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'

    所以这个问题就解决了

  • 相关阅读:
    1 < 2 < 3为true, 3 > 2 > 1为false
    我的第五代选择器Icarus
    浮动不换行
    教你游泳,不会游的看了包你学会!!! 分享
    node.js 一个简单的页面输出
    天将降大任于斯人也,必先苦其心志,劳其筋骨,饿其体肤,空乏其身,行拂乱其所为,所以动心忍性,增益其所不能
    setTimeout和setInterval的使用
    JS window.open()属性
    车牌识别及验证码识别的一般思路
    苹果开发者账号注册流程
  • 原文地址:https://www.cnblogs.com/wosun/p/11267502.html
Copyright © 2011-2022 走看看