buuctf [SUCTF2019]SignIn

前言:学习笔记。(我。。不会QAQ)

常规 下载 解压 查壳

64>>> 64位 IDA Pro打开。

先查找字符串再进main函数。

难点一:

说明这其实是字符转hex的函数实现。

难点二:对于 RSA的常见基本特征认识

(E值是可变的哈,为啥经常用 65537 我也不知。)

反正,这里就是一个做题核心突破点,若是不知,就。。。睡觉。。

此题就转换成了已知E、N、C(密文) 对RSA  M(明文)的解密。

d值可以用RSA-Tool求解,也可以(看脚本)

脚本:

唠嗑:

最开始,我想的是,应该可以和buuctf rsa_buuctf rsa flag.enc-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/shdbehdvd/article/details/140916040?spm=1001.2014.3001.5502

这题差不多。

因为已知了,n、e、d、p、q当然可以任意求解,顶多我将C(密文)保存在txt文本中。(准备照搬照抄。。。)

然后,,, 错了。

原因:因为,buuctf rsa那题的密文是  :(我不知道叫什么。。)

而我们是hex进制的C 无法求解。。。我不会。。

然后看了佬们的wp:(直呼->>>>学到了!!!兴奋ing.)

RSA算法原理及CTF解题_ctf rsa 已知m n c 求e-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_45521281/article/details/114706622这个哥哥讲的是真好!

(差不多整合RSA的,有一些我跑不出来,应该是我python版本的问题)

python实现该题脚本:

:对gmpy.2。以及转码解码 binascii的使用(我不太会python。。)

题外话:

①        我试过了,有些题解码不出来,我猜测是那种题不用解码直接就是flag

        对于可以解码的,相当于flag”再套一层外衣“(例如这题。)

②        gmpy.2 简直就是完美求解RSA的助手。。。

当然除非,N太大分解不出来,不过。。。这应该不是reverse考查的吧。。。

看Crypto的题。。。 牛!。T ^ T 。

③        对于本题,卡死在对C(hex)的求解 T ^ T (没看之前真不会)有一种知道思路,但就是没法搞的感觉,比完全不会更心塞。。。还是python的库,见太少了。

④        笔记,RSA reverse的话,目前这种程度应该足够了。

import gmpy2

"""
n=p*q       ->>>若n未知
import gmpy2
①invert(e,φ(N))     L = (p-1)*(q-1)     d=gmpy2.invert(e,L)     求逆元快速算出来:invert(e,φ(N)) 求出d值。

②求明文m 或者 密文根据公式  密文 = 明文^e mod N     明文=密文^D mod N
明文: m
m=gmpy2.powmod(c,d,n)
密文: c
c=gmpy2.powmod(m,d,n)

③dq、dp 是私钥的参数之一,分别表示d模p-1和d模q-1的余数的逆元。

注意!!! dp和dq,他俩加上e、n和密文c全部已知的话是可以实现任意密文c解密

dp=d mod(p-1) dq=d mod(q-1) 即 dp=d % (p-1)  dq=d % (q-1) 

(当p\\q\\dp\\dq\\c/m已知的时候 密文一样 套用RSA原理。)
I = gmpy2.invert(q,p)
mp = pow(c,dp,p)               #求幂取模运算, mp = c^dp % p
mq = pow(c,dq,q)               #求幂取模运算, mq = c^dp % q
m = (((mp-mq)*I)%p)*q+mq       #求明文公式
"""

import binascii

"""
import binascii   # ->>>对于需要将进制转化成ASCII码显示时使用。
print(binascii.unhexlify(hex(m)[2:]).decode(encoding="utf-8")) 将数据变成字符串。(不行说明其本身没有对应的ASCII,也就是不需要转。直接上flag)

例子:
DEC 185534734614696481020381637136165435809958101675798337848243069
suctf{Pwn_@_hundred_years} ->>>正常输出。

5577446633554466577768879988 ->>>使用会报错。
"""

最后,多看看,多总结,多学习~~~

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"Place sign in" 错误通常出现在使用 Spring Security 进行身份验证的应用程序中。这通常意味着用户没有通过身份验证并且没有正确的会话信息。可能的原因是在使用 HttpSession 时,没有正确地配置 Spring Security。 为了解决这个问题,你可以尝试以下步骤: 1. 确保在 Spring Security 配置中启用了会话管理: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.ALWAYS); } } ``` 2. 确保使用 Spring Security 进行身份验证时,正确地配置了 HttpSession: ```java @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .sessionManagement() .sessionCreationPolicy(SessionCreationPolicy.ALWAYS) .and() .formLogin() .loginPage("/login") .permitAll() .and() .logout() .logoutSuccessUrl("/") .permitAll() .and() .authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); } @Override protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("password").roles("USER") .and() .withUser("admin").password("password").roles("USER", "ADMIN"); } } ``` 3. 确保在使用 HttpSession 时,正确地配置了 Spring Boot 的属性: ```properties # application.properties server.servlet.session.timeout=30m ``` 如果你仍然遇到问题,可能需要进一步检查你的代码和配置是否正确。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值