故事开始于一个返回包报错,它启发笔者进行一些有趣的测试(SQL-I,RCE,源代码暴露,权限提升),让我们一起来看看。
我刚刚参加了认证考试 ,直到我按下“结束考试”按钮,它才会重置我的帐户登录会话,然后不知何故,当我重新加载浏览器时,它会显示错误消息“You have an error in your SQL syntax;”并显示“请再次登录”的响应。
以前我从来没有想过在那里寻找错误,但收到错误消息实际上唤醒了我去寻找更多错误,原因是那里有我的数据,所以我希望我使用具有 CIA(机密性、完整性、可用性)方面的安全 cbt 系统。
SQL注入
为什么会出现这个SQL错误呢?有了上述条件,我当然立即打开了burpsuite,尝试在endpoint上抓取请求后,发现有post数据,但是value为空。
我曾尝试通过执行 order by、union select 等方式手动执行 SQLI,但我注入的查询没有产生结果,直到确定最后一个数字 order by 时才产生结果。因此,我使用 sqlmap 的基本命令如下:
python sqlmap.py -r ../cbt --dbs --tamper=between --random-agent --batch -p exam_group
源代码泄露
不仅是 SQL注入,我的浏览器插件(DoTGit)显示 cbt 系统包含一个 .git 文件夹,这让我进行了更深入的分析。
准备好工具,我使用 git-dumper 工具来获取并提取 .git 文件夹。
我等待它完成并运行git checkout命令。它将调出项目的文件夹结构,但当然对于 .gitignore 中的敏感文件我无法获取。
权限提升
在进一步阅读代码之前,通过运行上面的 git checkout 命令,我在目录 redacted.com/idk.sql 中找到了 .sql 文件。我可以看到数据库结构,因为用户和密码未加密,我可以用来登录,但尝试后发现虚拟用户和具有最高访问权限的用户我无法用于登录。
下图是用户表的 SQL 查询的片段,有各种角色,我只能以除管理员之外的所有角色登录,我想也许具有管理员角色的帐户不存在。
我以 PIC 角色登录,只有菜单:考试、学生、用户等功能。奇怪!虚拟账户等菜单的表中没有数据,只有用户菜单显示具有上述角色的用户表列表。作为 PIC,您可以添加用户,但最多只能添加 3 个角色。
只需正常添加用户,我选择的角色是Proctor,使用 burpsuite 我拦截添加用户的请求并将角色更改为管理员,看看会发生什么,它会返回添加成功的响应。
之后,我成功登录并获得了超管权限。
最后,是时候进行 RCE 了
理解代码并不需要花费太多时间,我所做的就是关注文件上传的点。我找到了各种函数和条件,例如该函数仅允许 xls、pdf 等,直到我找到一个允许所有扩展名的函数。
如下图所示,左边是安全功能,右边是容易不受限制的文件上传,我可以轻松上传危险文件而不会被拒绝。
执行一下命令,cat etc/password ,然后成功了!
结论
开发人员应从中吸取教训,编写一个内外都安全的程序。此外,作为一名漏洞猎人,在漏洞挖掘的过程中要不断地深入思考。
以上内容由白帽子左一翻译并整理。原文:https://kresec.medium.com/from-exam-to-hacking-64d1cd7ed781
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。
原文始发于微信公众号(白帽子左一):黑客成长日记 | 从SQL注入到RCE
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论