关键
如何从外部最终进入root主机并获得flag
比赛工具
同一局域网中的攻击机和靶场机器,以web方式访问攻击机(kali linux),通过攻击机来渗透靶场机
实验环境
(假设为)

记住,目标是获得靶场机上的flag
实验步骤
信息探测
对靶机的IP进行扫描,探测开放的服务;渗透是针对服务的漏洞探测,然后进行对应的数据包发送,获取机器的最高权限
namp -sV 192.168.253.10
分析探测结果
已知,每个服务对应计算机的一个端口,用来进行通信,常用0~1023端口,要在扫描结果中查找特殊端口
要针对特殊端口进行探测,尤其对开放大端口的http服务进行排查
针对隐藏页面的分析
探测大端口的信息
对于开放http服务的大端口(31337),可以采取http://ip:port/的形式访问

查看源代码,若无隐藏信息则使用工具探测隐藏文件:
dirb http://ip:port/

其中,robots.txt中存储着浏览器被允许/不允许探测的文件名

浏览/taxes,找到第一个flag

再打开/ssh,ssh的作用是使远程计算机通过ssh客户端登录到本地服务器的ssh服务商,实现远程计算机对服务器的远程操作

继续探测公私钥文件

下载私钥文件和验证密钥文件(公钥存储在服务器端,无需下载)
将私钥文件存储到攻击机的桌面上,在桌面打开终端

id_rsa具有可读写权限
ssh -i id_rsa
没有对应的用户名
对应的用户名可以从authorized_keys中找到

如图,用户名为simon
//ssh -i 密钥 用户名@服务器ip
ssh -i id_rsa simon@192.168.253.10

直接输入会出现permission denied(权限未赋予),下载的文件先需要赋权限,可读可写
赋予权限之后重新登录结果如图所示,需要密码

解密ssh密钥信息
使用ssh2john工具将id_rsa密钥信息转换为john可以识别的信息
chmod 600 id _isa
ssh2john id_rsa > rsacrack
利用字典解密rsacrack的信息,使用zcat工具,通过管道传递
zcat /usr/share/wordlists/rockyou.txt.gz | john --pipe --rules rsacrack

解出密码为starwars 
到这里登录到主机,但是并不是root权限?该如何获取呢?
深入探测根目录
cd/root进入根目录进行查看发现flag.txt,cat它发现没有权限,说明Simon知识一个普通用户不能执行root权限
提升权限/代码审计
查找当前具有read权限的文件
- find/ -perm -4000 2>/dev/null

查看read_message.c 
在其中找到了flag2
接下来进行代码审计:
输入赋值给buf数组;判断认证数组和输入数组的前五个字符如果相等,就执行/sbin/message文件(当前没有read权限)
漏洞:使用不安全的gets(buf)读取用户输入,没有限制输入的长度
攻击步骤:
尝试输入"simon"成功,因为前五个字符匹配,程序执行了execve(program, NULL, NULL)
构造特殊输入"SimonAAAAAAAAAAAAAAAA/bin/sh",前五个字符simon通过验证,而超过长度的输入覆盖program原本的内容/usr/local/sbin/message,通过溢出将program覆盖为/bin/sh
当程序执行execve(program,...)时就启动了shell
该程序可能以root权限运行,故攻击者获得了root shell,可以执行任意命令,通过pwd确认当前目录是/root,通过whoami确认是root用户
读取了flag.txt,获取了最终flag



883

被折叠的 条评论
为什么被折叠?



