各种绕过

开卷看题

源码审计题

代码分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']); // 对id参数URL解码
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';

// uname和passwd必须存在且不能相同
if (isset($_GET['uname']) and isset($_POST['passwd'])) {
if ($_GET['uname'] == $_POST['passwd'])
print 'passwd can not be uname.';

// uname和passwd的sha1值相同并且id参数值为margin则输出flag
else if (sha1($_GET['uname']) === sha1($_POST['passwd']) & ($_GET['id']=='margin'))
die('Flag: '.$flag);
else
print 'sorry!';
}
?>

总计一下:跟矛盾和备份这两道题神似,本题考察的是不同的数但sha1值相同

注意:uname和passwd的参数值来源,真的是应该去看看眼睛了

解决之道

记得MD5的时候说过PHP散列函数无法处理数组,懂了吧

解决完眼xia和脑子瓦特之后,开始构造payload注入

GET参数:uname[]=1&id=%6D%61%72%67%69%6E

POST参数:passwd[]=2

提交方式:POST

一顿操作猛如虎,提交一下,flag快到碗里来

这???脸疼的厉害,不应该翻车的啊,换个工具试试

我就说嘛,鄙人的思路肯定是对的,BUT用BP为什么不行?

排忧解难

用BP抓一下maxhackbar的包,对比一下终于知道问题在哪了,我是213

后记

基础无小事,记了总是忘,忘了就采坑,疼了还要记