实验吧--天下武功为快不破

实验吧–天下武功为快不破

知识点:

  • 在python中,对于base64加密解密方法的流程和注意点
    • 先要引入base64库,import base64
    • 加密: 结果=base64.b64encode(要加密的字符串)
    • 解密:结果=base64.b64decode(要解密的字符串)
    • 千万要注意:要解密的字符串要符合base64的格式,比方说后面要有两个等号。而且,解密后的值并不是字符串类型。也就是说,字符串的一些函数是不能使用的,如split(),分割函数。

解题流程:

  • 打开链接出现一串英文,意思九四” 天下武功,唯快不破“,并提示你,必须尽快的做,you mast do it as fast as you can 。有点头大,什么意思呀,让我尽快,尽快干啥呀?

  • 老套路,我们先来看看源代码,查看后,发现有一句

    <!-- please post what you find with parameter:key -->

    翻译一下,就是让我们用post传值方式来把名为key的参数传出去,但是这个参数是在哪里呀?想想~~

  • 应该是在网页的头文件里,f12查看一下,在header里面果然有猫腻

    FLAG: UDBTVF9USElTX1QwX0NINE5HRV9GTDRHOlJzdlV1VDVVTQ==

    看到有两个==,肯定是base64编码吧,就把这段密码解密一下

    P0ST_THIS_T0_CH4NGE_FL4G:RsvUuT5UM

    把后面的值以post方式传过去,发现没啥变化,好像没有结果,也没有下一步的提示,再好好想想~~

  • 题目中反复提示要快快快,会不会是对你把这串字符传递过去的时间有限制呢那就写个脚本让脚本来完成这个工作,以下是python脚本

    import requests
    import base64
    
    r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php') #建立requests链接,访问指定url资源,返回Response对象r,里面储存了网页上的所有资源
    
    key = r.headers['FLAG'] #找到资源header头文件里面的FALG,取出里面的值,并传给key
    
    flag = base64.b64decode(key).decode().split(':')[1] #先把key解密,但是要注意解密后的字符串不是str类型上传统的字符串,而是bytes类型的字符串对象,所以后面的split()切割函数并不能起作用。而我们的目的就是要把解密后的字符串对象以":"分开,形成数组,并取到[1]号位上的值。为了使能达到目的,我们只要在解密后的bytes类型的字符串对象后调用decode()方法,就可以使之转化成字符串,使得我们达到目的。
    
    para = {'key':flag} #创建字典对象para,赋值为上面解出来的flag值
    
    r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php',data = para)#再以para为数据参数,发送post请求,得到Response对象
    
    print(r.text)#以字符串的形式,打印出r的数据(即网页数据)
    

    关于bytes类型字符串转化成str类型字符串的方法总结

  • 通过这个脚本,就可以在极短的时间内,完成找到flag,并提交flag的过程。不得不感叹,python真是太强大了,再爬虫方面,运行一下,flag就出来了。

总结

  • 后来我发现,这道题目每次头文件里的FLAG的值都会变化,肯定要写脚本来实现。

猜你喜欢

转载自blog.csdn.net/qq_41281571/article/details/81318345