利用简易爬虫完成一道基础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. 使用FindCmdLineSwitch处理命令行参数

    一.四个形式(变体) .function FindCmdLineSwitch(const Switch: string; const Chars: TSysCharSet; IgnoreCase: B ...

  2. python实现数据的压缩与归档

    楔子 尽管现代计算机系统的存储能力日益增长,但生成数据的增长是永无休止的. 无损(lossless)压缩算法以压缩或解压缩数据花费的时间来换取存储数据所需要的空间,以弥补存储能力的不足. Python ...

  3. 关于 reduce 和 map

    一  reduce() 函数 是python 的 模块的内容,是关于累 的 计算 在调用的时候先导入reduce模块 reduce() 接收的参数有两个,reduce(function,sequenc ...

  4. python django中的orm外键级联删除

    今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...

  5. java—多线程—notify/notifyAll

    notify应该使用在,只有两个线程在调用类中的两个方法,并在两个方法中进行互斥操作? 博客:Java多线程学习之wait.notify/notifyAll 详解 未完待续……

  6. python再学习笔记

    python各种半桶水QAQ,一些特性经常跟其他语言搞混,官方入门文档重读温习...... 最好用4个空格的缩进空值是Python里一个特殊的值,用None表示变量就是在程序中用来指向这些数据对象的, ...

  7. Graphic系统综合练习案例-绘制饼状图

    这里用一个案例来将之前学过的关于绘制相关的东东加强巩固一下,纯绘制,木有加点击效果,先来看下最终效果: github中这种百分比饼图的效果非常非常之多,实际在项目中开发当产品有这样类似的需求时做为开发 ...

  8. vue.js中父组件触发子组件中的方法

    知识点:vue.js中,父组件的method中,触发子组件中的方法,获得子组件中的定义的属性 (1)子组件 : child_crud.js var html_child_crud= "< ...

  9. Layui 内置方法 - layer.prompt_(输入层)

    prompt的参数也是向前补齐的.options不仅可支持传入基础参数,还可以传入prompt专用的属性.当然,也可以不传,yes携带value 表单值index 索引elem 表单元素. promp ...

  10. 五分钟彻底搞懂你一直没明白的Linux内存管理

    现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的.对于内存部分需要知道: 地址映射 内存管理的方式 缺页异常 先来看一些基本的知识,在进程看来,内 ...