Bugku--7+1+0--WP

admin 2023年9月8日03:08:46评论24 views字数 789阅读2分37秒阅读模式

解压得到字符串 4nXna/V7t2LpdLI44mn0fQ==

使用python尝试base64解码结果为

b'xe2uxe7kxf5{xb7bxe9txb28xe2ixf4}'

这样可能不够直观,将奇数位的16进制字符删去后为:

?u?k?{?b?t?8?i?}

可以看到偶数位的数都是正确的。所以再输出ASCII码看一下

226,117,231,107,245,123,183,98,233,116,178,56,226,105,244,125

可以看到奇数位的数ASCII值很大,这显然不正确。结合题目 7+1 = 8,一个字符也是8bit。可打印的字符的ASCII范围在125以内,转换为二进制也只需要7位,对于大于128的数,将最高位置零后,则刚好是可打印的字符。具体演示如下:

例如第一位为226,转换为二进制数后为 1110 0010

将最高位(第一位)置0后为 0110 0010

再转换回来十进制为 98

对应的字符为 'b'

那么现在可以理解作者的意图了。将7bit的字符转换为8bit,则是在其最高位进行 +1和+0。因为+0后值不变,所以偶数位的值是正常的。exp如下:

from base64 import b64decode 

enc = '4nXna/V7t2LpdLI44mn0fQ==' 

dec = b64decode(enc)

flag = '' 

for i in range(len(dec)):

    if i % 2 == 0:  #奇数位的数下标为偶数         flag += chr(dec[i] & 0x7f) # 0x7f : 0111 1111

              else:

        flag += chr(dec[i]) print(flag)

#bugku{7bit28bit}


Bugku--7+1+0--WP



原文始发于微信公众号(CSJH网络安全团队):Bugku--7+1+0--WP

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月8日03:08:46
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Bugku--7+1+0--WPhttp://cn-sec.com/archives/2017048.html

发表评论

匿名网友 填写信息