AMPSecurity: CTF4
项目地址:https://download.vulnhub.com/lampsecurity/ctf4.zip
是一个打包好的镜像文件
注意:导入 vmx 时一定要选择我已移动,否则没网
使用 Nmap 扫描出开放服务及操作系统版本
1 | nmap -sS -sV -O -p- 192.168.202.144 |

对 80 端口扫描后台,首先对不需要登录的页面功能进行测试
这里发现输入的 aaa 回显到了网页上

XSS
Header Search 搜索框(反射)
测试存在反射 XSS 漏洞
1 | <script>alert(1)</script> |

在 Blog 页面测试发现多个了 id 参数,且会跟随博客的不同而变化

Professor Ehks Center for Data Studies(反射,RCDATA 元素逃逸)
在 HTML 规范中,<textarea> 和 <title> 被归类为 RCDATA 元素
- 特性:RCDATA 元素可以包含文本和字符引用(实体编码),但不能包含任何子元素
- 解析行为:当浏览器遇到
<textarea>时,它会进入“RCDATA 状态”。在此状态下,浏览器会把遇到的所有内容都当成普通的纯文本,直到遇到第一个闭合标签</textarea>为止 Payload 执行流程拆解: - 浏览器看到
<textarea>,开始将后面的内容解析为文本 - 它看到了
<img title="...">。在普通的<div>中,这会被解析为一个图片标签,但在<textarea>中,它仅仅被视为一段普通的字符串 - 解析器继续向后读,发现了字符串:
</textarea> - 关键点就在这里:解析器并不关心这个
</textarea>是否写在一个属性值(如 title)里面。根据 HTML 解析规则,只要在 RCDATA 元素内部看到了对应的结束标签,解析器就会立即跳出 RCDATA 状态,回到正常的 Data 状态 - 由于解析器认为
<textarea>已经结束了,它会将剩下的部分:<img src onerror=alert(documet.cookie)>">当做普通的 HTML 标签进行解析

Professor Ehks Center for Data Studies(两个反射)
aaa 加单引号是会返回报错信息的,同时 bbb 也被回显了出来

将 bbb 改为 XSS Payload 可以弹窗


同理 aaa 也可以弹窗

Professor Ehks Center for Data Studies Post blog(两个存储)
只有 Post blog 可以点击,进去看看发现是输入博客的内容

分别输入两个不同的 Payload 进去
1 | <script>alert(123)</script> |

来到博客页面发现 Title 的已经弹窗了

进入博客发现文本和内容都弹了一遍


Prof Ehks Data Research PHP-Calendar testsessions(反射)

Prof Ehks Data Research PHP-Calendar Description(存储)
尝试注入两个 XSS Payload 输入框
1 | <a href="javascript:alert(111)">link</a> |

Description 的弹窗了

Prof Ehks Data Research PHP-Calendar Modify(存储)
点击 Modify 进去发现内容又渲染出来了,推测是外面这个页面有转义,注入 Payload
1 | "onclick="alert(111) |

成功弹窗,观察 Payload 位置

同样在外面也能弹窗,可以多水一份报告

Prof Ehks Data Research PHP-Calendar Search(反射)
使用 SQLMap 测试 SQL 时探测出存在 XSS

SQL 注入
Professor Ehks Center for Data Studies Blog
加单引号直接报错了,而且还是数据库函数错误

SQLMap 梭哈 dump 出所有数据拿到账号和密码

1 | +---------+-----------+--------------------------------------------------+ |

两张表对应的是两个后台,一个博客的一个邮箱的
Professor Ehks Center for Data Studies(两个)
Username 及 password 参数存在 SQL 注入漏洞

Professor Ehks Center for Data Studies Post blog
user_id 加单引号报错

构造 Payload 在后端
1 | insert into blog (blog_title, blog_body, blog_date, user_id) |
1-(if(1=1,sleep(5),0)) 在数据库看来,这整体就是一个数学运算式
数据库会先计算这个式子的结果,再把结果填进 user_id 字段
接着它去执行 if 内部的 sleep(5)
数据库停下来等了 5 秒,返回 0,最后算完 1-0=1

Prof Ehks Data Research PHP-Calendar Search
抓包搜索功能

发现有个参数 order 的值为 ASC,都是 SQL 语句的关键字,所以加单引号测试发现报错

在 ORDER BY 后面是不能直接跟 OR 1=1 的。我们需要利用报错注入或盲注
这里使用报错注入(另一个删除功能不存在 SQL 注入,有长度限制绕不过去)
1 | submit=Submit&searchstring=aaaa&action=search&sday=7&smonth=1&syear=2026&eday=7&emonth=1&eyear=2026&sort=startdate&order=ASC%2C(select%201%20from%20(select%20count(*)%2Cconcat(version()%2C0x7e%2Cfloor(rand(0)*2))x%20from%20information_schema.tables%20group%20by%20x)a) |

弱口令
Professor Ehks Center for Data Studies
先登录博客的

Prof Ehks Data Research PHP-Calendar
登录另一个网站后台

点击用户

修改下权限,选择可以添加事件,再点击 Add Event

SquirrelMail
打开另一个网站

通过之前爆破出的 ehks 表中的用户名密码登录

SSH 登录
远程 SSH 连接服务器
1 | ssh -oKexAlgorithms=+diffie-hellman-group14-sha1 -oHostKeyAlgorithms=+ssh-rsa dstevens@192.168.202.144 |
越权
Professor Ehks Center for Data Studies

CSRF
Professor Ehks Center for Data Studies Post blog CSRF
构造提交表单的 POC

在另一个浏览中使用另一个账号登录并触发 POC

任意文件读取
Professor Ehks Center for Data Studies Page(%00 绕过)
读取 /etc/passwd 文件发现在后面拼接了 .php
使用空字节 %00 绕过
1 | ?page=../../../../../../../../../etc/passwd%00&title=Blog |

目录遍历
Prof Ehks Data Research PHP-Calendar adodb

提权
Sudo
查看权限

第一个 ALL 通常指所有目标主机
第二个 ALL 指可以以 root 或其他任何用户身份执行命令
直接提权即可
