注入账号密码进不了后台?看我巧进后台getshell

admin 2025年5月26日14:54:14评论14 views字数 1808阅读6分1秒阅读模式
这次的案例虽然从技术角度来看并不复杂,就是简单的sql注入然后getshell,但整个利用过程还是很有意思,尤其是通过一个debug页面获取足够的信息来扩大有限的危害。因此特此记录,供今后的测试实战参考。水平有限,让各位师傅见笑了。

0x01 初识目标

注入账号密码进不了后台?看我巧进后台getshell

经典登录框开局,爆破无果,但是一个单引号打开了局面

注入账号密码进不了后台?看我巧进后台getshell

随后直接上万能密码

admin'or 1=1 --+

结果触发了 ThinkPHP 的 debug 报错界面

注入账号密码进不了后台?看我巧进后台getshell

数据库配置也一并出来了

注入账号密码进不了后台?看我巧进后台getshell

0x02 尝试登录

这个时候自己猜测可能是用户名不是admin导致的报错,于是

开nmap扫描找一下数据库有没有对外开放,等待期间上sqlmap,同时扫了一波thinkphp,无果

一番捣鼓把管理员账号密码拿到手了,顺手试了下os-shell,但由于用户权限太低了并没有成功

注入账号密码进不了后台?看我巧进后台getshell

当我用数据库里的账号密码登录时结果傻眼了,仍然是一模一样的报错

注入账号密码进不了后台?看我巧进后台getshell

这个时候端口扫描结果也出来了,3306直接对外开放,顺利的进到了数据库里,确认了sqlmap拿到的管理员账号是没有问题的

注入账号密码进不了后台?看我巧进后台getshell

随后自己手动在数据库里新增了一个账号,登录后看到的一模一样的报错信息

大概率能确定是网站的问题了。虽然已经够交差了,但谁又会不想能多做一点成果呢

0x03 分析报错

研究了一会报错信息(叽里咕噜一大堆,看都看不懂,复制到拼多多里一点反应都没有; (^~^;)ゞ)

注入账号密码进不了后台?看我巧进后台getshell

登录后报错内容中,出错的sql语句如下

SELECT * FROM db_node WHERE node_id IN () ORDER BY level

显然()不能为空,这里本来应该有点什么东西的,所以往上继续看Call Stack

注入账号密码进不了后台?看我巧进后台getshell

也就是getnodebywhere()拿到的nodeid IN ()是空的,所以最后面的session拿到的角色数据也都是空的

注入账号密码进不了后台?看我巧进后台getshell

这么看来那就很可能是数据库有问题了,再回头来看数据库里的其他几个表

注入账号密码进不了后台?看我巧进后台getshell

逐个点开后发现角色表 db_role和节点表 db_node都是正常的显示内容

注入账号密码进不了后台?看我巧进后台getshell
注入账号密码进不了后台?看我巧进后台getshell

这两个表是没问题的,那问题大概率就出在剩下的表 db_role_node上,推测该表是角色和权限节点的对应关系表

点开来一看傻眼了,这个表是空的

注入账号密码进不了后台?看我巧进后台getshell

到此为止一切都解释得通了

  • db_role 表:角色信息正常
  • db_node 表:系统菜单节点正常
  • db_staff 表:管理员账号正常
  • db_role_node 表为空

虽然账号密码没错,但因为 db_role_node是空的,所以php程序找不到登录进来的管理员id可以访问的对应节点id,则登录成功也无法获得权限,程序自然就会在尝试查询权限节点时出错。

如果自己想的没错那就只需要把 role_id和对应的 node_id补齐就能正常访问后台页面了

说干就干

0x04 构造权限映射

直接操作生产数据库是非常危险的行为,虽然说撑死胆大的饿死胆小的,但还是要务必切记不要随便这么干!!

首先备份 db_role_node 表,然后将所有权限节点和 role_id=9关联:

INSERT INTO db_role_node (role_id, node_id) VALUES(992),(993),(996),(997),(998),(999),(9100),(9101),(9102),(9113),(9114),(9115),(9116),(9140),(9143),(9144),(9147),(9152),(9156),(9157);
注入账号密码进不了后台?看我巧进后台getshell

随后刷新页面,接着满怀期待的又一次看到了报错页面..

注入账号密码进不了后台?看我巧进后台getshell

正当自己恼火时,突然想到可能是服务器端的session缓存导致的

于是自己重新登录一次

注入账号密码进不了后台?看我巧进后台getshell

果然成功进入后台

0x05 后续利用(getshell)

随后的操作就简单了,改个后缀文件上传

注入账号密码进不了后台?看我巧进后台getshell

直接拿下

注入账号密码进不了后台?看我巧进后台getshell

0x06 总结

这个案例原本只是一次常见的 SQL 注入,且危害有限,但由于系统在报错页面中暴露了详细的错误信息,使得能够推断出数据库的结构和程序的权限控制逻辑。进而手动修复数据库中的角色与节点的对应关系,并成功登录后台进一步获取控制权限。这个过程说明,错误信息泄露并不一定是没有意义的水洞,既然报错能帮助开发调试程序,那也就能被利用于扩大有限的危害。

还有就是再次提醒,不该碰的数据库不要乱碰~本文内容纯纯ai生成,不构成任何建议,危险动作,请勿模仿!!

原文始发于微信公众号(安全的黑魔法):注入账号密码进不了后台?看我巧进后台getshell

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月26日14:54:14
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   注入账号密码进不了后台?看我巧进后台getshellhttps://cn-sec.com/archives/4017050.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息