域渗透实战之 vsmoon
发布日期:2024-05-19 浏览次数: 专利申请、商标注册、软件著作权、资质办理快速响应热线:4006-054-001 微信:15998557370
原文首发在:先知社区
链接:https://xz.aliyun.com/t/12959
作者:vghost
环境搭建:
搭建过程
web配置2个网卡,网卡0/0,22/0这2个网卡。
192.168.0.116
192.168.22.152
data配置22网卡和10网卡。
192.168.22.146
10.10.10.136
ad配置10网卡。
10.10.10.137
web打点
先去测试网络连通性。
端口扫描
使用nmap进行端口探测。
目录扫描
然后扫描该网站存在那些url地址。.
发现后台地址。
Nday利用
eyoucms-任意用户登录
application/api/controller/Ajax.php
/** * 获取表单令牌 */ public function get_token($name = '__token__') { if (IS_AJAX) { echo $this->request->token($name); exit; } else { abort(404); } }
跟进 $this->request->token core/library/think/Request.php
/** * 生成请求令牌 * @access public * @param string $name 令牌名称 * @param mixed $type 令牌生成方法 * @return string */ public function token($name = '__token__', $type = 'md5') { $type = is_callable($type) ? $type : 'md5'; $token = call_user_func($type, $_SERVER['REQUEST_TIME_FLOAT']); if ($this->isAjax()) { header($name . ': ' . $token); } Session::set($name, $token); return $token; }
代码主要的功能是设置session 但是值是md5 $_SERVER['REQUEST_TIME_FLOAT']); 这个是获取服务
时间戳
再看后台验证 application/admin/controller/Base.php
梳理思路 现在可以随意设置session里的name 值是md5的
现在可以随意设置session里的name 值是md5的
接着绕过 session('?admin_id') && getTime() - intval($admin_login_expire) <
$web_login_expiretime
$admin_login_expire 是服务器时间戳 md5 接着经过intval处理
public function get_token($name = '__token__') { if (IS_AJAX) { // echo $this->request->token($name); $token = call_user_func('md5', $_SERVER['REQUEST_TIME_FLOAT']); echo getTime() - intval($token); exit; } else { abort(404); } }
漏洞复现:
发现是eyoucms, 经过搜索发现后台存在任意登录漏洞。
写一个exp文件,然后获取用户cookie。
然后替换cookie,进行登录。
然后在index.html文件写入paylaod。
获取webshell
使用蚁剑连接,成功获取webshell
内网渗透
frp内网穿透
上传frp,运行。
客户端,开启服务。
上线cs
使用cs生成木马,然后通过蚁剑进行上线
内网信息收集
hashdump获取用户hash。
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c51ba7c328cd01866885a37748816e07:::Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
收集域内信息。
该主机不是域内主机,为双网卡主机。
网段为0和22端。不出网机器。
使用cs进行权限提升
使用代理进行端口扫描。发现存在多个端口开放。
横向移动
发现桌面有账号.txt
和一个jar包,下载jar包,然后到本地,进行利用。
java代码审计:
使用jd-gui反编译jar包。
接收服务过来的信息。
反序列化关键代码
ObjectInputStream ois = newObjectInputStream(this.socket.getInputStream()); Message ms = (Message)ois.readObject();
这个是获取socket输入类再把序列化的内容跟反序列化变成指定的类。这里是服务器发送过来客户端的处理代码。服务端 在接收 登陆信息的时候 也应该是同样的处理。不过在转换类型的时候可能会异常退出。导致服务用过一次之后就不能使用了。从web服务器中看到的java版本是jdk1.8.0_65 这个版本是能够使用cc1这条反序列化链接的。
- 上一篇:hw打点之运气使然
- 下一篇:通过监控js获得18000奖金