专栏首页信安之路代码审计之 zzzphp

代码审计之 zzzphp

本文作者:0x584A(信安之路作者团队成员)

想想很久都没有发布代码审计的文章了,最近忙于开发任务加上最近状态不太好,哎研发dog。

这里给去中心化漏洞平台拉个广告(域名:dV**et.io),因为有朋友在里面工作,之前叫我去一起挖交易所漏洞,然后被狠狠打击了一波自信。

周五的时候打赌看谁挖的多,周末两天我提交了 14 个洞,不是撞洞就是不符合规则。而大佬呢?猛的一B,四个号全部上了10月榜单前十

有机会去北京一定要揍...吃...他一顿狠的,气啊!!!

SQL 注入

版本:

zzzcms php 1.5.5 181018

安装好环境后跟入口文件,至此处:

ParseGlobal(G('sid'), G('cid')); 跟进去后是这样的:

在跟进 db_load_one 方法看看:

到此凭经验来看,ParseGlobal() 方法内传递的参数会造成SQL注入,db_load_one() 方法中的130行会将 & 符号替换成 and ,而 ifnum() 方法仅是一个判断 $where 是否是整形。

接下来就是向上查找传递的 $sid、$cid ,注意到在进 ParseGlobal() 时,先用了 G() 方法,而它实践上是在获取 $GLOBALS['sid']

随后在 ParseGlobal(G('sid'), G('cid')); 的上面一行,$location = getlocation(); 中找到了 sid

下面代码的关键位置我已经加了注释说明:

可以看到,sid 是通过 URL 赋值的,通过 $arr1 中的 about 定位到漏洞出现位置

正常访问:

http://127.0.0.1/?about/22_1

注入查询:

http://127.0.0.1/?about/22&1=2_1

此时的 SQL:

综合上面的东西,组合URL时不能使用 /**/ 注释来充当空格,现在让我们来爆下数据库名称:

payload:?about/22&ascii(mid(database(),1,1))=122_1

未修复的后台管理万能密码

首先搜了一下 cnvd:

先看了看当前的版本是 1.5.5 ,所有想验证下这个漏洞是否被修复了。

首先找到后台登录处的代码:

用户名是 $adminname,这里的 getform() 是去 POST 中找 adminname 这个参数,如果没找到则返回 null

getform() 里面还有一个 txt_html() 转义函数,但是在这里并没有什么 luan 用。

可以看到有个 htmlspecialchars 函数,但设置第二个参数,导致它不会过滤单引号,然后就沦陷了。

这是正常的包:

这是 SQL 注入导致的万能登录包:

虽然最终弹出了一个 script,但 cookie 已经被写入,我们去前台刷新下页面就可以直接进入后台。

原因是,当然我们绕过第一段账号密码判断的 SQl 后,存在一个 login_in($adminname);

可以看到,这里是一个 foreach 循环,当 $username 传入含 or 的恶意SQL时,查询出来的 $data 是多条记录。

这里存在逻辑错误,首先判断账号是否具备管理员,如果不是会 exit 退出。也就说,查出来的 $data 在前面的循环中成功写入 cookie 的一定是管理员账号。

不仅如此,这里还会输出后台所有管理员的账号。我特意去后台新增了一个账号,admintest

后台上传 GETSHELL

我不怎喜欢审计后台的东西,可是已经审计到这了,那就看看有没有后台可以 getshell 的地方。

答案当然是有的,前提是你拿到的管理组有 上传设置 的编辑权限。

首先在 文件简历->上传设置->附件类型 中,加入一个 php。

然后在任意文章或者内容管理页面,上传图片并抓包:

验证下:

关键代码在 inc/zzz_file.php 中的 upload() 方法,会取出我们刚才加在附件类型中的 php,进行文件名后缀的白名单比对。

本文分享自微信公众号 - 信安之路(xazlsec)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-10-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 轻松理解什么是 SQL 注入

    作为长期占据 OWASP Top 10 首位的注入,OWASP 对于注入的解释如下:

    信安之路
  • 近期关于代码审计的学习总结

    这一小段时间对一些 CMS 进行代码审计,和一些 CVE 分析复现。总结一下几个案例的问题产生原因和利用思路。由于能力有限,挖掘到的都并非高危漏洞,旨在总结一下...

    信安之路
  • webgoat-Injection

    注入攻击是WEB安全领域中一种最为常见的攻击方式。在“跨站脚本攻击”一章中曾经提到过,XSS本质上也是一种针对HTML的注入攻击。而在“我的安全世界观”一章中,...

    信安之路
  • 从一次数据迁移项目里,我得到的四个经验教训

    不久前我经历了一次数据迁移项目。前几天,我跟一位架构师探讨了一下当时的各个步骤,和我所选择并进一步开发的解决方案。我觉得我应该告诉他一些信息 ,避免他日后迁移数...

    深度学习与Python
  • 【DB笔试面试671】在Oracle中,如何监控数据库中的非常耗费性能SQL语句?

    在前边的触发器章节中介绍了如何利用系统触发器监控用户的登陆登出问题,并且可以记录所有的数据库DDL语句,这对数据库的安全审计是非常有帮助的。利用触发器还可以限制...

    小麦苗DBA宝典
  • 自相矛盾:Null is Not Null引发的成本误区

    黄玮(Fuyuncat) 资深Oracle DBA,个人网www.HelloDBA.com,致力于数据库底层技术的研究,其作品获得广大同行的高度评价. 在SQL...

    数据和云
  • 平衡二叉树 AVL树结构详解 [Java实现]--源码部分

    https://blog.csdn.net/zhang6622056/article/details/82698859

    纯洁的微笑
  • 亿级流量下平滑扩容:TDSQL水平扩容方案实践

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库、云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙《你想...

    分布式数据库TDSQL
  • 直播回顾 | 困扰多年的分库分表问题终于解决了

    腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,3月17日郑寒的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。

    腾讯云数据库 TencentDB
  • Yii2 中 ActiveDataProvider 如何使用分页 limit 限制条数

    应用场景,我们某个数据表只想返回 200 条数据?我们该怎样做呢? 我们可能会想到使用 limit 来进行限制,接下来就一起尝试下,看看效果如何

    hedeqiang

扫码关注云+社区

领取腾讯云代金券