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


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’,不影响结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值