第一次正式写博客记录学习啦
这是一道bugku平台的一道web题,今天距上一次写CTF题差不多有两个月了,抱歉!走了一趟写策划书的开发路线(发现自己真语言组织能力太low,而且也没啥开发经验,就像写作文一样次次都是写着文档走创意赛,,,),打算回归我的CTF正常轨道,希望还能赶上之前的朋友们进度,为自己鼓励!!!!
屁话太多,会被打,言归正题
首先这题是一周前写的,今天重做了一遍
打开网站,常规操作F12看下源码,查看网站头信息
幸运发现flag字眼,base64加密
试了下,GG,被骗了!!!! 多次刷新flag最后那部分都会变,没那么简单,,,
上网看了别人写的博客,借鉴他们代码,速度要快可能就这题目提示吧!
代码贴上:
import requests
import base64
url = "http://123.206.87.240:8002/web6/"
r = requests.Session()
headers = r.get(url).headers
str1 = base64.b64decode(headers['flag'])
#str1 = str1.decode() //防止下行代码split函数出错
#str2 = base64.b64decode(str1.split(':')[1])
str2 = base64.b64decode(repr(str1).split(':')[1]) # repr()函数将对象转化为供解释器读取的形式(Bety->str)
data = {'margin':str2}
print (r.post(url,data).text)
得到flag值:KEY{111dd62fcd377076be18a}
附加:
没有加str1 = str1.decode()那一步时一直报错;
——是因为字符串有byte类型和str类型,有时操作数类型和操作类型不匹配就会报错……这时候就要把类型转换一下(无论是转换操作数还是操作都行,只要两者匹配
一个简单的方法:
1、byte型转str型
str1 = str1.decode()
2、str型转byte型
str1 = str1.encode()
后来发现另一篇博客用repr函数解决了上述问题。