工具
hydra、crunch、dirbuster
涉及到的点
Port knocking(端口试探)
Brainfuck编码
ftp爆破
ssh爆破
openssl enc加密
命令执行漏洞
Linux awk 命令
渗透过程
靶机地址192.168.1.10。开放的端口21、22、80。
访问80端口,在源码里面存在base64加密的字符串,拿到一个secretfile.html。
给了一串二进制数据,没懂什么意思。利用dirbuster和dirb扫到了一些可以访问的页面。整理一下应该用得到的页面
ftp://192.168.1.10:21
http://192.168.1.10/.bashrc
http://192.168.1.10/berrypedia.html
http://192.168.1.10/secretfile.html
http://192.168.1.10/login.php
http://192.168.1.10/register.php
http://192.168.1.10/welcome.php
http://192.168.1.10/phpmyadmin/index.php
http://192.168.1.10/placeho1der.jpg
//点击berrypedia.html页面Elderberry,图片是倒过来的,文字也是镜面对称的,用手机的前置摄像头拍一下,内容是port of tacoma(塔科马港)
http://192.168.1.10/hidden.gif
自己在做的时候一直把注意力放在登录之后的welcom.php页面,但是实在不会做看WP的时候我惊了。突破点在http://192.168.1.10/placeho1der.jpg这这张图片上面。
图片是四个人物和一个港口。突破点在四个人物上面。这四个人分别是Smiley Lewis, Dave Edmunds, Fats Domino和Gale Storm,首先,他们都是艺术家,都演奏了同一首歌曲,名字叫,”I hear you knocking”,年份分别是,1970,1955,1955,1961,原来跟knock有关,linux下有个命令knock可供安装使用。port knocking(端口试探)是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机。涨姿势!!!那么显然说明了有个端口没有开,需要我们knock。knock的顺序就是前面提到的年份。
在使用knock前需要安装这个命令。
sudo apt install knockd
sudo vim /etc/knockd.conf
修改第7行内容为:command = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT
sudo vi /etc/default/knockd
修改:START_KNOCKD = 1
sudo service knockd start
更多port knocking知识可以看http://einverne.github.io/post/2019/07/how-to-use-port-knocking-hide-ssh-daemon-port.html
然后在我们的kali进行端口试探
再次扫描靶机开放的端口,可以看到新开放了一个61955端口。
扫描这个端口的目录
扫描这个端口下的目录文件,拿到一个看起来特别的目录。
拿到一段Brainfuck编码,解密网站https://www.splitbrain.org/services/ook
解码出来是这样的,估计是用户名,pw是密码。
Hello World!
team members
chuck
halle
nick
terry
mary
kerry
pw: bakeoff
前面在扫80端口的时候开放了ftp和ssh,拿这些用户名和密码去爆破。
先爆破ssh
拿到账号密码,但是无法连接
接着爆破ftp,账号密码一样
成功连接上ftp
在.bash_history中存在.reminder.enc 和.trash两个文件,get .reminder.enc,get .trash到kali。
因为是点号开头属于隐藏文件,在kali的桌面看不到。直接file查看两个文件的文件类型。
第一个是openssl enc加密,第二个是文本,查看第二个文本,试一些密码,结合第一个是加密,
网上找了个脚本,直接放在命令行用,这里会产生大量的文件。
for i in `openssl enc -ciphers | tail -n +2` ; do for j in `cat .trash`; do openssl ${i:1} -d -salt -md md5 -in .reminder.enc -out "decrypted$i$j" -k $j; done;done 2>/dev/null
然后在产生的文件中寻找text类型的文件
拿到一个登陆密码。
在前面对61955端口进行信息收集的时候我们还发现了login.php,用mary/dangleberry69登陆
第一个页面是视频播放,第二个页面给了一些DNS解析地址
在这个地方存在命令执行漏洞。我们尝试在前端修改提交的内容
得到的回应,执行了whoami的命令
确定存在命令执行漏洞,我们利用它来反弹一个shell到kali上。
先监听kali上的8848端口,然后在命令执行处写上反弹shell的语句
反弹拿到shell,并利用Python建立一个交互式的shell
在当前目录下拿到nb-latin文件,看起来是用户名或者密码。
把nb-latin从靶机下到kali上去
把新拿到的这个字典当成密码和前面得到的用户名字典结合继续爆破ssh。
拿到ssh的账号密码。ssh连接
列出当前的目录发现一个invoke.sh文件,想执行,但是权限不够,用sudo -l列出当前用户可执行的指令,我们就发现terry有权限可以执行invoke.sh。
尝试用terry的权限去执行sudo -u terry ./invoke.sh /bin/bash,用户切换到了terry
同样查看当前用户可以执行的命令,可以看到halle可以执行一个awk,AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
那么我们可以通过awk的命令将用户从terry变成halle。用BEGIN命令,引入system全局变量,执行/bin/bash,sudo -u halle awk 'BEGIN{system("/bin/bash")}'
用户切换到了halle。再次sudo -l,chuck可以执行php文件
那我们可以写php文件去读取chuck目录下的一些东西。echo "" > /tmp/1.php,然后用chuck用户去打开。
然后以同样的方法读取.deleted目录,发现两个文件。
看看ssh_stuff里面有什么。
id_rsa.pub里面是一串rsa的公钥
在看看deleted里面的内容,是一份邮件。
把最重要的内容提取出来,告诉我们密码开头是che,结尾是rry,用到的字母的次数,用到一次的字母,baca一定有。
根据特征我们可以知道密码一共15位,前三位和后三位固定,中间插baca,baca的位置可以变化,剩下没用到的字符在剩余的位置随机组合,我们用crunch生成字典 ,
然后每两个合并成一个大文件,接着爆破root用户的密码。
先生成字典
crunch 15 15 -t che@@@@@bcacrry > password6.txt
crunch 15 15 -t chebcac@@@@@rry > password5.txt
crunch 15 15 -t che@bcac@@@@rry > password4.txt
crunch 15 15 -t che@@bcac@@@rry > password3.txt
crunch 15 15 -t che@@@bcac@@rry > password2.txt
crunch 15 15 -t che@@@@bcac@rry > password1.txt
那么接着爆破root用户的密码。
hydra -l root -P big_password1.txt ssh://192.168.1.10 -f -t 6
歇着吧。字典太大了,等不起了。直接用大神的图
然后ssh连接root用户。
总结
这个靶机非常奇妙,切入的点也让我惊讶,端口试探,没听过,我太菜了。AWK是啥,没听过,果然小白还是小白。言归正传,这个靶机让我最大的感触就是细心,一开始我是忽略了人物肖像那张图的,不懂端口试探是一回事,但是我竟然对这张图片完全没有怀疑,这是最让我感到挫败感的点,信息收集真的需要很细心,渗透测试需要有怀疑和开放的精神,脑洞要大,思路要奇特。这是我这次最深刻的感受