Once More--实验吧

http://www.shiyanbar.com/ctf/1805

啊拉?又是php审计。已经想吐了。
hint:ereg()函数有漏洞哩;从小老师就说要用科学的方法来算数。
格式:CTF{}
解题链接: http://ctf5.shiyanbar.com/web/more.php


解:
源码审计:
有提示:1.利用ereg()漏洞%00截断
             2.利用科学计算法

<?php
if (isset ($_GET['password'])) {
	if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)
	{
		echo '<p>You password must be alphanumeric</p>';
	}
	else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)
	{
		if (strpos ($_GET['password'], '*-*') !== FALSE)
		{
			die('Flag: ' . $flag);
		}
		else
		{
			echo('<p>*-* have not been found</p>');
		}
	}
	else
	{
		echo '<p>Invalid password</p>';
	}
}
?>
分析:
1.ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE
===类型恒等于
== 和 != 比较若类型不同,先偿试转换类型,再作值比较,最后返回值比较结果 。

=== 和 !== 只有在相同类型下,才会比较其值。

定义:返回 pattern 的匹配次数。 它的值将是0次(不匹配)或1次
意思:只能输入字符和数字


2.strlen($_GET['password']) < 8 && $_GET['password'] > 9999999
意思:字符串长度小于8,值大于9999999,


3.strpos ($_GET['password'], '*-*') !== FALSE
定义:strpos — 查找字符串首次出现的位置
意思:*-*要出现
4.原因:%00算一个字符,,,,,,
填入1e8%00*-*(可以)
填入1e9%00*-*(可以)
填入1e10%00*-*(不行)


5.在地址栏输入
自己尝试,不然把%00解析为%2500,因为%===》%25




最详细的url表见链接:http://blog.csdn.net/asli33/article/details/6740611



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值