CTF--PHP特性小记(见到及时记录)

PHP弱类型总结+绕过方式

注:是搜集总结的知识点

一.两种比较符号

=====
== 在进行比较的时候,会先将字符串类型转化成相同类型,再进行比较。
=== 在进行比较的时候,会先判断两种字符串的类型是否相等,再进行比较。
如果一个数值和字符串进行比较的时候,会将字符串转换成数值。
看几个具体的例子:
1.

var_dump("admin"==0);//正确

将admin转化成数值,强制转化,由于admin是字符串,转化的结果是0和0相等
2.

var_dump("admin1"==1);//错误

这里是将admin1转化成了0

var_dump("1admin"==1);//正确

这里是将1admin转化成了1
4.

var_dump("0e123456"==0);//正确

这里是将0e123456转化成了0
将0e这类字符串识别为科学技术法的数字,0的无论多少次方都是零,所以相等

注意
当一个字符串被当作一个数值来取值,其结果和类型如下:
如果该字符串没有包含'.','e','E'并且其数值值在整型的范围之内,该字符串被当作int来取值,其他所有情况下都被作为float来取值
该字符串的开始部分决定了它的值,如果该字符串以合法的数值开始,则使用该数值,否则其值为0。

二.MD5绕过(缺陷比较)

原理:通过利用一些MD5加密后是0e开头的,利用上面提到过的0e科学计数法,转化结果还是0

<?php if($_GET['a'] !== $_GET['b']){ if(md5($_GET['a']) == md5($_GET['b'])){ echo "flag"; } } ?>
payload:   /?a=QNKCDZO&b=240610708

搜集到的MD5神奇0e

240610708
0e462097431906509019562988736854

QNKCDZO
0e830400451993494058024219903391 

s878926199a
0e545993274517709034328855841020
  
s155964671a
0e342768416822451524974117254469
  
s214587387a
0e848240448830537924465865611904
  
s214587387a
0e848240448830537924465865611904
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675
  
s1885207154a
0e509367213418206700842008763514
  
s1502113478a
0e861580163291561247404381396064
  
s1885207154a
0e509367213418206700842008763514
  
s1836677006a
0e481036490867661113260034900752
  
s155964671a
0e342768416822451524974117254469
  
s1184209335a
0e072485820392773389523109082030
  
s1665632922a
0e731198061491163073197128363787
  
s1502113478a
0e861580163291561247404381396064
  
s1836677006a
0e481036490867661113260034900752
  
s1091221200a
0e940624217856561557816327384675
  
s155964671a
0e342768416822451524974117254469
  
s1502113478a
0e861580163291561247404381396064
  
s155964671a
0e342768416822451524974117254469
  
s1665632922a
0e731198061491163073197128363787
  
s155964671a
0e342768416822451524974117254469
  
s1091221200a
0e940624217856561557816327384675
  
s1836677006a
0e481036490867661113260034900752
  
s1885207154a
0e509367213418206700842008763514
  
s532378020a
0e220463095855511507588041205815
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675
  
s214587387a
0e848240448830537924465865611904
  
s1502113478a
0e861580163291561247404381396064
  
s1091221200a
0e940624217856561557816327384675
  
s1665632922a
0e731198061491163073197128363787
  
s1885207154a
0e509367213418206700842008763514
  
s1836677006a
0e481036490867661113260034900752
  
s1665632922a
0e731198061491163073197128363787
  
s878926199a
0e545993274517709034328855841020
 
s878926199a
0e545993274517709034328855841020

s155964671a
0e342768416822451524974117254469

s214587387a
0e848240448830537924465865611904

s214587387a
0e848240448830537924465865611904

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s1885207154a
0e509367213418206700842008763514

s1502113478a
0e861580163291561247404381396064

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s155964671a
0e342768416822451524974117254469

s1184209335a
0e072485820392773389523109082030

s1665632922a
0e731198061491163073197128363787

s1502113478a
0e861580163291561247404381396064

s1836677006a
0e481036490867661113260034900752

s1091221200a
0e940624217856561557816327384675

s155964671a
0e342768416822451524974117254469

s1502113478a
0e861580163291561247404381396064

s155964671a
0e342768416822451524974117254469

s1665632922a
0e731198061491163073197128363787

s155964671a
0e342768416822451524974117254469

s1091221200a
0e940624217856561557816327384675

s1836677006a
0e481036490867661113260034900752

s1885207154a
0e509367213418206700842008763514

s532378020a
0e220463095855511507588041205815

s878926199a
0e545993274517709034328855841020

s1091221200a
0e940624217856561557816327384675

s214587387a
0e848240448830537924465865611904

s1502113478a
0e861580163291561247404381396064

s1091221200a
0e940624217856561557816327384675

s1665632922a
0e731198061491163073197128363787

s1885207154a
0e509367213418206700842008763514

s1836677006a
0e481036490867661113260034900752

s1665632922a
0e731198061491163073197128363787

s878926199a
0e545993274517709034328855841020

大佬讲地很详细PHP中MD5的多种绕过!

三.没有数字字母的

作用于过滤了字母数字,需要通过一些方式来绕过对字母数字参数的过滤,达到执行代码的目的。

1.取反绕过

在php位运算符中,有一种运算方式叫做取反,运算符号为^。可以利用的是UTF-8编码的某个汉字,并将其中某个字符取出来,然后取反,根据具体题目可以构造相关的payload。

2.URL编码取反绕过

对想要传入的参数,先进行URL编码再取反
比如传入构造一个phpinfo();

3.异或绕过

原理:PHP里两个字符串异或之后得到的还是一个字符串,有的时候会通过正则过滤这个字符串,不能正常的执行,换一种方式:就是通过找两个不会被正则的范围的两个字符串,进行异或,从而能够达到我们想要的字符串。

字符:?         ASCII码:63           二进制:  0011 1111
字符:~         ASCII码:126          二进制:  0111 1110
异或规则:
1   XOR   0   =   1
0   XOR   1   =   1
0   XOR   0   =   0
1   XOR   1   =   0
上述两个字符异或得到 二进制:  0100 0001
该二进制的十进制也就是:65
对应的ASCII码是:A

重点是如何知道哪两个字符串异或是我们想要的最后的结果(这个还没有搞得清楚,后面会继续)
会继续一直整理,分模块进行归纳,下周加快学习进度。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值