zoukankan      html  css  js  c++  java
  • 刷题[Hash me please]

    ringzer0ctf-Coding Challenges-Hash me please

    这题本来不想写wp,有点水,但是想到正好要出校赛的题,加上20级在学python,算是给他们稍微认识一下web中python脚本的编写吧

    打开页面,简单粗暴,有时间限制提交sha512加密后的内容

    编写exp

    import requests
    import hashlib
    import re
    
    url = 'https://ringzer0ctf.com/challenges/13'
    searchtext = '		----- BEGIN MESSAGE -----<br />
    		(w+)'
    flagtext = 'FLAG-w+'
    cookie = {
    'PHPSESSID':'q828bk8rumfva9rb3quu4q6bq2',
    '_ga':'GA1.2.840888693.1610154251',
    '_gid':'GA1.2.645334795.1610669423'
    }
    
    r = requests.get(url=url, cookies=cookie)
    text = re.search(searchtext, r.text)
    hash_text = text.group(1)
    print(hash_text)
    
    hash = hashlib.sha512(hash_text.encode("utf-8")).hexdigest()
    print(hash)
    
    la_url = url+hash
    r = requests.get(url=la_url,cookies=cookie)
    print(r.text)
    flag = re.search(flagtext,r.text)
    flag = flag.group()
    print(flag)
    

    exp详解

    python进行网络请求

    我们通过python进行网络请求就需要requests模块,他能提供get/post等请求

    r = requests.get(url=url, cookies=cookie)

    即表示我们向url进行带cookie的get请求,但是无参数

    r.text

    即表示服务器返回的字符串

    正则匹配加密字符串

    观察源代码

    发现我们需要加密的值在此之后

    ----- BEGIN MESSAGE -----<br />  //这里有换行符(
    )
    		//这里有两个制表符(		)
    

    所以我们需要正则匹配,提取BEGIN MESSAGE 后的内容

    searchtext = ' ----- BEGIN MESSAGE -----<br /> (w+)'

    为什么要(w+),在后面中解释

    首先我们需要了解python中的re模块及相关方法

    re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。注意:

    • re模块是python独有的
    • 正则表达式所有编程语言都可以使用
    • re模块、正则表达式是对字符串进行操作

    re.search 扫描整个字符串并返回第一个成功的匹配。

    函数语法:

    re.search(pattern, string, flags=0)
    

    所以exp中的

    text = re.search(searchtext, r.text)

    即表示经过get请求返回的网页内容中寻找searchtext 中的内容

    import re
    a = "123abc456"
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)   #123abc456,返回整体
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)   #123
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)   #abc
    print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)   #456
    

    通过上面的例子我们就可以知道

    hash_text = text.group(1)

    表示匹配w+的内容,即我们需要加密的字符串

    hashlib加密模块

    在python中,我们会经常用到hashlib模块,其支持md5(),sha1(), sha224(), sha256(), sha384(), sha512()等hash构造方法

    hash = hashlib.sha512(hash_text.encode("utf-8")).hexdigest()

    即表示以utf-8编码字符串,并将其sha512加密后返回十六进制数据字符串值

    后续获得了加密后的值后,再次利用requests模块请求页面,匹配到flag值后输出即可

  • 相关阅读:
    C#数组的使用
    CLR设计类型之接口
    CLR类型设计之泛型(二)
    CLR类型设计之泛型(一)
    CLR类型设计之属性
    CLR类型设计之参数传递
    CLR类型设计之方法与构造器
    将博客搬至CSDN
    Unity_与android交互
    CSS3制作hover下划线动画
  • 原文地址:https://www.cnblogs.com/karsa/p/14282728.html
Copyright © 2011-2022 走看看