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'

所以这个问题就解决了

原文地址:https://www.cnblogs.com/wosun/p/11267502.html