春秋云境---CVE-2022-30887
# CVE-2022-30887
# 一、步骤
首先打开环境,进入到页面发现是一个登录框,需要用户名和密码,但是无论从当前页面和题目相关信息中并未获取到用登录名和密码,唯一有一点关联的是页面所给漏洞编号以及页面下方。
所以我的思路先从这个漏洞编号上下手,在国家漏洞平台上查找后得到以下内容,简而言之就是 CVE-2022-30887 可以在某个页面内上传木马文件。
找到漏洞信息,下一步就是如何进入它这个系统,此时登录页面最下面的 “Mayuri K” 发现是可以点击的,所以就点进去访问,结合漏洞报告中对该漏洞的描述,发现有关键字 “Pharmacy”,所以尝试点击访问
根据网站页面猜测这应该是一个管理系统,所以在当前页面下看看能不能获取到这个管理系统的源代码。这里我的想法是假如有源代码那就查看源代码中有是否有关于邮箱和密码,一般这种个人写的系统大概率会有存放邮箱地址让使用者可以及时联系开发者,所以如果能找到邮箱地址,在没有密码的前提下可以尝试弱口令。
有了上述思路后,尝试在页面中看看有没有可以下载的源代码的地方。发现这里可以下载
点击后会让你输入自己的邮箱和一些别的信息,我选择使用自己虚拟邮箱,其他的信息就胡乱填写。此时查看我的邮箱发现开发将源代码放入谷歌云盘上之后将压缩包发到邮箱上。
点击下载,后将源代码下载,里面有一个 txt 文件打开文件直接拿到邮箱和密码
进入界面结合前面分析,在里面找有文件上传的地方,上传一个一句话木马文件,系统当中有两处文件上传,这两处文件上传功能我是随机挑了一个测试,里面参数随便填然后提交。在页面当中找到刚刚上传的文件,访问该图片的链接。
到了这里我尝试用蚁剑进行连接,发现也能连接上但是找不到 flag 在哪,所以没得办法就使用 Burp 利用漏洞平台构造的数据包进行访问,上传成功后访问 shell 并获取 flag: http://eci-2ze7ntvll5ye8fxnoc64.cloudeci1.ichunqiu.com/assets/myimages/test.php?1=cat%20/flag
1 |
|
# 二、总结
这个靶场的综合运用还是有一点点强,因为这是一个靶场,所以上面有漏洞编号,此次能如此顺利是因为先根据漏洞编号去找这个漏洞的信息。但是假如没有这个漏洞编号?
大致思路:假如没有漏洞编号,只有一个链接的情况下,先访问这个链接,在链接页面中找到有关信息,该网站的有一个好处就是它在页面下方提供了源码下载的地方,通过访问这个系统的官网,发现里面有很多下载源码的地方,找到需要下载的源码,然后看看源码里面能找到什么相关信息能帮助登录上去,找到之后对里面功能点一个个测试。
# 3、参考资料链接和存在漏洞源码
-
https://packetstormsecurity.com/files/166786/Pharmacy-Management-System-1.0-Shell-Upload.html
-
https://blog.csdn.net/weixin_44030810/article/details/127392107
-
<?php require_once 'core.php'; //$valid['success'] = array('success' => false, 'messages' => array()); $productId = $_GET['id']; if ($_POST) { $image = $_FILES['productImage']['name']; $target = "../assets/myimages/" . basename($image); if (move_uploaded_file($_FILES['productImage']['tmp_name'], $target)) { // @unlink("uploadImage/Profile/".$_POST['old_image']); //echo $_FILES['image']['tmp_name']; //cho $target;exit; $msg = "Image uploaded successfully"; echo $msg; } else { $msg = "Failed to upload image"; echo $msg; exit; } $sql = "UPDATE product SET product_image = '$image' WHERE product_id = $productId"; //echo $sql;exit; if ($connect->query($sql) === TRUE) { $valid['success'] = true; $valid['messages'] = "Successfully Updated"; header('location:../product.php'); } else { $valid['success'] = false; $valid['messages'] = "Error while updating product image"; } // /else $connect->close(); echo json_encode($valid); } // /if $_POST ?>