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

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

Written by Menglin Ma

写在前面

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

  想入门CTF的同学,给你们推荐个基础的网站,上面的好多题对新手比较友好:www.shiyanbar.com

。初学者可以先从基础密码学开始,比其他的部分相对容易。

题目描述

100米你能跑多快? 预备,跑!

解题链接: http://ctf5.shiyanbar.com/jia

via:www.shiyanbar.com

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

页面分析

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

  在这里我们获得了所需要的信息:需要提交的值为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

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

利用简易爬虫完成一道基础CTF题的更多相关文章

  1. 使用 HttpClient 和 HtmlParser 实现简易爬虫

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  2. [转]使用 HttpClient 和 HtmlParser 实现简易爬虫

    http://www.ibm.com/developerworks/cn/opensource/os-cn-crawler/ http://blog.csdn.net/dancen/article/d ...

  3. python简易爬虫来实现自动图片下载

    菜鸟新人刚刚入住博客园,先发个之前写的简易爬虫的实现吧,水平有限请轻喷. 估计利用python实现爬虫的程序网上已经有太多了,不过新人用来练手学习python确实是个不错的选择.本人借鉴网上的部分实现 ...

  4. php+phpquery简易爬虫抓取京东商品分类

    这是一个简单的php加phpquery实现抓取京东商品分类页内容的简易爬虫.phpquery可以非常简单地帮助你抽取想要的html内容,phpquery和jquery非常类似,可以说是几乎一样:如果你 ...

  5. 爬虫系列1:python简易爬虫分析

    决定写一个小的爬虫系列,本文是第一篇,讲爬虫的基本原理和简易示例. 1.单个网页的简易爬虫 以下爬虫的主要功能是爬取百度贴吧中某一页面的所有图片.代码由主要有两个函数:其中getHtml()通过页面u ...

  6. Python基础数据类型题

    Python基础数据类型 题考试时间:三个小时 满分100分(80分以上包含80分及格)1,简述变量命名规范(3分) 1.必须是字母,数字,下划线的任意组合. 2.不能是数字开头 3.不能是pytho ...

  7. day17 python re模块 简易爬虫

    day17 python   一.re模块     1.re模块的基础方法         查找findall() import re #re.findall(pattern,string,flags ...

  8. Springboot+JPA下实现简易爬虫:豆瓣电视剧数据

    Springboot+JPA下实现简易爬虫:豆瓣电视剧数据 前言:今天听到产品那边讨论一些需求,好像其中一点是用户要求我们爬虫,在网页上抓取一些数据然后存到我们公司数据库中,众所周知,爬虫的实现对于p ...

  9. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

随机推荐

  1. 深入浅出GNU X86-64 汇编

    深入浅出GNU X86-64 汇编 来源 https://blog.csdn.net/pro_technician/article/details/78173777 原文 https://www3.n ...

  2. pycharm 报错 ModuleNotFoundError: No module named 'distutils.core'

    之气的虚拟机不好使了,重新装了最新版本,安装了ubuntu18.4,然后安装pycharm,但新建项目的时候报错: ModuleNotFoundError: No module named 'dist ...

  3. Spring Cloud(七)服务网关 Zuul Filter 使用

    上一篇文章中,讲了Zuul 转发,动态路由,负载均衡,等等一些Zuul 的特性,这个一篇文章,讲Zuul Filter 使用,关于网关的作用,这里就不再次赘述了,重点是zuul的Filter ,我们可 ...

  4. MVP架构的一个小例子

    主角: MVP是一种编程的架构模式,M=Model,负责提供数据:V=View,负责显示数据:P=Presenter,负责处理数据. 应用例子: csharp写的一个qq机器人. 一.Model层 获 ...

  5. (二十五)防编译后函数名通过ida查看到

    在使用多个动态库时,两个动态库之间有可能存在相同名称的函数,这样会出现只有第一个函数生效,即所有对该函数的调用都将指向第一个加载的动态库的同名函数中.这样就会很混乱,而且在想改名称也不是很简单的情况下 ...

  6. web开发:清浮动

    一.display总结 二.overflow 三.浮动布局 四.清浮动 五.清浮动的方式 一.display总结 <!DOCTYPE html> <html> <head ...

  7. 技术学到多厉害,才能顺利进入BAT?

    简介 本科的时候对 Linux 特别感兴趣,心中向往成为一名运维工程师,就开始没日没夜的看相关的书籍,到了大约2013年前后的时候发现 DevOps 开始流行起来了,就开始学习 Python 希望成为 ...

  8. AI行业精选日报_人工智能(12·23)

    日本探索用人工智能指挥交通 据日本共同社报道,日本一家机构正在研究开发一套新的交通系统,将应用人工智能技术分析数据来缓解城市交通拥堵.报道称,在日本新能源和产业技术综合开发机构研发的这套系统中,人工智 ...

  9. CentOS 6 多实例 编译安装mariadb-5.5.59

    系统平台: CentOS release 6.9 (Final) 内核 2.6.32-696.el6.x86_64 1.去官网下载适合的源码包 http://mariadb.org/ mariadb- ...

  10. 通过LVM备份mysql数据库脚本

    #!/bin/bash #******************************************************************** #encoding -*-utf8- ...