代码审计
今天我们来分析一个密码重置漏洞的靶场
文章很水本人白盒实在太菜
第一次的代码审计 谢谢各位大佬指点
我们搭建这个靶场 用到的工具phpstudy
下载靶场 然后放在phpstudy域名站点管理里面
端口随意 只要不是80就行了
然后访问这个网址 www.a.com:3456
我们访问这个靶场的后台
因为这个是存在密码重置漏洞的 我们直接使用 ‘ or 1# 登录来抓包
我这边使用的是或火狐插件 live HTTP headers 来抓包的 网上有xpi 可以直接安装
抓到包之后 我们把这个参数复制下来:
user_name=11111&user_pass=1111
www.a.com:3456/checkUser.php
因为我这块抓了两次包 所以前面图片上的网址不是真正的网址 www.a.com:3456/checkUser.php 这个才是
我们点击这里:
点击split URL 然后会出现这个用户名或者密码错误
我们使用万能密码: ‘or 1#
把万能密码放到用户名这块然后点击 split URL登录
直接登录成功
为什么导致这样子呢?
我们直接看源码
我这边用的是这个Pycharm 你们也可以使用别的编译器
我们找到这个文件 checkUser.php 这个文件
然后我们可以看到 if(isset($_POST["user_name"]) && isset($_POST["user_pass"]))
Isset函数是检测变量是否设置 若变量不存在则返回False
我们可以看到$password = md5($password); 这个是加密的
我们可以试试将万能密码放到密码那里
明显是不可行的
我们可以看到这边执行了sql语句 并赋值给了$sql
我们可以使用vardump来打印出来
我们在前台执行看看:
这是登录成功的sql语句:
string(98) "select * from users where user_name='xxxx' or 1#' and user_pass='6512bd43d9caa6e02c990b0a82652dca'"
这是登录失败后的sql语句就是把万能密码加在密码那里:
我们可以使用sql命令行来执行一下:
这个是直接可以执行成功的
我们继续往下看:
这里new 了一个mysql对象 我们直接查看类
在lib目录下的mysql.class.php
这里是一个类
直接看查询数据的地方
这里是查询单行
$res = $this->link->query($sql);
$row = $res->feach_assoc();
这里是查询数据库 它定义了一个函数 public 是修饰符
Fetch_assoc 这个是查询单行 就是查询一行
我们继续用vardump来看一下
它返回的是3条数据
前面它使用了feach_assoc(); 每次查询一条数据
你们可以去实验一下 使用万能密码登录用户的时候,他是第一条数据 不是后面的数据,这次简单的代码理解就到这里
因为实在不会白盒只能水文章了呜呜呜呜呜
- 本文作者: Rain奕天
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/228
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!