TQLCTF simple PHP

点开网站的图片抓包后发现调用的是一个叫get_pic.php的函数

发现返回的图片信息为base64加密信息,于是我们可以借助这个php文件读取inde.php的内容

get_pic.php?image=index.php

读取到的内容中可以看到这样的一段:

<?php error_reporting(0); if(isset($_POST['user']) && isset($_POST['pass'])){ $hash_user = md5($_POST['user']); $hash_pass = 'zsf'.md5($_POST['pass']); if(isset($_POST['punctuation'])){ //filter if (strlen($_POST['user']) > 6){ echo("<script>alert('Username is too long!');</script>"); } elseif(strlen($_POST['website']) > 25){ echo("<script>alert('Website is too long!');</script>"); } elseif(strlen($_POST['punctuation']) > 1000){ echo("<script>alert('Punctuation is too long!');</script>"); } else{ if(preg_match('/[^\w\/\(\)\*<>]/', $_POST['user']) === 0){ if (preg_match('/[^\w\/\*:\.\;\(\)\n<>]/', $_POST['website']) === 0){ $_POST['punctuation'] = preg_replace("/[a-z,A-Z,0-9>\?]/","",$_POST['punctuation']); $template = file_get_contents('./template.html'); $content = str_replace("__USER__", $_POST['user'], $template); $content = str_replace("__PASS__", $hash_pass, $content); $content = str_replace("__WEBSITE__", $_POST['website'], $content); $content = str_replace("__PUNC__", $_POST['punctuation'], $content); file_put_contents('sandbox/'.$hash_user.'.php', $content); echo("<script>alert('Successed!');</script>"); } else{ echo("<script>alert('Invalid chars in website!');</script>"); } } else{ echo("<script>alert('Invalid chars in username!');</script>"); } } } else{ setcookie("user", $_POST['user'], time()+3600); setcookie("pass", $hash_pass, time()+3600); Header("Location:sandbox/$hash_user.php"); } } ?>

可以看到这个过滤器中包含⻓度限制、字符⿊名单两种限制。对于每个用户post的user变量会进行md5运算后在sandbox目录下创建一个$hash_user.php文件。可以看到该文件的模板来自于根目录下的template.html文件,通过与获取index.php同样的手法,我们可以获取template.html的内容。

在templ.html中的注入点有三个:user,punctuation,website。

我们可用通过图中两个位置的注入点,通过注释的方式延长PHP代码的长度。(比赛中自己做的时候punctuation位置的注入内容无法转义就是由于在html中,没有延长PHP的长度导致。)

通过html多行注释符号/* ·········· */来实现截断html,延长php代码的效果

由于在punctuation处的过滤器限制较多,采用的是无字母shell注入。

在website注入点处来停⽌编译,防⽌php解析剩下的html代码

注意:执行的时候要进行一次 URL 编码,否则 Payload 无法执行。

停止html编译的方式:

$__=<<<____ ... 字符串段 ... ____;


__EOF__

本文作者dre0m1
本文链接https://www.cnblogs.com/dre0m1/p/16037129.html
关于博主:I am a good person
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   dre0m1  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示