[SUCTF 2019] SignIn

如果对本文存在有疑问或需要工具可以在下方给我留言!
这题比较简单
题目下载地址:https://www.lanzoux.com/iawzl2f
程序没有加壳,直接IDA载入

直接分析main函数,我们可以看到程序的逻辑很清晰。
使用GDB调试得知sub_96A函数是把用户输入的字符串转换为16进制存入v9中。
继续往下看,程序调用了 __gmpz_init_set_str 函数,通过搜索得知这是一个 GNU 高精度算法库,官方文档地址:https://gmplib.org/manual/

__gmpz_init_set_str 其实就是 mpz_init_set_str
int mpz_init_set_str (mpz_t rop, const char *str, int base) [Function]
Initialize rop and set its value like mpz_set_strint mpz_set_str (mpz_t rop, const char *str, int base) [Function]
Set the value of rop from str, a null-terminated C string in base base. White space is allowed
in the string, and is simply ignored.

这三个参数分别是多精度整数变量,字符串,进制。
这个函数的作用就是将 str 字符数组以 base 指定的进制解读成数值并写入 rop 所指向的内存。
然后后面还调用了一个__gmpz_powm函数,官方文档中的定义是这样。

void mpz_powm (mpz_t rop, const mpz_t base, const mpz_t exp, const mpz_t mod) [Function]
Set rop to base^exp mod mod.

其实就是计算 base 的 exp 次方,并对 mod 取模,最后将结果写入 rop 中
这个运算的过程和RSA的加密过程一样。
接下来就是__gmpz_cmp函数,看这个函数名就知道这是比较函数。

v6是用户输入,v7是程序的硬编码数据
接下来我们简单了解下RSA的加解密算法,只要简单理解一下RSA算法,就可以做出这题。
加密算法:

图中的C是密文,M是明文,E是公钥(E和 φ(N)互为质数),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算
解密算法:

图中的C是密文,M是明文,D是私钥(私钥由这个公式计算得出E * D % φ(N) = 1),N是公共模数(质数 P 、Q相乘得到N),MOD就是模运算,φ(N)是欧拉函数(由这个公式计算得出φ(N) = (P-1)(Q-1))。

了解了加密解密的概念,我们就可以开始写脚本来解密了
通过分析程序的这个函数

可以得知以下信息

C = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
N = 103461035900816914121390101299049044413950405173712170434161686539878160984549
E = 65537

知道这3条数据我们就可以开始解密密文了,首先我们要分解N得到P、Q,这里我使用 yafu 工具。
下载地址:https://nchc.dl.sourceforge.net/project/yafu/1.34/yafu-1.34.zip

成功得到P、Q

P = 282164587459512124844245113950593348271
Q = 366669102002966856876605669837014229419

现在我们有了P、Q和E,我们就可以计算出欧拉函数,然后我们就可以通过欧拉函数φ(N)和公钥E计算出私钥D。
使用python的gmpy2库计算私钥。(E * D % φ(N) = 1)

d = gmpy2.invert(e,(p-1)*(q-1))
d = 91646299298871237857836940212608056141193465208586711901499120163393577626813

计算出私钥d后我们就可以对密文C进行解密,解密算法是(密文C的私钥D次方对公共模数N取余)
使用python的gmpy2库计算明文

m = gmpy2.powmod(c,d,n)

得到

m = 185534734614696481020381637136165435809958101675798337848243069

把m转为字符串即可!
解密脚本

import gmpy2
import binasciip = 282164587459512124844245113950593348271
q = 366669102002966856876605669837014229419
c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35
n = 103461035900816914121390101299049044413950405173712170434161686539878160984549
e = 65537
d = gmpy2.invert(e,(p-1)*(q-1))
m = gmpy2.powmod(c,d,n)
print(binascii.unhexlify(hex(m)[2:]).decode(encoding="utf-8"))
suctf{Pwn_@_hundred_years}

[SUCTF 2019] SignIn相关推荐

  1. [SUCTF 2019]CheckIn

    web第25题 [SUCTF 2019]CheckIn 打开靶场 看来是一个文件上传的题 上传正常图片 返回路径,注意到有一个index.php 尝试直接上传一句话木马shell.php 提示非法后缀 ...

  2. [SUCTF 2019]Game

    [SUCTF 2019]Game 题目地址 : https://buuoj.cn/challenges#[SUCTF%202019]Game 题目一共两个附件,先把src.zip 解压,在src目录下 ...

  3. web buuctf [SUCTF 2019]Pythonginx1

    知识点:1.nignx 2.idna编码与utf-8编码的漏洞 1.开题 查看源码,整理代码: @app.route('/getUrl', methods=['GET', 'POST']) def g ...

  4. BUUCTF:[SUCTF 2019]Game

    https://buuoj.cn/challenges#[SUCTF%202019]Game index.html中发现一串base32 >>> import base64 > ...

  5. BUUCTF-WEB:[SUCTF 2019]EasySQL 1

    解题思路: ①先试试1'# 发现没有回显 ②试试1  有回显 ③试试单引号注入 ④试试用order by查询表的列数:1 order by 1 用不了联合注入了! 下面尝试使用堆叠注入: payloa ...

  6. [SUCTF 2019]EasySQL1

    1.老规矩,先输入1 2.输入1 or 1,页面提示nonono,说明or已被列入黑名单,通过我们尝试,and,union等等都被列入黑名单. 3.我们来判断参数是否被引号,双引号,括号包裹. 输入1 ...

  7. [SUCTF 2019]EasySQL1 (buu一周目速通)

    进入靶机,根据题目是一道sql注入题目,经过普通手段注入发现大部分关键词都被过滤了, Array ( [0] => 1 ) 一解:发现输入数字回显代码,字母不回显,所以猜测后台代码存在 ||(或 ...

  8. BUUCTF持续更新中

    目录 [HCTF 2018]WarmUp [强网杯 2019]随便注 [SUCTF 2019]EasySQL [GYCTF2020]Blacklist [GKCTF2020]cve版签到 GXYCTF ...

  9. BUUctf刷题第三天

    [极客大挑战 2019]BuyFlag 进去是一个网页,查看源代码 说只有啥玩意的学生才能买,就抓包看看 发现cookie后面有个user=0,改成一试试 改完后说我是啥啥啥的学生了可以支付购买了 结 ...

最新文章

  1. Tempdb数据库详细介绍
  2. UA MATH567 高维统计I 概率不等式4 亚高斯分布
  3. 知识图谱学习笔记-图操作
  4. MySQL查询的进阶操作--条件查询
  5. HDU3388(二分+容斥原理)
  6. Bash脚本教程之read命令
  7. 三层业务类(DAL)必用的通用方法之一
  8. spring aop源码分析
  9. for循环、while循环、break跳出循环、continue结束本次循环、exit退出脚本
  10. 一位清华学长的CTO成长之路 -- 不断的打破自己的边界
  11. 蚂蚁金服 Java RPC 开源框架—SOFARPC
  12. 微信模板消息,动态配置
  13. cropper.js使用
  14. 夏目漱石《我是猫》读后感
  15. “独享宽带”是什么意思?
  16. 动态获取bind dns日志IP脚本
  17. hive面试题——求连续活跃天数
  18. 利用SwitchyOmega和Jmeter实现Jmeter录制功能
  19. SaaS软件商需要什么样的云计算
  20. idea中的maven里面项目有灰色的

热门文章

  1. spring注解及扩展
  2. Asp.net 获取泛微OA个人信息并生成二维码名片vCard
  3. keyshot聚光灯_【干货】如何在KeyShot中创建和使用物理灯光!
  4. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)
  5. 【Nginx】Nginx文件服务器搭建
  6. MonacoEditor 自动格式化sql json数据
  7. @MDS SpringBoot的简单项目搭建
  8. arduino舵机门锁 红外遥控控制 刷卡 diy
  9. 差异分析流程(一)数据预处理
  10. 最近玩起了视频,把一点工作总结一下。