[CISCN2019 华北赛区 Day2 Web1]Hack World 1

SQL注入 专栏收录该内容
52 篇文章 4 订阅

前言

这道题考察的就是SQL注入,其中过滤了一些关键词,自己没做出来的主要原因是对于注入类型的判断还有注入的姿势仍然不够熟练,并不是题目很难。

WP

进入环境后首先我们发现这是一个Post传id的注入,我们要进行注入的表和列都已经给我们了。经过尝试,发现输入1和2的时候存在有意义内容的回显。
再经过一系列的尝试,发现过滤了很多东西,空格也被过滤了。这时候我在判断注入类型那里出现了问题。我以为是字符型注入。
其实我们输入注入id=2/2,会发现回显的是id=1的内容,因此判断为数字型注入。

接下来就是如何注入了。这里我经过尝试,发现了和网上的WP稍微有些不同的绕过方法。
因为空格被过滤,但是括号没有被过滤,而且经过尝试,发现各种函数也没有被过滤。因此正常的绕过方式是这样:

if(ascii(substr((select flag from flag),1,1))=102,1,2)

利用if语句,实现布尔注入。利用括号来绕过空格的过滤。经过测试,用TAB或者%09%0a%0d之类这样的绕过方式也可以成功绕过空格。

但是我一开始考虑了其他的问题。这题应该是用正则表达式判断来进行过滤的,正则表达的函数很大可能是strpos这样的,如果传数组进入呢?
发现报错了:
在这里插入图片描述
原来用的stripos函数。这时候想到stripos函数的一个漏洞。如果没有找到的话返回的是false,如果找到了但是是在字符串的首位,返回的是0。如果后端用了弱类型比较的话,0==false,这样后面就可以使用被过滤的某一个字符串了。

进行尝试,首先id=1union
SQL Injection Checked.

再试试id=union1union
bool(false)

说明确实存在这种漏洞。
因此可以可以在输入的参数的第一个位置放上空格,这样就可以绕过空格的过滤,这样注入起来更简单。

 if(ascii(substr((select flag from flag),1,1))=102,1,2)

不过后来看了源码,其实用不是弱类型比较,而是if判断:

if(stripos($sql,$blackitem)){
            return False;
        }

但是同样存在这样的漏洞。

如果这个题目把括号,tab,以及各种可以充当空格的都给过滤了的话,就只能用这种方法来绕过空格的过滤。不过我在网上找了一些WP,都没有用这个方法的,说明这个stripos在这题的漏洞并没有被发现。

接下来就是写脚本了,我这里就不放了,网上各种脚本都有。

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:黑客帝国 设计师:我叫白小胖 返回首页

打赏作者

bfengj

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值