PHP花式绕过大全( 二 )


 
例如:python md5Crack.py “0e" 0
 
将产生MD5值为0e开头的字符串 。
 
注:这个脚本我本地尝试好像有问题,具体问题有时间研究一下再补上 。
 
3.MD4 绕过(来自强网杯2020) 
$_GET["hash1"] != hash("md4", $_GET["hash1"]) 
例子 0e251288019
 
md4计算后为
0e874956163641961271069404332409
 
参考网上的例子改了一个简易的python爆破脚本,就是效率真的低到离谱
 
y1ng神还有高级脚本,感兴趣的可以自己去看看2020第四届“强网杯”全国网络安全挑战赛初赛Writeup – 颖奇L'Amore
https://www.gem-love.com/ctf/2576.html#Funhash
 
没研究透的我就不贴了 。
 
import hashlibfor i in range(0,10**40):i='0e'+str(i)md4=hashlib.new('md4', i.encode()).hexdigest()if md4[:2]=='0e' and md4[2:].isdigit():print('num:{},md4:{} '.format(i,md4))break#需要在python3环境下运行,不然无法执行  
4.strip_tags() 
这个函数用于去除字符串中的 HTML 标签,正常来说确实没啥问题 。
 
但是却在ctf中一些绕过中存在 。(出自roarctf2019 simple_upload)
 
thinkphp原生代码中的upload()上传功能,会对上传的文件名执行该函数 。
 
利用该方法可以进行前端绕过 。
 
当php进行上传文件后缀验证,过滤.php时 。
 
一般情况下诸如 1.php是无法上传上去的,但是此处可以通过 构造文件名为 1.<a>php绕过该验证 。
 
文件上传后不满足.php绕过过滤,但是在tp的原生上传函数被调用是<a>被去除,文件就会被以php格式上传 。
 
注:此处的html可以为任意html标签
 
5.assert() 
这个函数是php的断言函数,用来判断一个表达式是否成立 。返回true or false 。
 
注:assert执行的字符串包含的php语句如果有多条,只会执行第一条 。
 
该表达式会被当做php函数来执行,相当于eval()
 
在ctf中该函数也有一定的可利用性,如xctf中的一题
 
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!"); 

PHP花式绕过大全

文章插图
 
$file为用户传入的字符串,这里构造file=').phpinfo();//
 
此时语句变成了assert("strpos('').phpinfo();// ===false" ) or die (" ")
 
相当于 assert("strpos('').phpinfo();" )
 
phpinfo()就被注入进去并执行了 。
 
注:这里用到了php的一个特性,那就是 .连接符,
 
读者可以自行尝试assert("ehco(123);phpinfo();")和assert("ehco(123).phpinfo();")运行起来的区别 。
 
6.反序列化相关知识点 
1.__toString() 
触发条件时对象被当作字符串调用时就会执行 。
 
需要指出的是在 PHP 5.2.0 之前,__toString() 方法只有在直接使用于 echo 或 print 时才能生效 。PHP 5.2.0 之后,则可以在任何字符串环境生效(例如通过 printf(),使用 


推荐阅读