转自https://larryxi.github.io/

0x00 背景

文章内容仅作学习参考,勿以恶小而为

0x01 任意文件删除

拿到一个cms进行安装后,首先比较喜欢看看其安装逻辑,查找有没有在安装流程中直接导致重装的可能性。由于系统是THINKPHP5开发的,所以可以定位到application/install/controller/Index.php为安装的控制器,其中的check函数根据install.lock来保证系统不会被二次安装,如下:

不能直接重装的话,就只能借助unlink等函数看能不能删除任意文件进行重装,定位到application/user/controller/Index.php中的编辑头像的逻辑touxiang函数,如下:

其中第119~127行调用了unlink函数,意思是上传头像后删除原来的头像图片,具体步骤为:用户在客户端上传完头像后,客户端还会向这个touxiang函数POST新头像的url,然后程序将新url和旧url进行对比,不同的话就把旧url对应的(头像)文件删除,把新url写入到数据库中。

其中POST的url是我们可控的,而且程序也没有对url做任何限制,这样我们就可以删除任意文件乃至重装漏洞了。

那么我们来实际验证一下,首先在网站上注册一个用户,在上传完图片后用burp截获到POST 新url的请求:

我们把新url的路径改为install.lock对应的路径再重放过去 ,这样新图片的url就更改了,如下:

所以当我们再POST一个新的url,旧的url文件就会被删除了:

Install.lock文件被删除,所以导致了重装:

当用户上传完图片后,内部逻辑直接更新数据库就好,何必要信任恶意的外来输入呢。

0x02 用户评论处xss

由于这个框架的注入不是太好找,那就来看看有没有xss漏洞,首先从application/config.php看到其默认是没有任何过滤的:

那么根据用户的操作来定向追踪一下可能存在xss的点,开发者对于修改资料和提交留言处都对输入进行了htmlspecialchars处理,但在用户评论处application/index/controller/Index.php中:

开发者直接将post的评论内容插入数据库,这里就有可能导致xss漏洞了。在评论后抓包看一下:

开发者只是依据前端来进行过滤,这样的效果甚微,我们还是可以注入xss。在后台页面会直接从数据库拿出前5条评论输出显示,这样我们在提交评论后就可以影响到后台了,证明如下图:

0x03 任意评论或收藏删除

基于逻辑来寻找漏洞的话,可以看看用户有哪些操作可能导致越权等常规的逻辑漏洞,因此在application/user/controller/Index.php中找到这么一段逻辑:

这里未验证身份就可以删除对应id的评论和收藏,而且也没做任何的权限验证,那我们循环跑一遍请求就可删除所有的评论和收藏了。下图中不加sessionid即可删除对应评论:

0x03 后记

在测试任意文件删除的时候,我本地环境有点问题就直接上官网去测了,一时手快就直接让官网重装了,扰乱了人家的运营有些尴尬,这种敏感文件的操作还是尽量本地或demo站测试比较好。

在审计出任意文件删除后看到一位大牛的博客http://balis0ng.com/post/dai-ma-shen-ji/2017-03-27 ,审计的同一套系统,比我早三天,也可以拿来学习。

虽说这个CMS是用THINKPHP5框架写的,但是开发者还是没有考虑太多的安全问题,在掌握了框架的一些应用规则后,代码审计的思路都是相通的,多实践才能多知晓。

最新文章

  1. iOS开发 - OC - 苹果为大家提供的后台:CloudKit 的简单使用
  2. CPU与内存的关系
  3. js 数组
  4. CentOS 6.5 zabbix 3.0.4 SendEmail报警
  5. sql语句按照汉字拼音首字母排序
  6. C# jquery webservices 跨域调用的问题解决方案
  7. Redis设计与实现-内部数据结构篇
  8. centos查看磁盘扇区大小等信息
  9. Fitnesse+RestFixture:Web服务回归测试利器
  10. mysql 游标最后一行 重复问题
  11. 我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)
  12. win32程序调试OutputDebugString 类似printf格式化输出
  13. JMeter的介绍和简单使用
  14. Spring基础系列--AOP织入逻辑跟踪
  15. SQL对于 小数处理的小结
  16. FLEX外包团队:Flex例子DEMO源码
  17. PHP从入门到精通(六)
  18. VSCode从非根目录编译golang程序(转)
  19. Elasticsearch 学习资料
  20. [Linux]《鸟哥的私房菜》笔记 (缓慢更新)

热门文章

  1. Maven -Maven配置tomcat插件 两种
  2. GitLab添加ssh-key,操作无需每次输入账号密码
  3. 转载 linux常用的监控命令工具
  4. ubuntu 环境 celery配置全解
  5. CAS登陆过程UML中文版
  6. Lodop打印控件输出页码(超文本和纯文本页码)
  7. 洛谷 P1490 买蛋糕 解题报告
  8. [转载]C++的顺序点(sequence point)和副作用(side effect)
  9. dij与prim算法
  10. Linux查看端口、进程信息