实验吧解题笔记——编程(一)
来源:互联网 发布:sftp用的什么端口 编辑:程序博客网 时间:2024/05/20 06:27
0.说明
每五个题目写作一篇writeup,第一行对应解题笔记(一)……
1.百米
题目描述
题目是这个样子的,很显然需要我们编程,获取网页中需要我们计算的表达式的值,然后提交上去获得flag。
分析
首先,我们使用Python中的requests这个第三方库去获取网页内容,使用以下语句获得这个网页的html文档。
get_url = 'http://ctf5.shiyanbar.com/jia/'post_url = 'http://ctf5.shiyanbar.com/jia/index.php?action=check_pass'session = requests.session()#建立一个requests的会话对象html = session.get(get_url).content#使用上面建立的对象去打开网页,并获取html文档内容
接下来,我们使用Python中的BeautifulSoup库去解析获得我们想要的内容,只需短短几行语句加上一点耐心,再复杂的内容也可以分解出来。使用以下语句得到
soup = BeautifulSoup(html, 'html.parser')expr = soup.p.div.get_text())#获取到需要计算的表达式
这段语句这么简单是因为我取了个巧,因为这个html文档中只有一个p标签,所以直接获取p标签下div标签的内容,再取得div标签中的值,就得到了我们需要计算的表达式。运行结果如下:
需要注意的是,在这里我们获得的表达式是str格式的,我们并不能直接去计算,这里需要用到python中一个内置的函数eval(),它可以计算字符串中python表达式的值。还有一点需要注意的是这里还设了个小坑,表达式中的乘号是以英文字符“x”表示的,我们需要把它替换成“*”,所以计算语句如下。
num = eval(expr.replace('x', '*'))
接下来,我们只需把计算结果以post方式提交上去就可以了,需要使用burpsuite抓包看到浏览器是怎么把我们的计算结果提交到服务器的,再自己编写payload,并使用requests的post()方式提交结果。最后的语句如下:
payload = {'pass_key':str(num)}post = session.post(post_url, payload)print(post.text)
使用print语句可以把网页的返回结果直接打印出来,最后在输出结果中可以找到KEY。
完整的程序如下:
from bs4 import BeautifulSoupimport requestsget_url = 'http://ctf5.shiyanbar.com/jia/'post_url = 'http://ctf5.shiyanbar.com/jia/index.php?action=check_pass'session = requests.session()html = session.get(get_url).contentsoup = BeautifulSoup(html, 'html.parser')expr = soup.p.div.get_text()#获取到需要计算的表达式num = eval(expr.replace('x', '*'))print(num)payload = {'pass_key':str(num)}post = session.post(post_url, payload)print(post.text)
2.迷宫大逃亡
//TODO
3.奖券
题目描述
某抽奖活动的奖券号码是6位数(100000-999999),请计算其中不含“4”的号码的奖券数量。
答案格式为:CTF{X},X为不含“4”的号码的奖券数量
分析
使目用Python遍历字符串,判断字符串中是否含有字符‘4’,如果有不计数,没有的话总数加1。代码如下:
sum = 0for i in range(100000, 999999 + 1): if '4' in str(i): continue else: sum += 1print(sum)
看别人的writeup时发现了下面这个只有两行代码的解法,要读懂的话需要对reduce和map的特性有一定了解。
from functools import reduceprint(reduce(lambda x,y:x+y,map(lambda i:0 if '4' in str(i) else 1,range(100000,999999+1))))
4.三羊献瑞
//TODO
5.找素数
//TODO
- 实验吧解题笔记——编程(一)
- 实验吧解题笔记——编程(二)
- 实验吧解题笔记——编程(五)
- 实验吧编程WP(一)
- 实验一(java编程)
- Chisel实验笔记(一)
- 51单片机学习笔记【一】——LED灯实验
- EDA实验笔记一
- 解题笔记——前言
- 38241415106——胡应兰(实验一)
- 思想实验(逻辑思维)解题
- Google C++ 编程规范——学习笔记(一)
- windows驱动编程学习笔记——(一)
- Java编程思想笔记(一)——static
- Spring实战笔记——面向切面编程(一)
- 函数式编程笔记(一)——粮草先行
- 编程之美解题笔记
- Posix多线程编程学习笔记(一)—线程基础
- SQL Server学习笔记3:数据库中表的插入、删除、修改、合并
- android build system
- 《把时间当作朋友》读书笔记
- 重装系统步骤
- ArrayList源码解析
- 实验吧解题笔记——编程(一)
- POJ 2031 Building a Space Station
- 0x003B8027 处有未经处理的异常(在*.exe 中): 0xC00000FD: Stack overflow (参数: 0x00000000, 0x00252000)
- 嵌套循环代码写法优化(提高运行速度和减小占内存量)
- JVM (PART XI) Sun JDK 监控和故障处理工具(I)jps
- java基础作业
- 对全局变量的multiple definition的一点理解
- MySQL DELETE 语句整理
- 第四周 项目 3