20145325张梓靖 《网络对抗技术》 PC平台逆向破解

  

学习任务

  • shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址。
  • Return-to-libc 攻击实验:即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击。(本次实验所用的是已经载入内存的 libc 库中的 system()函数等)

      

      

基础知识

  • ps -ef | grep pwn1:

      ps:将某个进程显示出来

      ps:将某个进程显示出来

      ps参数:-A  显示所有程序;-e  此参数的效果和指定"A"参数相同;-f  显示UID,PPIP,C与STIME栏位

      ps显示进程结果格式:UID PID PPID C STIME TTY TIME CMD

         UID 程序被该 UID 所拥有

         PID 就是这个程序的 ID

         PPID 则是其上级父程序的ID

         C CPU 使用的资源百分比

         STIME 系统启动时间

         TTY 登入者的终端机位置

         TIME 使用掉的 CPU 时间。

         CMD 所下达的指令为何

      本条命令意为:查找与pwn1有关的进程,并用-ef格式显示出来

  • (gdb) attach: GDB可以对正在执行的程序进行调度,它允许开发人员中断程序并查看其状态,之后还能让这个程序正常地继续执行。在GDB中使用“attach”命令是一个方法。

  • (gdb) disassemble foo: 反汇编一段内存地址,

  • (gdb) c: 继续执行被调试程序,直至下一个断点或程序结束,Continue的简写

  • (gdb) x/16x : 使用x命令(examine的简写)来查看内存地址中的值。

    * x命令的语法:x/<n/f/u> (n、f、u是可选的参数)

    * n表示单元个数,f表示显示的进制,u表示每个单元的大小。

  • ln -s 源文件 目标文件 :为某一个文件或目录在另外一个位置建立一个同步的链接

  • chmod u+s 文件 :对文件设置强制位,即SET-UID,可以使非文件拥有者或文件所属群组的用户具有执行该文件的权限

  • export [-fnp][变量名称]=[变量设置值] : 设置或显示环境变量。(比如我们要经常使用到一个命令时,而这个命令的执行文件又不在当前目录,这时可以在代码中先执行export,即告诉程序,要执行什么东西时,需要的文件就在这些目录里)

  • echo : 在显示器上显示一段文字

  • gdb -q : -q用以使得gdb不输出gdb程序的版本等信息

  • system :是一个函数,用于运行其它外部程序

      

      

注入Shellcode并执行

  • 先将环境设置为:堆栈可执行、地址随机化关闭

  • 以 anything+retaddr+nops+shellcode 的结构来构造,先估计返回地址所在位置,并且找到 shellcode 所在地址

  • 要验证返回地址所在位置以及找到 shellcode 地址,需要使用GDB调试

    * 先运行 20145325pwn1 可执行文件

  (先不输入“回车”,在后面的调试过程中需要继续运行的时候再回车,到时候就会显示如图的字符部分)

    * 再找到正在执行的 20145325pwn1 的进程号

     *  进入GDB,联系上该进程号

    *  在 ret 处设置断点,接着运行到断点处,显示当前esp的值并依照此位置显示接下来的内存地址内容,并由此分析出返回地址位置的正确性以及shellcode的地址

  (红色方框为返回地址处,红色椭圆为 shellcode 代码,由此推算出 shellcode 地址为 “\x31\xd3\xff\xff”)

    *  继续运行,再次检测是否跳到覆盖的返回地址所表示的地方

  (如红框所示,已经可以确认返回地址是被 \x10\x20\x30\x40 所覆盖的)

  • 将作为输入的 input_shellcode 处的 “\x10\x20\x30\x40” 换为上面所找到的 shellcode 地址 “\x31\xd3\xff\xff”

  • 执行 20145325pwn1 ,成功注入 shellcode

  

  

Return-to-libc 攻击实验

  • 进入linux32的环境,将地址随机化关闭,同时使用ln命令,让 /bin/sh 指向另一个shell程序(这里是zsh)(因为原 /bin/bash 有保护措施,即使能调用一个shell,也不能在这个shell中保持root权限)

  • 编写retlib文件并进行编译(注意要使堆栈处于不可执行状态),同时将其设为 Set-UID 程序

  • 编写读取环境变量的程序并进行编译

  • 编写攻击代码

  • 使用编译好的 读取环境变量 程序,得到/bin/sh的地址

  • 编译攻击程序,并通过调试该程序得到 system 与 exit 的地址

  • 再将攻击程序中的buf换为刚刚获得的3个地址

  • 重新编译攻击程序

  • 先运行攻击程序,再运行SET-UID程序,观察是否成功获得root权限

 成功

  • 尝试将/bin/sh 重新指向/bin/bash,观察能否攻击成功

 竟然成功了

  • 又尝试将/bin/sh 重新指向 /bin/dash ,观察能否攻击成功

 又成功了?

  • 按理来说,后2种重新指向后,应该是无法获得root权限的,但这里竟然都成功了,难道实验楼环境里的 /bin/dash 与 /bin/bash还没有保护措施?

  

参考链接

逆向及Bof基础实践说明

Return-to-libc 攻击实验

20145325张梓靖 《网络对抗技术》 PC平台逆向破解的更多相关文章

  1. 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验

    20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...

  2. 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解

    2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...

  3. 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验

    20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...

  4. 20155305《网络对抗》PC平台逆向破解(二)

    20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...

  5. 20155311《网络对抗》PC平台逆向破解(二)

    20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  6. 20145221《网络对抗》PC平台逆向破解

    20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...

  7. 20155307《网络对抗》PC平台逆向破解(二)

    20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...

  8. 20145201李子璇《网络对抗》PC平台逆向破解

    20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...

  9. 20145219《网络对抗》PC平台逆向破解

    20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...

  10. 20145240《网络对抗》PC平台逆向破解_advanced

    PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...

随机推荐

  1. redhat vim编辑器永久添加行号及搜索

    设置行号: 跳转到home $ cd ~ 编辑.vimrc,没有的话自动创建 $ vim .vimrc 第一行加入: set nu :wq 保存退出,即可 如果想取消设置,同理删除set nu即可 v ...

  2. chrome\IE\Firefox驱动下载地址

    安装三大浏览器驱动driver 1.chromedriver 下载地址:https://code.google.com/p/chromedriver/downloads/list 2.Firefox的 ...

  3. 数据加密之MD5加密

    MD5是一个安全的散列算法,有两个特点:1.输入两个不同的明文(一段原始的数字信息)不会得到相同的输出值2.根据输出值,不能得到原始的明文,即过程不可逆所以要解密MD5没有现成的算法,只能用穷举法,把 ...

  4. summaryなな

    Word如果遇到有空白页不能删除的情况,将光标定位在空白页前一页的末尾,然后按Delete键就可以删除空白页了. 实时计算,强调的是实时.比如小明要查看他去年一年的消费总额度,那么当小明点下统计按钮的 ...

  5. Ireport第一张web项目报表。

    原先项目里面的统计分析报表都是和普通的系统页面一样开发的,SSM架构,从数据库一层一层往前面传数据,最后通过jsp表现出来,这次在领导的建议下使用IReport进行报表开发,果然还是要使用工具啊,社会 ...

  6. 点击地面时,若鼠标点击的偶数次使得Cube向点击点移动,并且点击奇数次Cube变色

    using System.Collections; using System.Collections.Generic; using UnityEngine; public class ray10 : ...

  7. Buffer、ArrayBuffer、DataView互转(node.js)

    1.Buffer转ArrayBuffer // 实例一 const buf = Buffer.from("this is a test"); console.log(buf); c ...

  8. codeforces 975C Valhalla Siege

    题意: 有n个巫师站成一列,每个巫师有自己的血量. 一个人射箭攻击他们,每次造成若干点伤害,巫师按照给定的顺序承受伤害,如果伤害大了,那么死掉,伤害落到下一个巫师身上. 如果一轮攻击之后,所有的巫师都 ...

  9. SVN && BeyondCompare

    [1]设置内容 (1)三个步骤对应设置内容 1.1 "D:\Beyond Compare 4\BCompare.exe" %base %mine /title1=%bname /t ...

  10. 20165305 苏振龙《Java程序设计》第四周学习总结

    第五章 继承: 面向对象中,为避免多个类间重复定义共同行为.(简单说就是将相同的程序代码提升为父类.) 特点: 这里接触到了新的关键词,extends,在java语言中用estends来继承父类的行为 ...