ISCC2021—ISCC客服一号冲冲冲(二)

ISCC客服一号冲冲冲(二)

呦,又见面了,狗子

打开链接,发现登录接口似乎是个图片截了一块啊,把图片下载下来,lsp隐写发现源代码,同时php弱比较登录页面

(都看到这里啦,还不给个三连吗)

本着这次一定的原则,我还是迎难而上,但是

尼玛,这没有密码啊

等等,我好像发现了什么

我们得到第一题flag,所以这个flag是啥呢(第二题:这是啥),第三题flag()告诉我们,哦这是密码啊

image-20210517180436167image-20210517180526693

登录密码居然隐藏在题目描述里

行吧,直接搞起来

这里要用到一个东西,浏览器插件HackBar或者火狐渗透版,具体安装方法自行查找

吐了嗷,admin不让看image-20210517182208202

偶然间突然发现,除了admin,谁都可以进,只要密码对,出题人在哪,头伸过来我砍砍

换了zdmin上去后

em…搞我呢

image-20210517231104703

但是,本着**这次一定(疯狂暗示)**做出来的原则,在存储里发现了这样的cookie

image-20210517231140263

这不是CBC加密(CBC字节翻转攻击)吗,简单

攻击原理就不放了,有兴趣的童鞋可以自行搜索,或者点一手关注,说不定哪天就更新相关内容了呢

简单来说就是通过异或翻转字节

直接上代码修改cipher和iv控制用户名

注意一下哈:每次刷新由于本地post值的存在,cipher和iv都会变,我们要一定要清除本地post值

一个简单的办法,复制当前URL,关闭浏览器删除一小时内浏览记录或这个网址浏览记录,粘贴刚刚复制的URL再进去,无论怎么刷新还是这个iv和cipher

这里上的是Python2的代码

第一段

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Link    : http://blog.csdn.net/csu_vc
import base64
import requests
import urllib
iv_raw='i6RfsKjmCpdRqbJGVObwbg%3D%3D'  #这里填写第一次返回的iv值
cipher_raw='nEUant73cLQOvjWeQbR4K69FZXw8UGdV0A5r4DildwOOW6RdoiX140i3CaomjByv3mKADN9dZSKcQLDpoPCgordsOH4PtrnlIYmF6FBBmkw%3D'  #这里填写第一次返回的cipher值
print "[*]原始iv和cipher"
print "iv_raw:  " + iv_raw
print "cipher_raw:  " + cipher_raw
print "[*]对cipher解码,进行反转"
cipher = base64.b64decode(urllib.unquote(cipher_raw)) 
#a:2:{s:8:"username";s:5:"zdmin";s:8:"password";s:5:"12345"}
#s:2:{s:8:"userna
#me";s:5:"zdmin";
#s:8:"password";s
#:3:"12345";}
xor_cipher = cipher[0:9] +  chr(ord(cipher[9]) ^ ord('z') ^ ord('a')) + cipher[10:]  #请根据你的输入自行更改,原理看上面的介绍
xor_cipher=urllib.quote(base64.b64encode(xor_cipher))
print "反转后的cipher:" + xor_cipher

特别注意:

我这里用的用户名是zdmin,如果你用的是其他的用户名(最好最好在admin的基础上改动一个字母),

username admin这里共13个字符

xor_cipher = cipher[0:9] +  chr(ord(cipher[9]) ^ ord('z') ^ ord('a')) + cipher[10:]


你改的是第几个字符cipher中就是0:几+chr(ord(cipher[几])^ ord('你改的那个字母'^ ord('改成什么字母')cipher[几+1:])

例如:admil就是
xor_cipher = cipher[0:13] +  chr(ord(cipher[13]) ^ ord('l') ^ ord('n')) + cipher[14:]

得到翻转后的cipher

nEUant73cLQOpTWeQbR4K69FZXw8UGdV0A5r4DildwOOW6RdoiX140i3CaomjByv3mKADN9dZSKcQLDpoPCgordsOH4PtrnlIYmF6FBBmkw%3D

将翻转后得到的新cipher替换浏览器中原来那个cipher,刷新页面

image-20210517231401378

出现了提示错误

这是因为我们修改了密文1中的数据,使第一次解密出的明文数据错乱,打乱了序列化数据的格式,反序列化失败。
但是当我们把返回的base64数据解码后,可以发现我们的username已经修改成admin了

image-20210517231443120

出现这种错误,根据CBC解密原理,我们只需要修改iv的值,使得iv XOR 解密(密文1) = 明文1 即可

还是上代码,同样的,Python2

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Date    : 2018-03-15 11:56:20
# @Author  : csu_vc(s4ad0w.protonmail.com)
# @Link    : http://blog.csdn.net/csu_vc
import base64
import urllib
cipher = 'V/pACxVKq7HhWuPDmWWz/G1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjE1OiIxU0NDXzJvMmxfS2VGdXUiO30='#填写提交后所得的无法反序列化密文
iv = 'i6RfsKjmCpdRqbJGVObwbg%3D%3D'#一开始提交的iv
#cipher = urllib.unquote(cipher)
cipher = base64.b64decode(cipher)
iv = base64.b64decode(urllib.unquote(iv))
newIv = ''
right = 'a:2:{s:8:"userna'#被损坏前正确的明文
for i in range(16):
    newIv += chr(ord(right[i])^ord(iv[i])^ord(cipher[i])) #这一步相当于把原来iv中不匹配的部分修改过来
print urllib.quote(base64.b64encode(newIv))

得到新iv

vWQtgcbfmx6K0ST2qPEt8w%3D%3D

在浏览器中,将新iv替换进去,刷新一下

出活!!!

你喜欢这篇文章吗,主页或许有你想要的哦
点赞收藏加关注,一键三连不迷路!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shadow丶S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值