导航
导航
文章目录
  1. CBC字节翻转攻击
  2. 基于约束的SQL攻击

CBC字节翻转攻击和基于约束的SQL攻击

最近划水严重,反正水了一水到底,再水一篇文章,记录划水的学习。

CBC字节翻转攻击

此攻击方法的精髓在于:通过损坏密文字节来改变明文字节。借由CBC可以绕过过滤器,或者改变用户权限提升至管理员,又或者改变应用程序预期明文以尽猥琐之事。

CBC原理:对于密码学有了解的对于CBC应该不陌生,在这里就不多讲了,需要注意的是明文、密文、IV。Ciphertext-N-1(密文-N-1)是用来产生下一块明文;这就是字节翻转攻击开始发挥作用的地方。如果我们改变Ciphertext-N-1(密文-N-1)的一个字节,然后与下一个解密后的组块异或,我们就可以得到一个不同的明文了。

假设我们输入用户名为admim密码为123,在序列化后得到明文a:2:{s:8:“username”;s:5:“admim”;s:8:“password”;s:3:“123”;} 把明文分为16个字节的块,这里我们需要将m改为n即可登录。m在第二组第13位,所以只需改变第一组13位即可。

脚本

  1. $v = "a:2:{s:8:"username";s:5:"admim";s:8:"password";s:3:"123";}";
  2. $enc = @encrypt($v);
  3. $enc[13] = chr(ord($enc[13]) ^ ord("m") ^ ord ("n"));
  4. $b = @decrypt($enc);

运行结果admim变为admin

解释

第二块明文偏移量为13的字符© = 第一块密文偏移量为13的字符(A) ^ decrypt(第二块密文的偏移量为13的字符)(B)

即 C = A ^ B,这里我们知道C和A,因此B = A ^ C

假设我们修改A为A2,A2 = A ^ C ^ D(我们想要的字符,这里指n)

那么C = A2 ^ B = A ^ C ^ D ^ A ^ C = 0 ^ D = D,即

$enc[13] = chr(ord($enc[13]) ^ ord(“m”) ^ ord (“n”))

最后因为改了第一组所以还要改一下初始向量IV,也使用异或,new_iv = decrypt(第一块原密文) ^ 第一块正确明文 = 第一块错误明文 ^ ord_iv ^ 第一块正确明文

参考链接https://www.freebuf.com/articles/system/163756.html

http://www.anquan.us/static/drops/tips-7828.html

基于约束的SQL攻击

注意不是SQL注入攻击

在SQL中执行字符串处理时,字符串末尾的空格符将会被删除。换句话说“vampire”等同于“vampire ”,对于绝大多数情况来说都是成立的(诸如WHERE子句中的字符串或INSERT语句中的字符串)例如以下语句的查询结果,与使用用户名“vampire”进行查询时的结果是一样的。

SELECT * FROM users WHERE username='vampire ';

但也存在异常情况,最好的例子就是LIKE子句了。注意,对尾部空白符的这种修剪操作,主要是在“字符串比较”期间进行的。这是因为,SQL会在内部使用空格来填充字符串,以便在比较之前使其它们的长度保持一致。

在所有的INSERT查询中,SQL都会根据varchar(n)来限制字符串的最大长度。也就是说,如果字符串的长度大于“n”个字符的话,那么仅使用字符串的前“n”个字符。比如特定列的长度约束为“5”个字符,那么在插入字符串“vampire”时,实际上只能插入字符串的前5个字符,即“vampi”。

支持一下
扫一扫,支持13m0nade
  • 走过路过不要错过~