内容简介:SQL 注入是当前 Web 安全中最常见的安全问题之一,其危害性也比较大,众多白帽子在渗透测试过程中往往会首先着重进行 SQL 注入的测试。盲注是 SQL 注入的重要的技术之一,在现实中的 SQL 注入案例中,往往很难将注入的结果直接回显出来。因此,盲注也就成为了 SQL 注入必不可少的手段之一。本文想分享一个如何大大提升盲注效率的技巧。与或运算,操作符分别为 & 以及 |,大多数人应该会在实际开发过程中很少使用到与或运算。如果你之前学过计算机组成原理,里面讲了很多关于补码、反码以及各种运算。当然,我们这
SQL 注入是当前 Web 安全中最常见的安全问题之一,其危害性也比较大,众多白帽子在渗透测试过程中往往会首先着重进行 SQL 注入的测试。盲注是 SQL 注入的重要的技术之一,在现实中的 SQL 注入案例中,往往很难将注入的结果直接回显出来。因此,盲注也就成为了 SQL 注入必不可少的手段之一。本文想分享一个如何大大提升盲注效率的技巧。
与或运算
与或运算,操作符分别为 & 以及 |,大多数人应该会在实际开发过程中很少使用到与或运算。如果你之前学过计算机组成原理,里面讲了很多关于补码、反码以及各种运算。当然,我们这里不需要理解那么多知识,这里我们只需要理解与或运算就可以了。
与运算
运算规则: 0 & 0 = 0; 0 & 1 = 0; 1 & 0 = 0; 1 & 1 = 1
即:两位同时为“1”,结果才为“1”,否则为0
或运算
运算规则:0 | 0 = 0; 0 | 1 = 1; 1 | 0 = 1; 1 | 1 = 1
即:参加运算的两个对象只要有一个为1,其值为1
假设参与运算的2个数据,一个数据是1,那么另外一个的值就可以确定了,假设另外一个值为 x:
1 & x = 0, x = 0 1 & x = 1, x = 1
所以通过与运算,假设其中的一个数据是已知的,那么另外的值就很好确定了。
通过与运算盲注
看到这里,你可能还是一头雾水,与运算和盲注有啥关系?假设一个数字 104,我们可以将它转化为二进制,即 104 = 64 + 32 + 8 = 2 ^ 6 + 2 ^ 5 + 2 ^ 3,我们可以将它以比特位的形式将它表示出来: 那么我们可以将104与1,2,4,8,16,32,64,128进行与运算,就可以获得每个比特位上的数据。
与1进行运算
和2进行与运算
通过这样的方式,我们就可以确定104每个比特位上的数据是什么。那这和我们SQL盲注又有什么关系呢?对于SQL盲注,我们往往会使用到 substring,我们会对结果的每一个字符来进行枚举,将字符与可能字符来进行比较,这样枚举的效率可能会不太好,往往需要比较很多次。对于一个 acsii 字符,其范围是在0-127之间,那么只需要7个比特位就足够了。那么如果使用与运算的方式,我们只需要比较7次就可以确定这个字符的 ascii 码。通过与运算的方式,可以显著地提高效率,减少比较次数,而且往往字符越多,提升的效果就越明显。
Talk is cheap, show me the code. 这里我们通过 python 的方式来实现:
def compute_by_and(word): for ele in word: ele_b, times = get_character(ele) print(f"Guess the value {ele_b}:{chr(ele_b)} with {times} times") def get_character(char): char_b = ord(char) value = 0 times = 0 for i in range(7): times = times + 1 if char_b & (2 i): value = value + (2 i) return value, times if name == "main": compute_bybinary("hello")
很明显,每一个字符仅仅只需要7次比较就可以知道这个字符是什么字符了。如果没有数据支撑,这个结果可能对比不是很明显,那我们可以通过其与普通的枚举方式来进行对比,我们选取3个字符来进行对比,myapp,myapp_card,myapp_card_perform。我们枚举的方式选取 string.printable,这个也包含了所有的 ascii 字符。
import string def brute_force(word): times = 0 for ele in word: for c in string.printable: times = times + 1 if ele == c: break print(f"Brute force {word} with {times} times") if name == "main": brute_force("hello_world")
myapp | myapp_card | myapp_card_perform | |
---|---|---|---|
枚举 | 121 | 276 | 526 |
与运算 | 35 | 70 | 126 |
总结
通过上面的对比,我们可以看出在SQL盲注中,如果通过与运算来进行盲注,可以大大提升盲注的效率,减少请求的次数,这对于我们的测试的帮助意义还是比较大的。
*本文原创作者:madneal@平安银行应用安全团队,本文属于FreeBuf原创奖励计划,未经许可禁止转载
以上所述就是小编给大家介绍的《让你的SQL盲注快起来》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
计算机程序设计艺术(第3卷 英文版·第2版)
Donald E.Knuth / 人民邮电出版社 / 2010-10 / 119.00元
《计算机程序设计艺术》系列被公认为计算机科学领域的权威之作,深入阐述了程序设计理论,对计算机领域的发展有着极为深远的影响。本书是该系列的第3卷,扩展了第1卷中信息结构的内容,主要讲排序和查找。书中对排序和查找算法进行了详细的介绍,并对各种算法的效率做了大量的分析。 本书适合从事计算机科学、计算数学等各方面工作的人员阅读,也适合高等院校相关专业的师生作为教学参考书,对于想深入理解计算机算法的读......一起来看看 《计算机程序设计艺术(第3卷 英文版·第2版)》 这本书的介绍吧!
JS 压缩/解压工具
在线压缩/解压 JS 代码
HEX CMYK 转换工具
HEX CMYK 互转工具