攻防世界:mfw --------assert() 闭合后的任意代码执行

一.学到的知识点:

  1. bool or die() 当 前面的 为真的时候,后面的就不执行了
  2. assert()语法 。的知识点如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。跟eval()类似, 不过eval($assertion)只是执行符合php编码规范的$code_str
    assert(mixed $assertion, $exception) // 返回值为bool型
    assert()会检查 assertion,并在结果为false的时候采取适当的行动。
  3. 自己的感觉把,就是assert()也是命令执行函数,但是要求比eval的低,只要里面有PHP的代码,然后动一动就能够执行了,详情可以看下面的
  4. 不足:。不够细心,没有研究透assert函数,并且刚开始没有想到去闭合strops这个函数,闭合后使strops这个函数依旧可以发挥作用。

讲真的没看懂是什么意思, 我这里一演示,就明白了,

第一次实验,感觉他和eval很像,能够执行任意命令
在这里插入图片描述

那么这句话, 当assertion结果为false的情况采取行动又是什么意思呢?

这里assertion为 false 也执行了,为true的时候更不用说,也执行,,,

在这里插入图片描述那么这就感觉像一个eval一样, 但是要求比eval更低一点,eval里面必须是严格的PHP代码才能够执行,
但是这个assert()呢,只需要这个字符串里面有PHP的代码就好了!!!
在这里插入图片描述

这是我自己的猜测,网上没有找到。

二、我的做题思路

git 得到源码, 然后看index.php

<?php

if (isset($_GET['page'])) {
    
    
	$page = $_GET['page'];
} else {
    
    
	$page = "home";
}

$file = "templates/" . $page . ".php";

// I heard '..' is dangerous!
assert("strpos('$file', '..') === false") or die("Detected hacking attempt!");
//当file中有..时候,是ture,整个比较就是false,就执行后面的。

// TODO: Make this look nice
assert("file_exists('$file')") or die("That file doesn't exist!");

?>

page = flag的时候,就好。
在这里插入图片描述直接这样传入flag也不对,当然也不可能这么简单。

三、WP做法:

assert()函数,会将括号中的字符串当作代码来执行,然后返回true或者false

assert("strpos('$file', '..') === false")

wp,就想着,将。
知道了assert能够执行,那就直接一 闭合 strpos(),然后写入我们的任意代码就好了啊

在这里插入图片描述
注意PHP中的连接符号使 .

这是分析payload用的,和sql注入一样的道理,尽量使他不报错就好,该闭合的都闭合了

同理,闭合可以,那么直接将后面的给注释掉也可以的呃

在这里插入图片描述

一样的道理

在这里插入图片描述然后就命令执行就好了.
在这里插入图片描述

根据这里的题意可以flag在 templates/flag.php中,
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Zero_Adam/article/details/113858051