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

news/2024/7/19 8:41:29 标签: 爬虫, 密码学, python

爬虫完成一道基础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)向服务器发送数据,接收响应并打印

代码实现

python">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的值

转载于:https://www.cnblogs.com/kevinbruce656/p/10027819.html


http://www.niftyadmin.cn/n/573042.html

相关文章

Step6. 数学 1.ACM数论 HDU1576 A/B【玄学AC】

A/B http://acm.hdu.edu.cn/showproblem.php?pid1576 before your read&#xff0c;you need know&#xff01;【戏精做题】 首先是戏精部分&#xff0c;这段代码发出来是因为我觉得有意思。没想到高精度也能过&#xff0c;我一开始以为会超时&#xff0c;因为这段代码在我…

2019 博客总结 - 2020博客规划

2019博客总结 - 2020博客规划 2019年&#xff1a;78篇博客&#xff0c;新增93974‬位访客。2019年总结了很多内容&#xff0c;但都不够详尽因此没有发出来&#xff0c;后续会进行改善并不断深挖&#xff0c;2020会发出来。2019年开始接触视频相关的项目&#xff0c;项目中接触…

MySQL 备份脚本--mysqldump在slave 上进行备份

MySQL 备份脚本--mysqldump在slave 上进行备份 使用mysqldump在slave上进行备份&#xff0c;建议使用stop slave sql_thread,start slave sql_thread, 在slave上进行mysqldump备份的时候&#xff08;--single-transaction&#xff09;&#xff0c;这时候如果主库对表发生ddl&am…

*HDU1431 素数回文【素数+回文】

http://acm.hdu.edu.cn/showproblem.php?pid1431 看似比较简单的问题&#xff0c;实际上需要一个过程来解决&#xff0c;否则不是时间出问题&#xff0c;就是空间出问题。 首先&#xff0c;需要编写一个程序&#xff0c;计算1到100000000之间的回文素数&#xff0c;得到两个值…

RK3399平台开发系列讲解(低功耗篇)11.4、RK3399待机唤醒相关问题定位

平台内核版本安卓版本RK3399Linux4.14Android7.1=>返回专栏总目录<= 文章目录 一、基本概念二、标志三、常见问题3.1、有wake_lock导致无法休眠3.2、休眠唤醒时间太长3.3、休眠死机问题定位方法3.4

高通平台开发系列讲解(以太网篇)PHY状态机

文章目录 一、PHY状态机定义二、PHY的状态变化三、PHY的状态变化打印沉淀、分享、成长,让自己和他人都能有所收获!😄 一、PHY状态机定义 phy状态机: 目录:include/linux/phy.h enum phy_state {PHY_DOWN = 0, //0 down 如关闭网卡,ifconfig eth0 down PHY_STARTING, …

2018/11/28 操作系统考试范围

今天老师给出了考试的范围: 转载于:https://www.cnblogs.com/huangZ-H/p/10031856.html

step6 数学 ACM图论-最小生成树 HDU1879 继续畅通工程【Kruskal算法+并查集】

如果是使用cin cout输入输出&#xff0c;记得加优化&#xff0c;不然过不了。 思路&#xff1a; 对已经建好的路直接联和&#xff0c;对未建好的排序之后再联和即可。 #include<iostream> #include<algorithm> using namespace std; int p[105];//需要全部初始化…