實驗吧-once more

解題關鍵知識點:php

ereg函數有兩個漏洞數組

一、00截斷函數

二、當ntf爲數組時它的返回值不是FALSEurl

一、利用第一個漏洞code

ereg()函數用指定的模式搜索一個字符串中指定的字符串,若是匹配成功返回true,不然,則返回false。搜索字母的字符是大小寫敏感的。字符串

函數原型:int ereg(string pattern, string originalstring, [array regs]);原型

ereg()限制password的格式,只能是數字或者字母。但ereg()函數存在NULL截斷漏洞,能夠使用%00繞過驗證。string

例如,once more一題中要求password必須是字母和數字組成,長度小於8,值大於9999999,首先想到科學計數法,使password='1e9',還須要知足另外一個條件含有字符串‘*-*’,這顯然是矛盾的,想到ereg的截斷漏洞便迎刃而解,使password='1e9%00*-*'。class

<?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>';
	}
}
?>

二、利用第二個漏洞搜索

url中參數password爲數組,password[]=1

相關文章
相關標籤/搜索