CTF 两道web整数溢出题目(猫咪银行和ltshop)

①猫咪银行: (2018中科大hackgame)

一开始给十个CTB,而flag需要20个CTB,我们需要理财赚够20个。  
理财是只能买入TDSU才可以获得收益。我们先上来直接把CTB全部换成TDSU。  

上边是我们花了所有TDSU:66060买了19分钟后的收益。(因为一个账号最多存在20分钟,计算你用脚本极限也不能买20分钟,必须留一分钟用来换TDSU和买入,取出等操作)
还是不行,算上收益的钱1200231也不够买20个CTB。  

考虑买RMX是否存在汇率差。

发现一个CTB57个RMX,一个RMX值115TDSU,也就是一个CTB值6555个TDSU,还不如直接买。  

只能考虑另外的情况:

整形溢出

在买入份额上输入很大的数或者负数,都会有错误提示,交易失败。此处不存在整形溢出。
再买入时间上输入很大的数  

成功溢出。仔细观察这个值,会发现。

是int64类型的溢出。

直接购买9223372036854775808时间,份额为1000,收益仍为负数。尝试将时间慢慢调小。
9123372036854775808(第二位2改为了1)成功让世间变为负的,且收益为正.(跳不出来慢慢调,后边写下原理)  

时间为负的直接去出来就好了,然后兑换flag。

②LTshop(护网杯)

前边的条件竞争不说了,开个burp多线程买几个大辣条,买4个就好了,为啥起码4个,后边有介绍。

其实看到最后的9999999999.......个大辣条换flag也能猜到是溢出。

这里存在uint64整数溢出。
2^64-1为最大值:18446744073709551615  

这里如果我们直接输入18446744073709551615,服务器端肯定会先给你 *5,为啥呢?

因为判断你大辣条的数目啊,一个辣条之王得用5个大辣条来换啊,所以溢出过大了,而我们的要求是正好溢出一点点,所以说除以5=3689348814741910323。

这个时候输入3689348814741910323,服务端 *5=18446744073709551615,虽然表面上是18446744073709551615,实际上为0。

所以我们稍微加1,输入3689348814741910324,* 5=18446744073709551620,实际上服务端以为我们只买4个大辣条。所以成功购买那么多大辣条。

总结的问题

①uint64溢出范围0-18446744073709551615(没有负数哟)

②为什么非要买4个大辣条,你输入的数据乘以五后是18446744073709551620。

溢出界限(最大数)是18446744073709551615,也就是说这个数字还没有溢出,一旦加1,就变成了0,也就是说18446744073709551616代表0,以此类推18446744073709551620代表4  

③这两个题目溢出类型不一样:

猫咪银行是int64,存在负数,所以构造的时候钱数有可能是负数,所以你得自己计算收益(和买入时间和买入份额有关系。)  
ltshop没有负数,不然的话18446744073709551615+1=18446744073709551616实际上代表了-18446744073709551616你得再加上18446744073709551617=36893488147419103233才能代表买一个大辣条。  

④关于ltshop为什么是uint64溢出,我也不知道啊,凉了啊。
别人的wp上边是看的cookie,知道了框架,然后才知道的溢出类型,如果你实在不知道什么溢出类型,那你就把这几个溢出类型挨个试一下。

⑤猫咪银行那到题目不是随便买的,而是猜的。

虽然9223372036854775807是最大数,但是你的收益和时间才是最终决定你溢出是否成功的条件。我们得想个办法让你的收益溢出的时候为较大的正数并且满足时间为过去的时间,或者取出时间在20分钟之内。所以我们输入的数要先让他达到溢出的临界值。

然后让这两个数在-9223372036854775808到9223372036854775807之间达到我们想要的,计算的话太麻烦了,不如直接猜,每次一个范围一个范围的测试就好了。

好像太大了也不行,会出问题,比如我一开始输入很大的数,怎么调都是-9223372036854775808

原文地址:https://www.cnblogs.com/zaqzzz/p/9937421.html

时间: 2024-08-07 15:11:41

CTF 两道web整数溢出题目(猫咪银行和ltshop)的相关文章

2019全国大学生信息安全大赛两道web

简单小结 菜鸟第一次打国赛,这次题目质量很高,学到了许多姿势. Web Justsoso 打开题目,源代码出存在提示: 使用LFI读取index.php与hint.php http://d4dc224926cd47bca560b0ec2f84bad155efe5b747574b89.changame.ichunqiu.com/?file=php://filter/read=convert.base64-encode/resource=index.php http://d4dc224926cd47

2019CISCN华南线下两道web复现

原帖地址 : https://xz.aliyun.com/t/5558 2019CISCN华南线下的两个简单 web 部分题目下载地址,有的不完整 : 点我点我 web 1 考点 : 无参函数的 RCE 在注释中发现了 forgetpassword.php 页面 打开 forgetpassword.php,要求输入一个用户名,尝试用户名爆破,结果为 admin123 import requests url = "http://127.0.0.1/ciscn/web1/useri.php"

几道web前端练习题目

在 HTML 语言中,以下哪个属性不是通用属性?A]<class>B]<title>C]<href>D]<style> 在线练习:http://hovertree.com/tiku/bjaf/qi1g37nf.htm 在 CSS 样式定义中,以下哪种 RGB 颜色值是 Web 安全色?A]#111111B]#222222C]#333333D]#444444 查看答案:http://hovertree.com/tiku/bjaf/72jaf1n0.htm 在下

CVE-2015-1530 ,CVE-2015-1474 两个android整数溢出漏洞 分析

An integer overflow in Android media could be exploited to get media_server permission(CVE-2015-1530) Integer overflow leading to heap corruption while unflattening GraphicBuffer In Android(CVE-2015-1474)

两道有意思的题目

碰到两道有意思的题目,记录一下. 题目一: 问,对于任意一个正整数,是否存在一个它的倍数全是由1和0组成? 例如: 1 * 1 = 1 2 * 5 = 10  (2的5倍是10,10由1和0组成) 3 * 37 = 111 (3 的 37 倍是111,111 全部由1组成) 4 * 25 = 100 (4 的 25 倍是100,100 由1和0组成) 5 * 20 = 100 (5 的 20 倍是100,100由1 和 0 组成) …… 现在需要判断,随便给一个正整数,是否存在一个它的倍数满足题

分享两道笔试题目

前几天,给成都的某家公司投了个简历,给发了两道笔试题目,与大家分享一下.附上自己的解题过程,写得不好的地方,还请博友多多指教. 一 .  设计程序输出销售及收费清单 一个电商平台对在其平台之上销售的除了书籍.食品以及药物以外的商品收取 10% 的费用.而对于进口的商品则额外收取 5% 的附加费用.对于平台抽取的费用计算时,舍入的规则是:对于 n% 抽取率,价格为 p的商品, np/100 的值就近舍入到 0.05(如: 7.125 -> 7.15, 6.66 -> 6.70 ). 卖家卖出一些

病毒的侵扰和再侵扰两道AC自动机的应用

HDU2896 病毒的侵扰 http://vjudge.net/problem/viewProblem.action?id=16404 题目大意: 记录每个病毒的编号,并给出一些网站的源码,分别输出网站及其对应编号中所含病毒的编号,没有就不输出 最后输出有病毒网站的个数 这道题需要注意的是这个所有ASCII码均会用到,所以我之前傻傻地写str[i]-'a'还不知为什么会错简直苦逼~~ 这里直接用ch[now][str[i]]找到对应位置即可 因为要记录编号,为了防止重复访问,我对query中进行

穷举(四):POJ上的两道穷举例题POJ 1411和POJ 1753

下面给出两道POJ上的问题,看如何用穷举法解决. [例9]Calling Extraterrestrial Intelligence Again(POJ 1411) Description A message from humans to extraterrestrial intelligence was sent through the Arecibo radio telescope in Puerto Rico on the afternoon of Saturday November 16

ACM/ICPC 之 SPFA范例两道(POJ3268-POJ3259)

两道以SPFA算法求解的最短路问题,比较水,第二题需要掌握如何判断负权值回路. POJ3268-Silver Cow Party //计算正逆最短路径之和的最大值 //Time:32Ms Memory:360K #include<iostream> #include<cstring> #include<cstdio> #include<queue> #include<algorithm> using namespace std; #define