一次对基于thinkphp开发程序的审计

admin 2023年1月19日23:13:35代码审计评论4 views1128字阅读3分45秒阅读模式

前言

最近想加强各种web的审计,刚好有朋友抛出了一套基于thinkphp5.1开发的代码,就借此机会看一次。下载源码按照教程安装,瞎点点看看功能,开始审计。

开始

thinkphp的系统代码结构一般大同小异,这里需要去看thinkphp的开发文档,这里重点关注application(主程序),puiblic(公开)文件夹,这是一个多应用系统,托thinkphp的福,代码很容易就能看懂理清楚。

失败的文件上传测试

/index/controller/upload.php
这是图片上传代码片段,很明显是一个白名单的拦截,文件上传也同样使用了白名单

一次对基于thinkphp开发程序的审计

还有一个音频上传接口,这里直接把文件重命名了,没有中间件解析漏洞配合的话,文件上传漏洞因该是没有的

一次对基于thinkphp开发程序的审计

    

sql注入

全局搜索sql查询语句,如query,$sql,select(,where(等,尝试找一找在where字段直接进行拼接或使用原始sql查询语句的代码,找到两处,一个一个看

第一处

一次对基于thinkphp开发程序的审计

可以看到,传入的参数并不受用户控制,无法注入

第二处

/seller/model/chat.php
/seller/controller/log.php

一次对基于thinkphp开发程序的审计

这个sql语句也是直接拼接,但语句构造过程很复杂,为了偷懒,这里选择直接去看数据库查询日志,看看拼接到最后是个什么查询语句。找到函数调用的接口,路由在/seller/log/getChatLogDetail,发起请求    

一次对基于thinkphp开发程序的审计

查询数据库搜索日志

一次对基于thinkphp开发程序的审计

由于from_id和to_id都被用了两次,而且在构造时还有换行,不太好拼接注释,所以尝试在content位置尝试like型注入。发包

一次对基于thinkphp开发程序的审计

任意文件读取

/seller/controller/words.php
全局搜索file_put_contents和file_get_content,可以看到这里从项目根目录读取文件,路径由words参数传入

一次对基于thinkphp开发程序的审计

构造请求并查看数据库

一次对基于thinkphp开发程序的审计

可以看到,文件内容已经入库

一次对基于thinkphp开发程序的审计

可以通过注入或者进入该页面查看读取到的文件

插件和thinkphp历史漏洞

/public/static/common/js/ueditor
这里使用了ueditor插件,直接访问查看帮助,使用的版本是1.4.3(这个版本只有asp下有漏洞,php无法绕过后缀过滤)。另外thinkphp5.1有一个反序列化漏洞,但全局搜索后未调用unserialize()函数,因此并不能利用这个漏洞。至此,整个审计流程结束(流程本应包含对命令执行函数,文件包含等代码的审计,但由于过程中没有收获,这里就不放出来)。


来源先知社区的小*嘿 师傅

注:如有侵权请联系删除



一次对基于thinkphp开发程序的审计

如需进群技术交流,添加小浪队长

一次对基于thinkphp开发程序的审计

原文始发于微信公众号(衡阳信安):一次对基于thinkphp开发程序的审计

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月19日23:13:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  一次对基于thinkphp开发程序的审计 https://cn-sec.com/archives/1410892.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: