您当前的位置: 首页 >  php

九枕

暂无认证

  • 2浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctfshow学习记录-web入门(php特性127-136)

九枕 发布时间:2022-07-26 15:00:00 ,浏览量:2

目录
    • web127
    • web128
    • web129
    • web130
    • web131
    • web132
    • web133
    • web134
    • web135
    • web136

web127

解答:本题有waf,限制了一些特殊字符。题中有extract,所以是要实现变量覆盖,令ctf_show=ilove36d。 extract可以从数组中将变量导入到当前的符号表,本题限制了中括号,看一下输入字符串是否可行。

本题测试一下,确认?ctf_show=ilove36d可以覆盖变量ctf_show。

在这里插入图片描述

题目中下划线也被限制了,可以用空格绕过。

在这里插入图片描述

web128

解答: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

在这里插入图片描述

web129

解答: stripos :查找字符串首次出现的位置(不区分大小写)。 readfile读取文件,$f里ctfshow不能在首位,可以利用目录穿越。 payload:?f=/ctfshow/../../../var/www/html/flag.php

web130

解答:这题有点意外,最开始正则没看懂,就打算先输入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太大放不上来。

            
关注
打赏
1662624000
查看更多评论
0.0449s