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);

现在目标就是拼接除payloadscandir(/)来搜索目录。首先因为/在黑名单中,所以需要用其他方式去得出,可以使用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相关推荐

  1. BUUCTF学习笔记:[Misc] 2022DASCTF MAY

    1.不懂PCB的厨师不是好黑客: 下载压缩得到文件包,通过题目可以知道跟PCB有关.找到PCB文件包打开是一个文件后缀名为epcb的文件.可以去下载一个叫"嘉立创"的软件,就可以打 ...

  2. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  3. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  5. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  6. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  7. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  8. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  9. 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 ...

  10. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

最新文章

  1. Python回顾与整理12:执行环境
  2. vSphere+Openfiler备忘录
  3. 接上一篇Ansible和celery的结合,在celery的tasks.py文件里为了实现并发不阻塞的需求,用到了多进程
  4. 【手写系列】纯手写实现一个高可用的RPC
  5. 仿 小米运动_小米有品上架“黑科技”床垫,让你睡在“空气”上,改变睡眠体验...
  6. 如何获取元素与当前可视区域顶部的距离
  7. C++拷贝构造函数调用时机分析
  8. Python多线程编程基础1:为什么要使用线程
  9. matlab 符号表,MATLAB——matlab特殊符号表【转载】
  10. 像excel一样规律填充(二)
  11. PIM SM建立SPT树过程与实验
  12. java开发web应用开发,Java Web应用开发概述
  13. 单例模式中的线程安全问题
  14. 计算机专业实习日记,计算机专业实习日记精选
  15. 【HAVENT原创】Spring Boot + Kafka 消息日志开发
  16. oracle crm系统叫什么,常用CRM软件有哪些?
  17. 什么牌子的蓝牙耳机耐用?类似airpods pro的降噪耳机推荐
  18. 向DPMFoam或MPPICFoam求解器中添加源项
  19. 会议邀请〡第六届全国高校电子信息类课程教学研讨会邀请函
  20. [电池]设置-电池-上次充满电时间计算

热门文章

  1. 虚拟机VMware下载与安装教程(windows)
  2. 嵌入式系统开发流程是怎样的?
  3. Linux下安装MySQL、安装注意事项以及安装问题解决等(以腾讯云服务为主)
  4. 查重有风险,小心论文被买卖!——iThenticate官方论文查重系统登录中国!
  5. catia 二次开发:环境变量路径,检查路径存在,关闭文件,对象为空,获取pad对象,err,part的product,全局变量,常量,SystemService,input,选择文件 时间,函数调用
  6. 公安部网络安全保卫局郭启全总工:《从实战出发,落实重要措施,保卫国家关键信息基础设施和大数据安全》
  7. 隐藏百度地图logo
  8. 小学教训计算机培训的简单内容,小学计算机教育随笔
  9. eas bos编码重复
  10. 图像算法---头发检测算法研究