您当前的位置: 首页 >  php

九枕

暂无认证

  • 2浏览

    0关注

    42博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctfshow学习记录-web入门(php特性89-98)

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

目录
    • web89
    • web90
    • web91
    • web92
    • web93
    • web94
    • web95
    • web96
    • web97
    • web98

web89

解答: 1)绕过preg_match()。

可以利用数组绕过,因为preg_match只能处理字符串,所以当传入的subject是数组时会返回false。

2)intval()用于获取变量的整数值。 intval()不能用于object和array,否则会产生E_NOTICE错误并返回1。

所以数组可以满足所有限制条件。payload:?num[]=

web90

解答: 1)intval()输入的值,如果是字符串,它返回的内容取决于字符串最左侧的字符。如intval(‘11a0’)=11。

2)我们提交的参数值默认就是字符串类型,所有输入的内容加上一个字母,就可以绕过和满足上述的两个条件限制。

payload:?num=4476a

web91

解答:^$这种的正则匹配,只匹配一行。但是正则匹配/m可以执行多行匹配。 所以第一层条件是多行匹配php,第二层条件是单行匹配,这样就可以用换行符%0a绕过。

payload:?num=%0aphp

web92

解答:弱比较不能等于4476,intval()结果是4476。

可以在数字后加字母,使它变成字符串,满足intval的要求。同时,弱匹配比较时会识别e。 payload:?num=4476e123 (intval也是可以识别e的,但是是在非字符串的形式下。)

web93

解答:过滤了字母,所以二进制(0b??)和十六进制(0x??)不能用,但还有八进制。

==在进行比较的时候,会先将字符串类型转化成相同,再比较。 当数字位于整个字符串的开头时,会转换为前面的数字,其他都会转换为0。 除了e科学计数,其他字母不会被识别,所以不能识别进制转换。

payload : ?num=010574

web94

解答:限制了字符,不能用e绕过了。不能用0开头,对进制做了限制。(但是八进制的限制可以用payload2绕过)

绕过强等于字符串“4476”,可以加小数点绕过。intval是取整并不会影响。 payload1:?num=4476.0

也可以用加号或者空格绕过。加号+的话,url解码会认为是空格,或者输入%2b,解码为+,intval会认为是正数,依旧可以满足条件。空格%20,或者(space)也可以绕过。 payload2:?num=+4476

web95

解答:本题过滤了小数点,所以web94的payload1不能用了。但是payload2可以用。 第二个条件是字符限制,不能十六进制和e;第一个条件是弱等于限制,可以用8进制绕过;第三个条件不能0开头,所以可以用通过加号和空格绕过。 ?num=+010574或者?num=%2b010574或者?num= 010574或者?num=%20010574

web96

解答:字符串匹配,所以可以加上当前目录是./ 绕过,所以我们的payload: u=./flag.php

web97

解答:a和b要传值,不能相等,但是md5要强等于。 md5函数传入数组的返回值都是NULL,所以可以用数组绕过。 payload: a[]=1&b[]=2

web98

解答:这个题目我们解析一下。 1)$_GET?$_GET=&$_POST:'flag'; 三元运算符:条件表达式?表达式1:表达式2=>条件为真,结果是表达式1;条件为假,结果是表达式2。

$_GET 变量是一个数组,内容是由 HTTP的GET 方法发送的变量名称和值,类似于字典。 如果$_GET 变量不为空,则$_GET 变量和$_POST 变量指向同一个地址,即$_POST 变量内容改变,会影响$_GET 变量的内容。如果为空,整个三元表达式的结果为’flag’。就是如果echo这段代码的话,返回结果是flag。

听视频wp,原题是不是打算让$_GET =‘flag’,但是这段代码不对呀,应该把第二个表达式写为$_GET ='flag’才行。

2)$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag'; 如果flag变量值为’flag’,则$_GET 变量和$_COOKIE 变量指向同一个地址;否则返回flag。

3)$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag'; 如果flag变量值为’flag’,则$_GET 变量和$_SERVER 变量指向同一个地址;否则返回flag。

4)highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__); 高亮输出结果。如果HTTP_FLAG变量值为’flag’,输出$flag,否则输出当前文件。

所以目标就是get传参让HTTP_FLAG=flag。 get传参了,势必要执行第一个三元运算的$_GET=&$_POST:,所以 POST也需要传递一个同样的HTTP_FLAG=flag。 因为没有get传参flag,所以中间两个条件都会false,返回结果’flag’,不影响结果。

关注
打赏
1662624000
查看更多评论
立即登录/注册

微信扫码登录

0.0355s