bugku(代码审计 wp)

我这给出的是涉及到的陌生的知识点,结合链接文章中详细的源码和答案
https://blog.csdn.net/xiaorouji/article/details/82292233

extract变量覆盖

在这里插入图片描述
在这里插入图片描述
构造?flag=1&content=1


strcmp比较字符串

题目已经对strcmp函数有了解释:

if (strcmp($_GET[‘a’], $flag) == 0) //如果 str1 小于 str2 返回 < 0;
如果
str1大于 str2返回 > 0;如果两者相等,返回 0。 //比较两个字符串(区分大小写)

这里利用strcmp函数不能比较函数 传入参数 ?a[]=0. flag出来


urldecode二次编码绕过

文章写的详细了,传入后url编码进行解码,decode再解码一次
直接传入url编码绕过检测,解码后符合if条件,得出flag。
比如构造%2528
%25在第一次解码后为%,构成了%61,再次解码得到a。
?id=h%2561ackerDJ

eregi函数就是在字符串中进行匹配,如果直接上传违规参数,就退出

md5()函数

又是典型的md5函数漏洞,不过这里有个坑就是它的md5的判断是三个等号,所以0e开头不能绕过了,只能用数组

直接构造两个不同的数组
  ?username[]=111&password[]=222

如果是==号则构造

md5('240610708') 
//0e462097431906509019562988736854.
md5('QNKCDZO') 
//0e830400451993494058024219903391

数组NULL绕过

strpos函数
查找 “php” 在字符串中第一次出现的位置:(区分大小写)

<?php
echo strpos("You love php, I love php too!","php");
?>

相关函数:
strrpos() - 查找字符串在另一字符串中最后一次出现的位置(区分大小写)
stripos() - 查找字符串在另一字符串中第一次出现的位置(不区分大小写)
strripos() - 查找字符串在另一字符串中最后一次出现的位置(不区分大小写)
构造空数组绕过
password[1]=4


弱类型整数大小比较绕过

is_numeric:检测是否时数字
用%00来绕过,数字检测


sha()函数比较绕过

sha1() 函数用于计算字符串的 SHA-1 散列。
数组绕过;
构造?name[]=11&password[]=222


md5加密相等绕过

弱类型,上传数组


十六进制与数字比较

首先分析代码,函数要求变量 t e m p 不 能 存 在 1   9 之 间 的 数 字 , 最 后 , 又 要 求 temp不能存在1~9之间的数字, 最后,又要求 temp1 9temp=3735929054;
这本来是自相矛盾的,但php在转码时会把16进制转化为十进制.于是把
3735929054转换成16进制为0xdeadc0de,记得带上0x;


ereg正则%00截断

https://blog.csdn.net/dyw_666666/article/details/85388125
这里写的很清楚了
ps:
方法二使用了科学技计数法,来解决位数和大小的冲突
1e5 表示10的5次方
当然也可以上传一个数组 函数处理不了就判断为null,null==false成立

猜你喜欢

转载自blog.csdn.net/qq_42812036/article/details/90644807