SQL Injection - Blind (WS/SOAP)
本期演示的是盲注的手法。有些网站在与数据库交互的地方进行了很好的修饰,将报错的语句进行修改,即使你找到了注入点也无法下手拿数据,这个时候我们的步骤就比较麻烦了,我们只能通过对错的方式进行盲注(如下演示)
首先我们看一眼这是一个正常的显示页面。
加了一个点后也有不一样的地方。。。。。。。。 电影票的数字没了。。。
Sql的系统语句错误也被很好的掩盖掉了。我们再加一个注释看看
又输入了一个注释符后页面又恢复了正常。说明这个地方仍旧有漏洞(这就是下面要演示的另一个手法——盲注。)
我们加了一个or 的语句让它与后面的select user()不冲突,并将语句故意输错误的和正确的。看看页面有什么异常,据上方的显示结果来看返回的页面是又改变这的说明语句在后台确实是执行了的。
这个时候我们就要将我们的语句进行一个转变了大致思路如下:
- 先将我们的注入语句完整的写上。
- 将我们要查的语句的返回结果转成字符串。
- 截取字符串的所有字符
- 将每个字符转成ascii码然后通过比大小确认字符
其中要用到如下方法:
Substr((sql),x,y) //(sql)内添加查询语句就可以将返回的结果转成字符将这一串的字符以第x个开始向下截取y个。
Ascii() //该方法是将字符所对应的ascii码转换一下并显示出来。
具体如下示例:
上面的语句简单的说一下吧: select user()的结果用substr()将字符串的第一个字符开始向下截取一个,然后用ascii()方法转成ascii码再一一的比对
比如:
(ascii(substr((select user()),2,1))>90)
//这个ascii的值否大于90 如果正确则应该显示53的那个数反之就是错误的,然后在 尝试(ascii(substr((select user()),2,1))=>100) 正确则显示53的那个数反之就是错误 以此 类推逐渐缩小范围。最终确定那个数。
Ascii的值我们可以看一下 在数据库中数据库是识别ascii的也可以一一的查出来。
或者百度一下我们可以拿张表看一下
我们将这些最终判定的结果依次记下来(如上图)这样我们就可以通过ascii码拿到数据了。
这样用户就出来了 一般找到注入点后最先想到的方法就是找显示位然后用联合查询。像这样一个一个的试这样的拿数据方式就是盲注了。这样的做的方法比较麻烦效率也比较低,后面有效率较高的方法,这个回头再讲,以上就是本次演示的内容。