- web127
- web128
- web129
- web130
- web131
- web132
- web133
- web134
- web135
- web136
解答:本题有waf,限制了一些特殊字符。题中有extract,所以是要实现变量覆盖,令ctf_show=ilove36d。 extract可以从数组中将变量导入到当前的符号表,本题限制了中括号,看一下输入字符串是否可行。
本题测试一下,确认?ctf_show=ilove36d
可以覆盖变量ctf_show。
题目中下划线也被限制了,可以用空格绕过。
解答:f1不能有数字和大小写字母。
call_user_func 把第一个参数作为回调函数调用,其余参数是回调函数的参数。
两个call_user_func,第一个函数可以有一个参数,返回的第二个函数是无参数函数。
本题又是一个新的知识点。 gettext():获取的文本框当前输入内容的方法,返回内容。_()
是gettext()函数的简写形式,需要php扩展目录下有php_gettext.dll才能使用。
学习一下:关于php中gettext的用法 需要多语言支持的字符串可以使用gettext函数包装起来,其输出的内容取决于.mo
文件的设置。
?f1=_&f2=phpinfo
测试phpinfo()。
get_defined_vars():返回由所有已定义变量所组成的数组。 当前文件包含flag.php,直接打印$flag
变量。
payload: ?f1=_&f2=get_defined_vars
解答: stripos :查找字符串首次出现的位置(不区分大小写)。 readfile读取文件,$f
里ctfshow不能在首位,可以利用目录穿越。 payload:?f=/ctfshow/../../../var/www/html/flag.php
解答:这题有点意外,最开始正则没看懂,就打算先输入ctfshow试试,直接出flag了。
1)第一个判断。 .+?
表示匹配任意字符一个或则多个。 .*?
表示匹配任意字符0个或多个。
.
匹配除换行符 \n 之外的任何单字符。+
匹配前面的子表达式一次或多次。?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。/i
不区分大小写/s
匹配任何空白字符,包括空格、制表符、换页符等等。
题中整个正则表达式的意思就是,以任意一个或多个字符开头,遇到ctfshow就匹配,不区分大小写,不能有任何空白字符。
也就是说输入的内容里,ctfshow前面不能有字符。
2)第二个判断。stripos函数如果未发现字符串将返回 FALSE。 全等于的条件是必须双方的类型也一样,所以ctfshow在首位返回的0与FLASE不全等。
所以payload-post:f=ctfshow
进一步学习:正则表达式
web131解答:这道题既要求ctfshow不在首位就匹配,又要求有36Dctfshow,非常的矛盾,所以只能找办法突破规则。
正则匹配中对回溯数和嵌套数进行了最大限制。 默认的backtrack_limit(最大回溯数)是100000,recursion_limit(最大嵌套数)是100000。具体可以看一下:深悉正则(pcre)最大回溯/递归限制@Laruence
正则匹配默认是贪婪模式;在量词后面直接加上一个问号?
就是非贪婪模式。非贪婪匹配就是匹配到就结束,匹配尽可能少的字符。 所以如下图可以看到,回溯了2次,嵌套3个。
非贪婪模式容易导致太多回溯。
嵌套太多,可能会造成耗尽栈空间爆栈。
设置payload:最终payload太大放不上来。
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?