“ 某天,群里有个小伙伴分享了一个靶场,许久没打靶的我,逐渐的产生了一丝兴趣... 于是,故事开始了...”
本文为实战记录,并非攻略,且此次打靶除使用 GPT 帮写部分脚本外,几乎没有使用百度等网络资源。
所以文中会包含大量的思路描述与试错过程,不要觉得无聊,试错才是积累经验最快的方式。
01
—
index.php 收集到信息如下:
-
(页眉文本)电话号码: +254 002 100 500
-
(页眉文本)邮箱地址:[email protected]
-
(HTML源码)邮箱实际指向:[email protected]
-
(源码注释)author:Ethredah
-
(源码注释)URL:http://ethredah.github.io
-
(页脚文本)邮箱输入框,根据英文描述,输入邮箱可以订阅最新消息
about.php 收集到信息如下:
-
(页面文本):flag 格式为 Flag{xxxxx-xxxxx-xxxxx-xxxxx}
-
(页面文本):禁止使用 Web 扫描、端口扫描、DDOS 等
-
(页面文本):可以使用轻量级目录扫描
portfolio.php 收集到的信息如下:
blog.php 收集到的信息如下:
-
(页面文本)用户名:Admin
-
(页面文本)生日:2019-10-27
-
(页面文本)密码:p3ssw0rd
-
(页面超链接/HTML源码)single.php 页面,参数 ?id=xxx
contact.php 收集到的信息如下:
-
(页面文本)一个表单,可提交 name、email、message,且 message 是个富文本;
-
(HTML源码)表单是个 post 请求,且目标 url 为 /functions/contact.php
single.php 收集到的信息如下:
-
(页面文本)一个表单,name、comment,且 comment 是富文本;
-
(HTML 源码)表单是 post 请求,且目标 url 为 /functions/comment.php
—
分析整理上一步中收集到的结果:
-
index.php 的注释中发现 github 链接,这极有可能是开源项目二次开发,如果能拿到源码,那必然事半功倍。(结果:404. 或许曾经有,但现在 github 上确实没有了) -
github 链接 404 了,但是还有作者名,直接搜索了一下作者大名 Ethredah,果然,首页一个名为 PHP-Blog-Admin 的项目,点进去之后项目结构与之前收集的页面名称极其相似(结果:为了让题目有点挑战性,决定先不看,实在没有头绪了再看)。 -
-
顺手在页脚的“订阅邮箱”尝试了收集到的两个邮箱和自己的个人邮箱(结果:抓包后发现请求返回 200,但多次尝试,并未收到任何信件)
-
about.php 提示可以轻量级目录爆破,对根目录进行目录爆破。(结果:并没有什么新的发现)
-
1. 能否找到后台管理界面? -
2. 两个 form 表单是否会存在 SQL 注入?(富文本域无法上传图片附件,XSS 即使存在目前看来利用价值也不高,所以暂时不必优先关心) -
3. single.php 页面传递了一个参数 id,似乎为博客 id,是否存在注入可能? -
4. functions 目录下存在一些接口(已知的有 2 个),是否可以越权调用,是否还能找到其他的类似接口?
—
寻找入口
目标:找到后台登录地址;
找后台地址,首先想到的必须是 robots.txt 文件,直接尝试访问:
居然 disallowed 了 /1234 目录,不知何意,尝试访问发现 404,完全没有意义。
既然 robots.txt 中没有,那就只能再次进行目录扫描了。
有新发现
/Company_admin/login.php
/Company_admin/index.php
index.php 页面首次访问时返回了文本信息: "hold on",猜测应该是包含一个请求,由于参数不正确所以才会如此回显
login.php 页面则直接为后台登录页面
登录表单共需要 4 个参数:邮箱、密码、4位数字码、验证码
post 请求,最终提交到 /Company_admin/login.php
并且,还有两个新发现!
一个被注释掉的表单(如上图),根据标题可以推测是“重置密码”的表单,post 请求,提交到 /Company_admin/index.php 页面。
两个被注释掉的字段,在“验证码”与“Login”按钮中间(但观察代码似乎并无价值)
不过。尝试多次请求,发现验证码有效无法绕过,也就是说无法使用大字典进行爆破了。
整合上面收集到的信息
# 用户名
Admin
Ethredah
# 邮箱
[email protected]
[email protected]
# 还记的之前页脚有一个订阅邮箱,我填了自己的邮箱(这里脱敏),虽然返回了 200,但并没有收到任何信息,但这个邮箱也不能忘了尝试,万一是创建了账号呢
[email protected]
# 生日
20191027
# robots 文件
1234
# 密码
p3ssw0rd
组成一个针对性的字典
# 邮箱
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
# 密码
p3ssw0rd
123456
# 4位数字
1234
2019
1027
1910
多次尝试之后,发现回显信息都为 No account found with that email
邮箱是不正确的
那接下来准备将 HTML 源码中的注释取消,尝试一下这个所谓的“重置密码”表单
直接右击,以“HTML 格式修改”,然后删掉最前面的注释符号 <!--
回车确认,发现 HTML 中代码的颜色已经变了(说明不再作为注释了),但左侧页面中 form 表单并未展示出来
仔细看,下方的样式栏位,还有一个 display: none 的属性,这是“不展示”的意思,鼠标放上去,取消前面的√,让它展示出来。
可以看到左侧页面中已经出现了 “Recover Password” 字样,但是下方应该还有个“Submit”按钮没显示出来。
直接用同样的方法,把 Login 表单 display:none
输入一个邮箱,点击 Reset,发现请求是 200 成功的,但没有任何后续(比如输入新密码),输入自己的邮箱,也没有收到任何信件。
抓包发现,请求包没有任何参数的(email 没有被作为参数传递)
检查页面发现,input 标签没有 name 属性,难怪,右键,添加一个属性,name = "email",再次尝试(也可以直接在 bp 中加上 name 属性重发)
我比较喜欢在页面上操作去发送请求,然后在 BP 里面只改参数值,因为这样可以避免考虑参数的传参格式、请求类型等问题。
抓包看到参数正常传递了,但是依然没有效果
思考 ing ......
休息一下
—
SQL 注入
既然隐藏的表单无效,那就不在这里较真了。
按照最开始分析的思路,需要关注 4 个点:1. 文件上传;2. 文件包含;3. SQL 注入;4. 越权接口
现在,后台登录入口已经找到,那么“文件上传”、“文件包含”这两个功能,大概率是会在后台管理模块,并且:
“文件上传”功能很可能是在后台管理的“头像上传”、“博客内附件上传”、“博客静态资源上传”中;
“文件包含”功能很可能是在“博客模板包含”、“博客主题自定义”中;
想到这里,心中已经开始提前激动了
那现在剩下的关注点就已经明确了:SQL 注入、越权接口
先从 SQL 注入下手
回看之前收集的信息,在 blog 页面,收集到一个 single.php?id=xxx 的页面,这是从博客列表,进入博客详情的页面,而 id,基本可以确认就是博客的 id。
看到这个 ?id=xxx 的 url 结构,标准的 SQLMap 示例语句,这谁忍得住呀?
说实话最开始看到的时候我就想试它了,但一直觉得肯定有个后台入口,就强忍着内心的蠢蠢欲动先去探索后台入口了。
现在,终于
依稀记得,好像没说不能用 SQLMap 扫描吧?
开整
emmm
这里居然没有注入点?
试试上面收集到的几个表单(全部注入失败)
看到一连串的提示
原文始发于微信公众号(网安小趴菜):一个 Web 靶场的纯思路文.....
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论