[MRCTF2020]Ez_bypass1
1.不管是啥题目我们先进去看一下

2.WDF,这啥啊,一大坨代码。别慌,这时候你一慌就正好让出题人正中靶心了。我们先把这串东西复制到vscode。按照格式来分一下

3.这样是不是看得懂一些了?可以看到。这里面有明显的if和else逻辑判断,那这题大概率就是一题代码审计题目了。我们一起一行行看下去。
I put something in F12 for you include 'flag.php';
这句话的意思是,我在f12也就是源代码里面发现了东西。然后运行了flag,php。也就是把flag.php代码显示在了页面上。那这句话我可以先忽略掉不去看,我们已经得到了信息知道了下面的是flag.php的代码,说明题目的答案就藏在下面这些代码里面。
4.$flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx}';这似乎是一个flag的示例?看不懂,先不管。继续
5.这行代码里有isset()函数,这个函数是用来干嘛的呢?不知道,我们AI一下,哦,原来是用于检测变量是否已设置并且不为 NULL。那这里面有两个变量,一个是gg一个是id。他的作用就是检查这两个变量。
if(isset($_GET['gg']) && isset($_GET['id'])) {
6.继续看。这段代码的意思是从URL中获取id和gg的值。这个很好理解
{ $id=$_GET['id']; $gg=$_GET['gg'];
7.然后后面就是我们的第一个if循环。这里面有什么要素呢?我们分析一下,md5()这个是老朋友了。就是把我们上面从URL里面获取到的id和gg的值转换成md5的哈希值。这里还有&&意思是并且的意思。!==的意思则是id和gg的值不能相等。如果条件成立,则显示我们过第一关。
if (md5($id) === md5($gg) && $id !== $gg) { echo 'You got the first step';
8.那我们要想过第一关,就要传两个值,他们值要不同,但是md5值要相等。这个简单啊,我们之前做到一题也是这样的。我们使用数组绕过。
?id[]=1&gg[]=2
9.我们先继续看下去,后面还有两个if,这是个嵌套循环。这里还是个isset意思是检查有没有passd函数
if(isset($_POST['passwd'])) {
10.这里是获取post提交的passwd参数
$passwd = $_POST['passwd'];
11.然后下一个if循环。is_numeric()的意思是如果变量是数字或数字字符串,返回 true。但是这里有感叹号。说明要是flase才行。
if (!is_numeric($passwd)) {
12.紧接着下一个循环。这个循环结构就比较明了了。检查passwd的值是不是1234567
然后显示过关,给我们flag,然后结束代码执行。下面的else可以不用看。我们已经知道了过关条件
if($passwd==1234567)
{ echo 'Good Job!';
highlight_file('flag.php');
die('By Retr_0'); }
13.那我们开始按照得到的信息闯关。
第一关,我们使用数组绕过。这个不说了。
但是后面说到需要post传参,那我们把过关条件加上一条。需要post传参方式
然后因为is_numeric()的关系,我们的passwd不能是数字或数字字符串。然后值还要是1234567
14.那我们整理一下
1.数字绕过
2.post传参passwd
3.passwd不能是数字或数字字符串
4.值要是1234567
15.开始构造payload。由于需要更改get为post,我们使用hackbar进行post传参。
所以URL中输入?id[]=1&gg[]=2,然后hackbar中输入passwd=1234567a

16.像这样,这里输入1234567a是因为最后的if是弱比较
当 PHP 使用 == 比较一个字符串和一个整数时,它会尝试将字符串强制转换为整数。
转换规则: PHP 会从头开始读取字符串,只要遇到数字就继续,一旦遇到非数字字符(如 a),就停止读取,并将前面读取到的数字部分作为转换结果。
因为带了一个a所以可以通过is_numeric(),至此全部通过得到flag
小记:这是一题纯php代码审计题目,搞清楚以后对面前的知识有了一定的巩固,至少量变形成质变,现在至少能看得懂一些php代码了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)