ISCC客服一号冲冲冲(二)
呦,又见面了,狗子
打开链接,发现登录接口似乎是个图片截了一块啊,把图片下载下来,lsp隐写发现源代码,同时php弱比较登录页面
(都看到这里啦,还不给个三连吗)
本着这次一定的原则,我还是迎难而上,但是
尼玛,这没有密码啊
等等,我好像发现了什么
我们得到第一题flag,所以这个flag是啥呢(第二题:这是啥),第三题flag()告诉我们,哦这是密码啊
登录密码居然隐藏在题目描述里
行吧,直接搞起来
这里要用到一个东西,浏览器插件HackBar或者火狐渗透版,具体安装方法自行查找
吐了嗷,admin不让看
偶然间突然发现,除了admin,谁都可以进,只要密码对,出题人在哪,头伸过来我砍砍
换了zdmin上去后
em…搞我呢
但是,本着**这次一定(疯狂暗示)**做出来的原则,在存储里发现了这样的cookie
这不是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,刷新页面
出现了提示错误
这是因为我们修改了密文1中的数据,使第一次解密出的明文数据错乱,打乱了序列化数据的格式,反序列化失败。
但是当我们把返回的base64数据解码后,可以发现我们的username已经修改成admin了
出现这种错误,根据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替换进去,刷新一下
出活!!!
你喜欢这篇文章吗,主页或许有你想要的哦
点赞收藏加关注,一键三连不迷路!