| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> PHP知识库 -> ctfshow php特性 -> 正文阅读 |
|
[PHP知识库]ctfshow php特性 |
web89?这题的逻辑是如果存在$_GET['num'],则用正则表达式匹配$num中的值,如果成功匹配则程序终止于"no no no",否则进行下一步,如果intval($num)有正确的返回值,则输出$flag。 解题思路:该题要求传入的值不能有数字,那我们的话可以利用preg_match的一个漏洞,即无法处理数组,从而进行绕过正则匹配,同时intval函数处理一个数组有正确的返回值,可以达到输出flag的目的。 payload :
或
intval(array())的返回值为0,然而if(0)是不能输出flag的,所以这里的话来个小测试,测试传入一个num[]= NULL,经intval处理后返回的值是什么 ?不难看出,传入一个num[]= ,经过处理后的值为1,所以web89中的if(intval($num))可以正常执行。对于这个,我的理解是num[]= ,也算是传入了值的(传入了空吧),所以经intval()处理后的值为1。 web90这题的话要求传入的num的是十进制值不等于4476,同时intval($num,0)的值全等于4476。所以这里的话我们运用一下intval()函数的特性。 payload:?
web91?写这题的话也发现了一些问题,自己的正则还是不怎么会,所以还得多翻翻全集......正本表达式全集 理解一下这题的逻辑,第一个if多行匹配'php'(只能是'php',不可以是'adsasphp'之类的),如果匹配到则进行下一个if判断;第二个if单行匹配'php',没匹配到则输出flag。em.......那我们这里利用%0a来绕过。 payload:
因为%0a是换行,第一个if匹配多行可以满足条件,第二个if只能匹配第一行,该行不能有php,所以可以输出flag。 解释一下为什么php%0aphp也可以成功,因为我们传入的是%0a,在文件夹的显示(如下图) (图片来自ctfshow_web入门 PHP特性 - upstream_yu - 博客园 (cnblogs.com)) 所以我们传入一个php%0aphp是分为两行,第一行是php CRLF,第二行是php,所以在第二个if处第一行匹配不成功。 查看题目的himt,里面有个关于文件上传的漏洞 Apache HTTPD 换行解析漏洞(CVE-2017-15715)与拓展 利用最新Apache解析漏洞(CVE-2017-15715)绕过上传黑名单 web92刚看到这题就感觉和web90差不多,试了web90的两个payload也可以得到flag
仔细看了一下,原来差别在于弱类型比较 ?这题的话学会一个新的方法,利用e这个特殊字母构造payload绕过
在第一个if弱类型比较,$num中4476e233会当作科学计数法4476*10^233,而在第二个if中,当$base=0时,intval()遇到字母就停止读取(这里看不懂的回头看一下web90,说得很详细了),因此是4476,满足条件从而输出flag。 web93?题目也差不多和web92的一样,第二个if还是弱类型比较,只是在第三个if处多了一个正则匹配/[a-z]/i,意思是匹配a-z的字母且不区分大小写。所以第三个if是判断如果在$num中匹配到a-z的字母(不区分大小写),则程序终止,输出no no no。 第四个if的判断还是熟悉的intval($num,0),要求$num中不能有字母,意味着前几题十六进制的解法不能用,上一题的4476e233的解法也用不了。 所以仔细想想就可以知道,这里还剩下八进制的解法,传入的$num全为数字。 payload:
web94?94的话相较于93多了一个过滤条件,查找0在$num出现的位置,匹配不了返回null,直接传八进制数010574进去是行不通的,因为0不能在首位。 这里可以用+号,url编码,加小数点绕过..... payload:
第一个payload的话4476.01经过intval($num,0)的处理会变成int类型的4476,我们看一下本地调试的结果 ? 剩下几个payload的话,我感觉是经过url解码后的一些不可见字符占据了一个位置,让010574中的第一个0处于第二位,以下是我在本地调试的结果。 web95?95的话转义了. ,用不了4476.01这个payload,但是我们的其它payload还是可以用的...... ? |
|
PHP知识库 最新文章 |
Laravel 下实现 Google 2fa 验证 |
UUCTF WP |
DASCTF10月 web |
XAMPP任意命令执行提升权限漏洞(CVE-2020- |
[GYCTF2020]Easyphp |
iwebsec靶场 代码执行关卡通关笔记 |
多个线程同步执行,多个线程依次执行,多个 |
php 没事记录下常用方法 (TP5.1) |
php之jwt |
2021-09-18 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 15:43:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |