zoukankan      html  css  js  c++  java
  • 20155217《网络对抗》Exp01 PC平台逆向破解(5)M

    20155217《网络对抗》Exp01 PC平台逆向破解(5)M

    实验要求

    1. 掌握NOP,JNE,JE,JMP,CMP汇编指令的机器码
    2. 掌握反汇编与十六进制编程器
    3. 能正确修改机器指令改变程序执行流程
    4. 能正确构造payload进行bof攻击

    汇编相关

    1. NOP:空指令。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。机器码:90
    2. JNE:条件转移指令,与JNZ等价。ZF=0,转至标号处执行,即如果不相等则跳转。机器码:75
    3. JE:条件转移指令。如果相等则跳转,即ZF=1,转至标号处执行。机器码:74
    4. CMP:比较指令。相当于减法指令,只是对操作数之间运算进行比较,而不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
    5. JMP:无条件转移指令。
    • 段内直接短转Jmp short。机器码:EB

    • 段内直接近转移Jmp near。机器码:E9

    • 段内间接转移Jmp word。机器码:FF

    • 段间直接(远)转移Jmp far。机器码:EA

    1. 反汇编:objdump -d XX
    2. 进入十六进制编辑模式::%!xxd
    3. 查询:/
    4. 调试:gdb XXX
    5. 切回原模式:%!xxd -r

    直接修改程序机器指令,改变程序执行流程

    • 下载目标文件pwn1,利用反汇编objdump -d pwn1找到foo函数和getshell函数的机器码,分别是08048491,0804747d。利用两个地址的相对偏移来改变调用地址,从而使主函数调用getshell函数。

    • vi进入文件,并按ESC后,输入:%!xxd转化为十六进制显示模式,查找要修改的内容/e8 d7。7d比91大14,因此将d7 - 14,得到新的地址c3(可用windows计算器或将十六进制转化为十进制再转为十六进制来运算)。

    • 进入修改,并退出ESC。返回原函数:%!xxd -r,保存退出:wq

    • 反汇编查看修改情况,call指令正确调用getShell,然后执行。

    通过构造输入参数,造成BOF攻击,改变程序执行流

    该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞。而目标是触发函数getshell。
    • 输入gdb pwn20155217-2r输入测试值,info r观察eip堆栈值

    • 猜测最后八个5中某四个进入了堆栈中,为了准确,把8个5换成12345678进一步探索。

    • 发现eip堆栈值为4,即占用返回地址的压栈数据为4 3 2 1。
    • 发现溢出的字节后,只要把溢出的数据换成getshell的内存地址输入,就会运行getshell函数
    • 通过perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input生成文件输入到程序中。
    用perl来生成在ASCII界面所无法输入的16进制值。
    • (cat input; cat) | ./pwn20155217-2来进入pwn20155217-2中。

    正确构造payload进行bof攻击

    • 下载execstack并修改设置。

    • 准备shellcode

    • 注入攻击后,用另一个终端调试进程ps -ef | grep 20155217-3查看进程号,gdb调试。

    • 看到01020304的地址在0xffffd26c,修改shellcode,改为0xffffd26c挨着的地址0xffffd270,进行攻击。

    • 攻击成功。

    遇到的问题

    • 一开始注入攻击后,打开另一个终端用ps -ef | grep pwn20155217-3查找进程号失败。

    • 原因:注入攻击后先敲击了回车。事后明白了这就是老师提醒为什么不能以x0a来结束 input_shellcode的原因。
  • 相关阅读:
    关于float和double类型能表示的数据范围和精度分析
    P2737 [USACO4.1]麦香牛块Beef McNuggets 数学题 + 放缩思想
    csu 1554: SG Value 思维题
    csu 1551: Longest Increasing Subsequence Again BIT + 思维
    Rasheda And The Zeriba Gym
    cpc,a wonderful concert
    hdu_3308 区间合并
    poj_3667线段树区间合并
    poj_2777线段树+位运算
    poj_3468,线段树成段更新
  • 原文地址:https://www.cnblogs.com/yangdi0420/p/8544595.html
Copyright © 2011-2022 走看看