zoukankan      html  css  js  c++  java
  • CTF-bugku-PWN

    一. PWN1

    题目:nc 114.116.54.89 10001

     

     1.  直接kali里面跑nc

     

     2.ls看看有啥

     

     3.明显有一个flag

    cat查看一下

     

     搞定

     

     

    二 . PWN2

    题目:给了nc 114.116.54.89 10003还给了一个附件

     

     1.放到ubantu中file一下,,64位,动态链接

     

     2.用64位的ida打开

     

     看一下main函数按f5,可知read函数有一个缓冲区漏洞

     后面还有一个getshell函数

     那么思路也就是把溢出的地址改为getshell函数执行的地址

    在gdb动态调试程序

     按c继续执行

    click 100,整100个字符串测试偏移地址

    cyclic 100
    aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa

     

    看看栈的情况,第一行这个栈保存了44个字符

     看看寄存器的情况,可以知道ret之前保存了44个字符,也就说另外56个字符是填满了ret后面的区域

     

     那么56个字符之后就是getshell的地址(写poc getshell地址的时候记得小端法)

    三.pwn4

    1.首先拿到程序不要慌 看看是什么文件,有没有什么保护措施

    file pwn4 很清楚是64位 动态的

     checksec看看有没有保护措施 很显然没有

     2.知道没有什么保护措施  我们就放到ida 深入分析一下

     mian函数进去看看是啥,很明显哈  可以看到read这个函数出现缓冲区溢出的问题

     这个时候 我们清楚是缓冲区溢出了 ,就要看看这个程序里面有没有什么shell 或者什么'/bin/sh'

    目的是为了溢出之后直接覆盖让他执行shell

    shift+F12:查找字符串

     可以i看见有个shll  双击进去看看

     可以发现这个shell就是个字符串没啥用

    我们直接搜一下有没有'/bin/sh'

    ROPgadget --binary pwn4 --string '/bin/sh'

     可以发现啥都没有重新查看一下字符串,可以发现有个$0这个在linux就可以当作shell,

     接下来的思路就是把这个$0当参数传进system函数,为啥要传入system函数呢

    原因就是因为system()会调用fork()产生子进程,由子进程来调用/bin/sh -c string来执行参数string字符串所代表的命令,此命令执行完后随即返回原调用的进程。

    意思就是 system可以调用fork()产生子进程  让$0执行,不然$0是不是只是一个字符串呢,不能当作程序执行就没有意义,system函数就饿可以执行它

    好,既然要把$0当参数传进system函数,我们就要知道三个东西

    1.因为64位依赖寄存器传参 当然有很多寄存器 这玩意是由顺序的,不是说哪个存都行,这里面就一个参数 所以rdi先存,顺序是分别用rdirsirdxrcxr8r9来传递参数。所以得知道rdi的地址

    2.得知道$0的地址吧

    3.system地址得知道吧

    好一个个来

    先是rdi,可以看见是0x00000000004007d3

     $0的地址 0x000000000060111f 

     system直接看0x000000000040075A

    3.就可以写exp把他们串起来

    emmm思路是这样

    先先填充缓冲区,大小为0x10,然后覆盖rbp,因为是64位所以8个字节,传入rdi,咋传呢 pop就行了 然后传入ret的地址和$0,将栈中$0的地址弹出,存入rdi作为参数,再传入system地址进行调用

     exp借用deedmind老哥!感谢

     成功拿到flag

  • 相关阅读:
    halcon应用案例探究
    Halcon中模板匹配方法的总结归纳
    halcon开发必读
    全局Threshold和动态阈值分割Dyn_Threshold的应用场景
    halcon电路断裂检测
    halcon之 distance_transform
    VS调试不能进入断点,提示当前不会命中断点还未为文档加载任何符号
    .net reactor使用教程(一)——界面各功能说明(转)
    (转) 开运算opening_circle和闭运算closing_circle的异同
    Win10系统安装UEFI+GPT配置
  • 原文地址:https://www.cnblogs.com/cat47/p/12347420.html
Copyright © 2011-2022 走看看