注意! 这不是WriteUp!这不是WriteUp!这不是WriteUp!
只是记录下自己的学习历程~

Kali机:192.168.0.108
靶机:192.168.0.123

首先探测机器是不是通(其实大部分都是通的23333 不过ping一下比较好)

看样没有防火墙,然后试试web

80端口:

emmm 貌似没什么
其实大部分flag都是隐藏的比较深的,但是这个确认是没有的(别问我怎么知道的。)

既然没有就开扫 nmap走起
nmap -sV 192.168.0.123

80端口 刚试过没什么用。
22 ssh端口 貌似也没什么用
这31337端口是何方神圣?

firefox看下

纳尼?404? 这404有鬼
dirb扫一下

基于字典的Web目录扫描工具DIRB
扫描Web目录,可以发现潜在的渗透目标。不同于网站爬虫,使用字典方式可以发现网站没有关联的网页。Kali Linux提供一款基于字典的Web目录扫描工具DIRB。该工具根据用户提供的字典,对目标网站目录进行暴力猜测。它会尝试以递归方式进行爆破,以发现更多的路径。同时,该工具支持代理、HTTP认证扫描限制访问的网站。该工具还提供两个命令,帮助用户从网页生成字典,或者生成定制字典。

dirb http://192.168.0.123:31337/

文件介绍:
.bash_history :记录当前用户曾经执行过的历史记录(一般在用户文件夹下,隐藏)
.bashrc .profile :bashrc与profile都用于保存用户的环境信息,bashrc用于交互式non-loginshell,而profile用于交互式login shell。
.ssh 是个文件夹,储存ssh的密钥登录所需信息
robots.txt :“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。

打开robots.txt看看有什么好东西

.bashrc和.profile没什么用。taxes是什么鬼

flag1 get~

刚刚貌似还有个.ssh目录,既然做的是ssh私钥泄露,这个肯定有用

先看看ssh密钥登录怎么配置的
执行ssh_keygen生成密钥对,然后用ssh-copy-id部署到对端计算机上。
(1)当执行完ssh-keygen命令后,会在.ssh目录下生成两个文件,id_rsa和id_rsa.pub。id_rsa是私钥,id_rsa.pub是公钥。
(2)当执行完ssh-copy-id命令后,当你输入yes的时候会在本地服务器上生成一个known_hosts文件,这个文件会把远程计算机的相关信息记录在这个文件里,确保你下次登录的时候是相同的服务器,避免遭受hijack之类的攻击。如果登录的服务器信息有所变动,那你登录的时候就会提示你,然后登录失败。当你输入远端服务器的密码之后会在远端服务器生成一个authorized_keys,有了这个文件,下次登录就不需要再次输入密码。

私钥是存放在用户那边,公钥是存放在服务器上的,所以公钥对我们没有用,下载id_rsa私钥
authorized_keys也下载一下,或许有什么用。
试试能不能下载下来
(下载过程略,的确可以下载下来)

登录试试

权限不对,权限设置为600

有密码?
接下来就要开始破解了

使用ssh2john把私钥转换成john可以识别的(hash)并输出到sshcrack文件中
ssh2john id_rsa > sshcrack

然后用john(字典)破解
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules sshcrack


可见密码破解成功,密码是starwars(密码破解可能需要较长时间,视情况而定。)
另外如果密码已经破解过,在~/.john/文件夹下 有john.pot 是储存破解完成的密码的。

密码破解成功!使用密钥登录!
输入密码的时候写 starwars

密钥不正确? 可能是用户不对,刚刚说了,当你输入远端服务器的密码之后会在远端服务器生成一个authorized_keys,有了这个文件,下次登录就不需要再次输入密码。这个文件中应该存有用户名信息。 下载下来cat一下看看

用户名是simon,试试用simon能不能登录

进去了,ls一下看看

貌似没什么有用的。 这种有用信息可能到处放,不过我们的目的是拿到root,自然要看下/root了

看到flag了,cat一下
纳尼?有权限?

这时候我们就要考虑提权了,在提权之前我们要找到入手点,看下什么文件有root权限。

find / -perm -4000 2>/dev/null
2>/dev/null是因为当前用户权限较低,会出现一些权限不足的提示,而我们提权就需要在当前用户可以访问的前提下进行提权,这句话的意思就是将错误信息输出到/dev/null,也就是过滤掉不显示。

仔细阅读,发现有个read_message可执行文件。
执行看看

他问你的名字是什么 随便输入个提示 你不是Simon(汗)
输入Simon

他说在他的用户目录(root)留了一份程序的源码(赤裸裸的讽刺)
刚刚看到了的确有read_message.c文件,cat一下看看

看代码取了输入内容的前5个字符,如果匹配authorized数组的内容,就执行execve(program,NULL,NULL),否则输出sorry 你不是Simon

execve(执行文件)在父进程中fork一个子进程,在子进程中调用exec函数启动新的程序。exec函数一共有六个,其中execve为内核级系统调用,其他(execl,execle,execlp,execv,execvp)都是调用execve的库函数。
execve()用来执行参数filename字符串所代表的文件路径,第二个参数是利用数组指针来传递给执行文件,并且需要以空指针(NULL)结束,最后一个参数则为传递给执行文件的新环境变量数组。

我们看到他执行的是NULL,考虑下有没有其他办法

既然authorized长度是20,那能不能溢出执行下/bin/sh获得root呢?

执行程序,输入SimonAAAAAAAAAAAAAAA/bin/sh (其中A就是为了补足个数,SimonAAAAAAAAAAAAAAA刚好20位,然后后面的/bin/sh会被溢出,从而实现执行/bin/sh的效果)

成功拿到root,cat一下看看

flag get√

其实CTF还是挺好玩的,涉及的知识面挺广的,不过需要对常用的软件有一定的基础。
至少会玩Linux233333
这个总体难度挺简单的,但是考察的地方很多。希望自己能在CTF的道路上越走越远

提醒一句:Kali玩的好,局子进的早,本文章仅供学习以及个人记录使用,如被用作非法用途

小心被爆菊!
至少被请喝茶是免不了了

补充一句,本blog与对其用作非法用途所产生的后果不负责!!


华风夏韵,洛水天依。