第53天-代码审计-TP5 框架及无框架变量覆盖反序列化(待续)
思维导图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PRQXubax-1650602498323)(image53/0.png)]
漏洞关键字:
SQL 注入:
select insert update mysql_query mysqli 等
文件上传:
$_FILES,type="file",上传,move_uploaded_file()等
XSS 跨站:
print print_r echo sprintf die var_dump var_export 等
文件包含:
include include_once require require_once 等
代码执行:
eval assert preg_replace call_user_func call_user_func_array 等
命令执行:
system exec shell_exec `` passthru pcntl_exec popen proc_open
变量覆盖:
extract() parse_str() importrequestvariables() $$等
反序列化:
serialize() unserialize() __construct __destruct 等
其他漏洞:
unlink() file_get_contents() show_source() file() fopen()等
通用关键字:
$_GET,$_POST,$_REQUEST,$_FILES,$_SERVER 等
功能点或关键字分析可能存在漏洞
抓包或搜索关键字找到代码出处及对应文件
追踪过滤或接受的数据函数,寻找触发此函数或代码的地方进行触发测试
演示案例:
Metinfo-无框架-变量覆盖-自动审计或搜索
#变量覆盖配合文件包含实现任意文件包含
自动审计或搜索关键字找到文件及代码段,全局配置文件
搜索或访问触发全局配置文件配合手写代码测试变量覆盖
配合文件包含漏洞覆盖指定文件实现文件包含攻击获取权限
追踪$module 变量出处文件,然后分析如何覆盖它达到目的
Payload:/about/index.php?fmodule=7&module=1.txt
变量覆盖文件导入Seay后可以用“自动审计”对程序进行一个简单的分析,其他工具也有该功能自动审计提示“/include/common.inc.php”中有“$$”可能存在变量覆盖漏洞,从目录和文件名推断该文件应该是配置文件变量覆盖漏洞一般先看配置型文件,因为配置型文件会被其他文件包含、使用,有利于排查漏洞在“/include/common.inc.php”的一处遍历中,将数组“array(‘_COOKIE’,’_POST’,’_GET’)”的键值依次赋给“$_request”,比如“$_request”等于“_COOKIE”,那么“$$_request”也就等于“$_COOKIE”上述函数可以接收参数的键值,使变量名等于参数名,导致变量覆盖,换言之,该函数可以接收对任意变量的赋值所有包含该代码的页面都存在变量覆盖漏洞,只需再找到可控变量就可以利用漏洞这里选择配合文件包含漏洞进行利用,查找关键字“include_once”,发现文件“/about/index.php”存在可控变量“$module”查看代码发现“/about/index.php”包含“/include/module.php”,该文件又包含/include/common.inc.php”,漏洞存在搜索可控变量“$module”,了解到控制该变量需要fmodule=7,构建Payload“192.168.0.101.9009/about/index.php?fmodule=7&module=1.txt”后续只需要上传一个任意格式的后门文件代替“1.txt”即可
phpmydmin-无框架-反序列化-自动审计或搜索
#反序列化
自动审计或搜索关键字找到文件及代码段
__wakeup() //使用 unserialize 时触发
__sleep() //使用 serialize 时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用 isset()或 empty()触发
__unset() //在不可访问的属性上使用 unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发
找到__wakeup()代码段,代码段调用函数中存在 eval 等函数操作,可调式 load
构造 getSource()利用 Payload,实现 file_get_contents 函数配合 eval 执行
Payload:action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"d:/test.txt";}
搜索关键字“unserialize”,发现“set.php”使用了该函数,使用unserialize()时会自动触发对象的__wakeup()查看代码发现“set.php”创建了一个“$PMA_Config”对象,找到对象的声明,再找到对象的“__wakeup()”方法读代码发现“__wakeup()”下的“load()”函数使用了“eval()”“file_get_contents()”函数,存在文件读取操作为了触发反序列化漏洞需要访问set.php,并POST“configuration”“action”两个参数,其中“action”不等于“clear”,“configuration”则等于序列化的“$PMA_Config”对象,对象的值为“test.txt”构建Payload:“127.0.0.1:8081/phpmyadmin2/scripts/setup.php”Post“action=test&configuration=O:10:"PMA_Config":1:{s:6:"source",s:11:"d:/test.txt";}”将test.txt替换为需要的文件,可以配合其他漏洞利用该漏洞
Thinkphp5-有框架-搭建使用入口访问调试 SQL 等
#Thinkphp5 简要知识点
入口文件,调试模式,访问路由,访问对应,内置安全等
测试访问不同方法名,不同文件不同方法名
测试常规写法 SQL 注入,TP5 规定写法 SQL 注入
现在TP5最为常见,以前则是3.23使用PHPstudy搭建TP5时,网站目录指向public文件夹搭建好TP5打开网页会显示“:) ThinkPHP V5”入口文件位于“public/index.php”,默认为“APPlication”,可以修改,通过修改“APP_PATH”的值实现URL访问格式“http://domainName/index.php/模块/控制器/操作”,其中“模块”指目录名,“控制器”指PHP文件名,“操作”指函数名地址中的“index.php”可加可不加“APPlication/ index/controller”目录下,有默认自带测试页面“Index.php”,访问地址为“http://domainName/index.php/index/index/index”,“controller”未体现在地址中通过GET传参x=1,可以是“地址/x/1”,也可以是“地址?x=1”访问数据库除了一般的写法外,还有一种写法“db(‘users’)->where(‘id’,$id)->select();”,其效果等于“$sql=”select * from injection.users where id=$id”;”,但是Seay无法监控其SQL语句,该写法也可以避免一部分SQL注入调试模式开启:打开“APPlication/config.php”,将“应用调试模式”和“应用Trace”都改为“true”,再次打开网站,右下角会有调试模式开关,可以监控SQL语句
TP漏洞的两点方向
Thinkphp的写法:查找这个版本有无漏洞
自定义的写法:常规的漏洞挖掘
涉及资源:
ThinkPHP5.1完全开发手册(PDF版)
TP5.0手册(PDF版)
ThinkPHP-Vuln(关于ThinkPHP框架的历史漏洞分析集合)
第53天-代码审计-TP5 框架及无框架变量覆盖反序列化(待续)相关推荐
- java无框架_从框架到无框架[关闭]
我完全了解你的感受 . 我在4〜5年前开始使用PHP(我来自Delphi,lol),并开始使用纯PHP . 我所拥有的是"CMS面板之类",它只读取所有表格字段并创建表格 . 在某 ...
- 【代码审计-PHP】基于Thinkphp框架开发的
前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...
- ICLR 2020 | “同步平均教学”框架为无监督学习提供更鲁棒的伪标签
©PaperWeekly · 作者|葛艺潇 学校|香港中文大学博士生 研究方向|图像检索.图像生成等 本文介绍一篇由港中文发表于 ICLR 2020 的论文 Mutual Mean-Teaching: ...
- 开发无框架单页面应用 — 老码农的祖传秘方
什么是单页面应用(SPA)? 维基百科上的描述是这样的: JavaScript 1 2 3 "A single-page application (SPA), is a web applic ...
- qt禁止拖动_[Qt]QMdiArea,无框架窗口的拖动
0:QMdiArea中添加子窗口后,想固定or调整窗口的大小 需要在addSubWindow()函数调用后返回子窗口的指针,然后再设置子窗口的大小 注意设置imagelabel的大小是没有效果的,im ...
- 【代码审计-JAVA】基于javaweb框架开发的
前言: 介绍: 博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章). 殊荣:CSDN网络安全领域优质创作者,2022年双十一业务安全保卫战-某厂第一名,某厂特邀数字业务安全研究员,edus ...
- java搭建安卓服务器_无框架完整搭建安卓app及其服务端(一)
技术背景: 我的一个项目做的的是图片处理,用 python 实现图片处理的核心功能后,想部署到安卓app中,但是对于一个对安卓和服务器都一知半解的小白来说要现学的东西太多了. 而实际上,我们的项目要求 ...
- 无框架实现基本人工神经网络对MNIST数据集的识别
学长给的作业,但是在搜索的时候发现好像没有很多已有的资料是在做无框架实现人工神经网络的,而对于MNIST的识别也是使用Tensorflow居多.做出来的是比较差的模型,没有进行正则化,然后在1000次 ...
- [一个无框架的javaweb demo]番荒之冢 --番剧灯塔站
文章目录 番荒之冢 --番剧灯塔站 理念 大致设计 权限分配 番剧信息 用户/管理员信息 邮箱正则匹配 URL正则匹配 留言信息 数据库设计 user animation comment favora ...
- 游戏服务器框架升级-无入侵式代理解决方案
框架升级的目的 主要为了提高服务器的整体承载能力以及游戏的体验. 框架升级遇到的主要障碍 主要遇到的困难,早期最原始的方案,就是直接进行业务代码切割,但对于一个线上 运营了多年的项目,系统模块耦合得非 ...
最新文章
- AI一分钟 | 阿里与南洋理工成立AI联合研究院;传蔚来汽车拟赴美IPO,融资20亿美元
- android发送短信
- matlab朴素贝叶斯手写数字识别_TensorFlow手写数字识别(一)
- 【转载】使用tf.py_func函数增加Tensorflow程序的灵活性
- ReSIProcate环境搭建
- 将一个类改成线程_看了这个有趣的例子,相信你就秒懂多线程同步了
- pixel 更新系统
- 新gre考试用什么复习资料?
- 台式linux系统安装,LINUX安装方法
- ❤️【独家】挑战全网最通俗易懂的神经网络的表达能力解释
- Python网页编程(CGI)
- 程序猿的24个段子:栈和队列的区别是啥?
- hbuilder发生了错误请参阅日志文件1545838571032
- NET Framework Cleanup Tool
- 2014年站群风云录盘点
- ifconfig命令找不到
- 28、无界资本:互联网+时代的资本重生之路
- 扫雷小游戏 - C语言
- 网箱补网水下机器人电控调试日志-温湿度,PH值传感器串口接收-Day2
- 从沙盒开始学习Cesium(持续更新)
热门文章
- 比较JPG、PNG、GIF、BMP图片格式
- Greenplum Python工具库gpload学习——gpload类
- java实现区块链_用Java实现一个简单的区块链
- 阿里云服务器使用-1-可以通过浏览器访问阿里云提供的ip地址
- html关键技术包括,物联网的关键技术包括哪些
- linux清除系统垃圾文件
- c语言第五章函数课后答案,C语言程序设计(第2版) 刘克威,张凌晓著 习题答案-第五章...
- MySql基础篇之SQL语句(DDL、DML、DQL、RCL)
- 基于.net5.0常用开源组件Xman
- 渐近记号Θ、Ο、o、Ω、ω详解