首页 > 编程语言 >php常见绕过

php常见绕过

时间:2023-01-15 01:22:05浏览次数:29  
标签:00% 常见 echo 绕过 php 95% md5

==弱比较

<?php
if (isset($_POST['a']) and isset($_POST['b'])) {
	if ($_POST['a'] != $_POST['b']) {
		if (md5($_POST['a']) == md5($_POST['b']))
			echo 'flag';
		else
			echo 'you are wrong';
	}
else
    echo "请输入不同的a,b值";
}

payload1-传数组

a[]=111&b[]=222

payload2-传入两个md5加密后是0e开头的字符串(字符串必须是纯数字)

a=s878926199a&b=s155964671a

===强比较

除了值之外,两边类型也必须相等

$a=1;
$a==="1";	//flase
$a=="1";	//true
<?php
if (isset($_POST['a']) and isset($_POST['b'])) {
	if ($_POST['a'] != $_POST['b']) {
		if (md5($_POST['a']) === md5($_POST['b']))
			echo 'flag';
		else
			echo 'you are wrong';
	}
else
    echo "请输入不同的a,b值";
}
if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {
    echo `$cmd`;
} else {
    echo ("nonono");
}	//这种只能使用payload2

payload1-传数组

a[]=111&b[]=222

payload2-用md5碰撞,传入两个md5加密后结果相同的字符串(需要在bp中传参,hackbar中涉及自动编码问题不可行)

//因为有不可见字符,已用urlencode加密
1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A3njn%FD%1A%CB%3A%29Wr%02En%CE%89%9A%E3%8EF%F1%BE%E9%EE3%0E%82%2A%95%23%0D%FA%CE%1C%F2%C4P%C2%B7s%0F%C8t%F28%FAU%AD%2C%EB%1D%D8%D2%00%8C%3B%FCN%C9b4%DB%AC%17%A8%BF%3Fh%84i%F4%1E%B5Q%7B%FC%B9RuJ%60%B4%0D7%F9%F9%00%1E%C1%1B%16%C9M%2A%7D%B2%BBoW%02%7D%8F%7F%C0qT%D0%CF%3A%9DFH%F1%25%AC%DF%FA%C4G%27uW%CFNB%E7%EF%B0

1%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%A3njn%FD%1A%CB%3A%29Wr%02En%CE%89%9A%E3%8E%C6%F1%BE%E9%EE3%0E%82%2A%95%23%0D%FA%CE%1C%F2%C4P%C2%B7s%0F%C8t%F28zV%AD%2C%EB%1D%D8%D2%00%8C%3B%FCN%C9%E24%DB%AC%17%A8%BF%3Fh%84i%F4%1E%B5Q%7B%FC%B9RuJ%60%B4%0D%B7%F9%F9%00%1E%C1%1B%16%C9M%2A%7D%B2%BBoW%02%7D%8F%7F%C0qT%D0%CF%3A%1DFH%F1%25%AC%DF%FA%C4G%27uW%CF%CEB%E7%EF%B0
a=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2&b=%4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

$c==md5($c)

payload-本身弱比较

c=0e215962017
//0e215962017的md5值为0e291242476940776845150308577824

strcmp

strcmp($a,$b) 比较两个字符串是否相等,相等返回0,出错也返回0,因此传入数组使其出错

if(!strcmp($a, $flag)){
	echo $flag;
}

payload

a[]=1

假如sql中查询语句为select * from 'admin' where password=md5($pass,true)

mysql会把hex当ascii解释,因此如果某个字符串的md5开头为`'or'数字`格式,就可以绕过验证
ffifdyop被md5加密后为:'or'6É]™é!r,ùíb

数组溢出

if($array[++$c]=1){ 
	if($array[]=1){ 
		echo "nonono"; 
	}
    echo "success";
}
// 两条均为赋值语句,要让array数组中下标为 $c+1 赋值成功,下标为 $c+2 赋值失败
// 利用数组溢出,让$c+2时刚好溢出,PHP32位最大值2147483647,64位最大值为9223372036854775807
// 因此让$c=9223372036854775806(以64位为例)

intval绕过(科学计数法)

if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
        echo "success.</br>";
    }else{
        die("no");
    }
}else{
    die("no");
} 
// 利用科学计数法绕过,intval('1e4')为1,而intval('1e4'+1)为10001
// 因此让$num=1e4(或者'1e4')

弱类型整数大小比较绕过

$temp = $_GET['password'];
is_numeric($temp)?die("no numeric"):NULL;
if($temp>1336){
echo $flag;
}
// 用非数字弱类型绕过:password=1337a
// 或者传递数组:password[]=1

_检测绕过 + preg_match绕过

$query = $_SERVER['QUERY_STRING'];

 if( substr_count($query, '_') !== 0 || substr_count($query, '%5f') != 0 ){
    die('Y0u are So cutE!');
}
 if($_GET['b_u_p_t'] !== '23333' && preg_match('/^23333$/', $_GET['b_u_p_t'])){
    echo "you are going to the next ~";
}
// 第一个点:需要传 b_u_p_t 变量,但是传递的变量又不能包括_
// 可以用 空格( )、加号(+)、小数点(.)、或者它们的url编码绕过
// 第二个点:传入的参数不能为23333但是又必须被正则头尾匹配
// 利用换行符%0a绕过
// payload:b+u+p+t=23333%0a

额外补充:

http://localhost/aaa/index.php?p=222&q=333
$_SERVER['QUERY_STRING'] = "p=222&q=333";
$_SERVER['REQUEST_URI']= "/aaa/index.php?p=222&q=333";
$_SERVER['SCRIPT_NAME']= "/aaa/index.php";
$_SERVER['PHP_SELF']= "/aaa/index.php";
0e开头MD5值小结
sosei3f
0ea0851992f2e29b
QNKCDZO
0e830400451993494058024219903391
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469

标签:00%,常见,echo,绕过,php,95%,md5
From: https://www.cnblogs.com/s1mh0/p/17052942.html

相关文章

  • php file_put_contents不能写入问题
    以下各种原因都可能导致file_put_contents写入失败一、权限问题没有文件、目录权限二、目标目录不存在三、php.ini中open_basedir进行了限制open_basedir可将用户访......
  • PHP实现动态修改.env文件配置(适用于任何框架)
    /***@function动态的设置env文件中某项配置值*@param$env_pathstringenv文件路径*@param$keystring配置项*@param$valst......
  • [VueJsDev] 基础知识 - 常见编码集
    常用编码集:::details目录目录​常用编码集​​​Part.1:Unicode编码​​​​Part.2:ASCII编码​​​​Part.3:HTML实体名称​​​​Part.4:UTF8编码​​​​......
  • php特性_攻击姿势汇总
    php特性intval函数漏洞include("flag.php");highlight_file(__FILE__);if(isset($_GET['num'])){$num=$_GET['num'];if(preg_match("/[0-9]/",$num)){......
  • PHP后门反弹演示
    准备一台kali虚拟机一台win11物理机phpstudy开启Nginx和Mysqlphpstudy中已经搭建好DVWA靶场DVWA靶场的安全等级调整值low​注意:需要将杀毒软件个关了,否则有提示,黑......
  • 最常见的网络安全热门面试题合集,你答对了吗?
    网络安全是当下非常热门的行业,地位高、薪资高、前景好、需求大、岗位多,因此成为很多小伙伴转行学习的首选。而说起安全行业,很多小伙伴肯定最关注的就是面试问题了,网络安......
  • php 将二维数组处理成以某一列为key,某一列为value的一维数组
    $list=[0=>['id'=>1001,'name'=>'张三'],1=>['id'=>2091,'name'=>'李四']];array_combine(arr......
  • 使用vscode调试PHP底层C源码
    使用vscode调试PHP底层C源码一直想着有机会调试一下php底层代码来着,这周正好心血来潮,就跟着教程配置了一下。本篇文章是基于macOS,可能在编译php源码之前的步骤对使用windo......
  • MD5简述及常见解密网址推荐
    什么是md5MD5(Message-DigestAlgorithm5)(信息-摘要算法5),一种被广泛使用的[密码散列函数](https://baike.baidu.com/item/密码散列函数/14937715?fromModule=lemma_in......
  • 初识PHP(2):语法和变量创建
    PHP脚本文件在服务器上执行,然后将结果以HTML的形式发送回浏览器。PHP语法PHP文件通常会包含HTML代码和PHP代码;而PHP作为脚本代码,可以存在于文件任意的位置,只需要注明......