小结一下最近几天WEB经验

半懂不懂地做出来,总要分析一下

首先这两天的代码审计题给我感觉就是:查函数漏洞

请看这几个例子

1extract变量覆盖
<?php
$flag='xxx';
extract($_GET);
if(isset($shiyan))
{
	$content=trim(file_get_contents($flag));//content=""
	if($shiyan==$content)
	{
		echo'flag{xxx}';
	}
	else
	{
		echo'Oh.no';
	}
}
?>

isset这个函数只是检查变量是否存在,与变量的值无关
file_get_contents()读入文件时若文件不存在,则返回0
所以只要在地址栏输入?shiyan=即可,或者shiyan=&flag也行。

2strcmp比较字符串
<?php
$flag = "flag{xxxxx}";
if (isset($_GET['a'])) 
{
	if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。
//比较两个字符串(区分大小写)
		die('Flag: '.$flag);
	else
		print 'No';
}
?>

strcmp()在5.3版本之前,若比较值不是字符串类型,则return值为0!
所以只要输入?a[]=即可。

3urldecode二次编码绕过
http://123.206.87.240:9009/10.php

<?php
if(eregi("hackerDJ",$_GET[id])) 
{
	echo("not allowed!");
	exit();
}

$_GET[id] = urldecode($_GET[id]);

if($_GET[id] == "hackerDJ")
{
	echo "Access granted!";
	echo "flag";
}
?>

urldecode()解码时“%25”对应的为“%”所以可以通过2次编码绕过第一次,得出flag。

4md5()函数
<?php
error_reporting(0);
$flag = 'flag{test}';
if (isset($_GET['username']) and isset($_GET['password'])) 
{
	if ($_GET['username'] == $_GET['password'])
		print 'Your password can not be your username.';
		
	else if (md5($_GET['username']) === md5($_GET['password']))
		die('Flag: '.$flag);
		
	else
		print 'Invalid password';
}
?>

因为md5函数不能处理数组,所以直接用数组储存不一样的数据就可以绕过md5判断。

5数组返回NULL绕过
<?php$flag = "flag";
if (isset ($_GET['password'])) 
{
	if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
		echo 'You password must be alphanumeric';
		
	else if (strpos ($_GET['password'], '--') !== FALSE)
		die('Flag: ' . $flag);
		
	else echo 'Invalid password';
}
?>

strpos可以查找子字符串位置,无法判断数组,这里又是输入值类型无法判断从而绕过,输入?password[]=aA1(包含大小写字母和数字)即可。

6弱类型整数大小比较绕过
$temp = $_GET['password'];
is_numeric($temp)?die("no numeric"):NULL;
if($temp>1336)
{
	echo $flag;

依旧可以利用数组无法判断的特性绕过,或者可以在末尾加上其他字符,还可以在最后加上%00截断,(is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,引用自https://www.cnblogs.com/GH-D/p/8085676.html)。

php中很多函数都不能处理数组,所以我发现数组真TM好用!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值