zoukankan      html  css  js  c++  java
  • 利用简易爬虫完成一道基础CTF题

    利用简易爬虫完成一道基础CTF题

    声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我。如果文中有哪些问题,也欢迎大家指正。

    Written by Menglin Ma

    写在前面

      如果有想学习基础爬虫的同学,建议在中国大学MOOC上搜索嵩天老师的爬虫课程,讲的真的很细致,也很基础。

      想入门CTF的同学,给你们推荐个基础的网站,上面的好多题对新手比较友好:www.shiyanbar.com
    。初学者可以先从基础密码学开始,比其他的部分相对容易。

    题目描述

    100米你能跑多快? 预备,跑!
    解题链接: http://ctf5.shiyanbar.com/jia

    via:www.shiyanbar.com

      将网址打开后是这样的,一个很复杂的表达式,需要在三秒内提交,依靠人的力量几乎是不可能的(神仙除外)。最靠谱的方法就是利用程序来计算这个表达式,然后自动提交结果。本文采用的是利用简易Python爬虫来实现表达式的自动计算与提交,来获取含有flag页面的方法。
    image

    页面分析

      使用爬虫爬取页面的第一步就是分析页面。在这道题目中,需要获取需要提交表单的参数,以及所需计算表达式的位置。可以在输入窗口右键选择审查元素,查看所需信息。
    image

      在这里我们获得了所需要的信息:需要提交的值为pass_key的值,提交的方法为post方法,表达式夹在两个div标签之间,且div的name为my_expr是独一无二的,提交的动作为?action=check_pass。(关于HTML页面提交表单的一些详情可以尝试百度一下或私聊我)

    爬虫编写

      编写该爬虫需要一些前提条件,包括导入re库使用正则表达式,导入requests库爬取信息,还有就是需要获得目标网页的URL和需要发送的数据,这些条件要在程序中体现出来。

      编写该爬虫大概需要以下几步:

    1.导入必要的库
    2.利用get方法抓取页面
    3.利用正则表达式筛选表达式对应的字符串
    4.处理字符串并利用eval方法自动计算
    5.利用计算出的数值构造需要post的字典
    6.利用post方法(注意带上cookies)向服务器发送数据,接收响应并打印
    

    代码实现

    import re
    import requests
    #发送post和get请求的url
    get_url = 'http://ctf5.shiyanbar.com/jia/'
    post_url = 'http://ctf5.shiyanbar.com/jia/?action=check_pass'
    #利用get方法获取网页数据
    r = requests.get(get_url)
    #构造与匹配正则表达式
    str_text = r"<div name='my_expr'>.*</div>"
    match = re.search(str_text,r.text)
    #处理匹配后的结果
    result = match.group().replace("<div name='my_expr'>","")
    result = result.replace("</div>","")
    if 'x' in result:
        result = str(eval(result.replace('x','*')))
    #构造字典
    data = {'pass_key':result}
    #利用post请求发送data和cookie数据,获得回复
    response = requests.post(post_url,data=data,cookies=r.cookies)
    response.encoding = response.apparent_encoding
    print(response.text[:1000])
    
    

    运行并拿到key

    image

    Vscode下运行该程序,得到了KEY的值

  • 相关阅读:
    python
    mysql 操作
    you-get 使用代理
    恢复本地策略组--用于启动项管理等
    bat批处理——获取文件夹下所有文件名/重命名
    cmd--set用法,下次补充实例
    bat+7z批量压缩"文件夹"
    Excel提取字符串示例
    cron
    AIX修改用户密码登录不成功案例分享
  • 原文地址:https://www.cnblogs.com/kevinbruce656/p/10027819.html
Copyright © 2011-2022 走看看