概述
SQL注入估计在大家眼里已经是老生常谈了,好像就那么回事,其实不然,
在Pangolin开发过程中,我遇到过太多太多的特例以及继续深入注入的方法。
这里跟大家讲讲关于资源ID不存在情况下的注入方法。
什么叫“不存在资源ID”呢?举个例子,假设url为http://www.91ri.org/news.php?id=9999999,
而对应9999999的资源其实是不存在的。这个情况下,使用传统的sql注入工具是没法判断注入点的
(当然Pangolin是可以注入滴),更不用说提取数据了。很多情况下,互联网中存在大量的这种
漏洞就被测试人员和开发人员漏掉了。
也许您会想问,这种情况应该基本不存在才对?好吧,我列举几个例子:
1、在进行网页爬行时,会发现很多人为没有注意的链接,而对应ID的资源由于某些原因已经被删除了,
只是在页面中未被删除;
2、开发人员将数据进行了一些清理,没有考虑到删除老的脚本文件;
3、开发人员留了一个表单接口(比如输入id查询对应资源),默认没有参数的,
这个情况下我们也不知道这种资源id的表现形式如何;这种情况最多见,搜索条件下最常见。
总之,这种情况其实很多的。我见到过N次。
回归主题,为什么这种情况一般的注入工具没法进行判断呢?我们来回顾一下注入工具的正确判断流程:
1、根据HTTP状态吗
2、根据页面长度(这是Pangolin第一个提出来的判断方法)
3、根据关键字,以前都是手工输入,一直到Pangolin首创提供了一个超级强大智能的【自动分析关键字】
技术(目前没有任何工具能够超过这种算法)。
好吧,再看看,在错误资源id的情况下:状态码都是200,页面长度返回都是一致的,
无法提取关键字(因为确实没有关键字可提取)。这时,自动化工具就全部停下来,
认为没有漏洞了。有没有办法继续注入呢?
其实是可以的,还可以很快速的提取数据,如何做?
1、报错模式,在mssql最常见,mysql也可以,只是知道的人比较少而已。
2、构造假的正确资源ID的方式。
一种方法这里不多做解释了,回头我再单独发文章介绍。这里讲讲第二种方法:
构造假的正确资源ID的方式。有点拗口是不是,呵呵,没关系。开两个例子你就马上明白了。
http://www.91ri.org/news.php?id=9999999肯定是不存在资源,
那么http://www.91ri.org/news.php?id=9999999 or 1=1可以不可以呢?
http://www.91ri.org/news.php?id=9999999′ or ’1′=’1可不可以呢?明白了吧?
通过or 1=1的方式让数据库返回默认排序的第一条记录。这样的话
http://www.91ri.org/news.php?id=9999999 or 1=1作为一个整体就是一个正确的资源页面了。
估计很多朋友看到这里就准备走了,哈哈,还没有完呢。你手工应该是可以了,
自动化工具还是没有搞定不是,到头来你还是没法快速注入。这里我介绍一下在Pangolin中是如何实现的:
a)再取一次不可能存在的资源ID,如1111.1,注意了,带点的
b)如果a页面返回的内容与之前一致,那么恭喜,你可以确定这是一个不存在的资源页面了
c)在满足b的情况下,分别请求9999999 or 1=1和9999999′ or ’1′=’1,判断一下注入类型
d)关键在这里了,现在我们要将c的内容当成正确页面,提取出来伪造的关键字,这个就看工具的算法了。
完了吗?没呢,最后还差一步,如果在报错模式下,你只能一个字节一个字节的猜(我认识一些知道改技 术的朋友都卡在这里了),系统会爆一大片错误,这样的union select模式就无效了。最后一步改进:在--注释后面加一个加号‘+’,嘿嘿,为什么?自己慢慢琢磨吧,当做课后习题。……
转载于:https://www.cnblogs.com/mujj/articles/2054142.html
最后
以上就是清爽老虎为你收集整理的解决注入工具无法提取关键字的全部内容,希望文章能够帮你解决解决注入工具无法提取关键字所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复