问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
初学万能密码代码审计
漏洞分析
代码审计
今天我们来分析一个密码重置漏洞的靶场 文章很水本人白盒实在太菜 第一次的代码审计 谢谢各位大佬指点 我们搭建这个靶场 用到的工具phpstudy 下载靶场 然后放在phpstudy域名站点管理里面 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d364ed0b6180348a070aca86c0b6eca11af18f84.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d364ed0b6180348a070aca86c0b6eca11af18f84.png) 端口随意 只要不是80就行了 然后访问这个网址 www.a.com:3456 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b797768a08b9a76adb53390f97d5c469fbddf4fe.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b797768a08b9a76adb53390f97d5c469fbddf4fe.png) 我们访问这个靶场的后台 因为这个是存在密码重置漏洞的 我们直接使用 ‘ or 1# 登录来抓包 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2cbb98aa37721177d13eee7323cca7039050370a.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2cbb98aa37721177d13eee7323cca7039050370a.png) 我这边使用的是或火狐插件 live HTTP headers 来抓包的 网上有xpi 可以直接安装 抓到包之后 我们把这个参数复制下来: user\_name=11111&user\_pass=1111 www.a.com:3456/checkUser.php 因为我这块抓了两次包 所以前面图片上的网址不是真正的网址 www.a.com:3456/checkUser.php 这个才是 我们点击这里: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9e58b078a790a301671a8dcc92205d541c5629d2.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9e58b078a790a301671a8dcc92205d541c5629d2.png) 点击split URL 然后会出现这个用户名或者密码错误 我们使用万能密码: ‘or 1# [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-39584ec16632f273ea747fe1e7bc06991f5570fd.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-39584ec16632f273ea747fe1e7bc06991f5570fd.png) 把万能密码放到用户名这块然后点击 split URL登录 直接登录成功 为什么导致这样子呢? 我们直接看源码 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e7ea93d1bd03ec3aa5193a6e85060ff451179c90.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e7ea93d1bd03ec3aa5193a6e85060ff451179c90.png) 我这边用的是这个Pycharm 你们也可以使用别的编译器 我们找到这个文件 checkUser.php 这个文件 然后我们可以看到 if(isset($\_POST\["user\_name"\]) && isset($\_POST\["user\_pass"\])) Isset函数是检测变量是否设置 若变量不存在则返回False 我们可以看到$password = md5($password); 这个是加密的 我们可以试试将万能密码放到密码那里 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9edb78237502f599c908b69032349f0b0af71124.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-9edb78237502f599c908b69032349f0b0af71124.png) 明显是不可行的 我们可以看到这边执行了sql语句 并赋值给了$sql 我们可以使用vardump来打印出来 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f8d1f243320bd98e846a5230da549a073e766fe3.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-f8d1f243320bd98e846a5230da549a073e766fe3.png) 我们在前台执行看看: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d91683dab73119e1c438604646ec71ea876c3946.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d91683dab73119e1c438604646ec71ea876c3946.png) 这是登录成功的sql语句: string(98) "select \* from users where user\_name='xxxx' or 1#' and user\_pass='6512bd43d9caa6e02c990b0a82652dca'" 这是登录失败后的sql语句就是把万能密码加在密码那里: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5af5c4cc326a4ee3c6552ec30aaa1ce4f152e175.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-5af5c4cc326a4ee3c6552ec30aaa1ce4f152e175.png) 我们可以使用sql命令行来执行一下: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2ff246ee3de32fd85e3e29afd887ca6f85657a32.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-2ff246ee3de32fd85e3e29afd887ca6f85657a32.png) 这个是直接可以执行成功的 我们继续往下看: [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ab9740f567280521190b97b3d2fee7b1fb8cc1ac.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-ab9740f567280521190b97b3d2fee7b1fb8cc1ac.png) 这里new 了一个mysql对象 我们直接查看类 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d2627c1b0801ea57a374a2b096bb9cde1e2e637c.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-d2627c1b0801ea57a374a2b096bb9cde1e2e637c.png) 在lib目录下的mysql.class.php 这里是一个类 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b69d720de7f2debb0616a7090537b905194b4bac.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-b69d720de7f2debb0616a7090537b905194b4bac.png) 直接看查询数据的地方 这里是查询单行 $res = $this->link->query($sql); $row = $res->feach\_assoc(); 这里是查询数据库 它定义了一个函数 public 是修饰符 Fetch\_assoc 这个是查询单行 就是查询一行 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e05a13d3db0e5a5106ffd045353ec364b5aab037.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-e05a13d3db0e5a5106ffd045353ec364b5aab037.png) 我们继续用vardump来看一下 [![](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-505b5c71224171e296dedee4e572f555cdb19351.png)](https://shs3.b.qianxin.com/attack_forum/2021/07/attach-505b5c71224171e296dedee4e572f555cdb19351.png) 它返回的是3条数据 前面它使用了feach\_assoc(); 每次查询一条数据 你们可以去实验一下 使用万能密码登录用户的时候,他是第一条数据 不是后面的数据,这次简单的代码理解就到这里 因为实在不会白盒只能水文章了呜呜呜呜呜
发表于 2021-07-03 02:59:34
阅读 ( 4735 )
分类:
WEB安全
0 推荐
收藏
0 条评论
请先
登录
后评论
Rain奕天
2 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!