网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

这篇具有很好参考价值的文章主要介绍了网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络攻防技术实验,实验环境、实验说明、实验代码见 Shellcode Development Lab

Task 1: Writing Shellcode

a: The Entire Process

1)编译mysh.s得到二进制文件

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

2)执行1)中的二进制文件,结果如下图,我们看到运行mysh之前的PID与运行mysh之后的PID是不同的,证明我们通过mysh启动了一个新的shell。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

3)获取机器码,以便进一步提取shellcode所需要的二进制机器码,如下图所示。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

4)使用xxd命令打印出二进制文件的内容,从打印输出中找到shell的机器码,由3)可知机器码的起始和结尾分别为31c0、cd80,因此截取二者之间的内容,并将内容复制到convert.py中。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 截取

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 替换

5)执行convert.py文件,得到shellcode中包含的16进制形式的机器码如下:

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

b: Eliminating Zeros from the Code

1)task里给的操作如下图。但我们不允许添加额外的,机器码中不能出现0我的理解是,汇编码里不能出现类似push “”的操作,因此考虑其他构造方法。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

2)我们参考前文中对0的处理,将”h####为占位符赋值给ebx,然后左移24bit,右移24bit,让”h###”变为”h%0%0%0”,其他部分原理不变。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 前文中的处理

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 修改mysh

3)运行并查看机器码,发现更改有效且不存在%0

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 运行发现成功

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 查看机器码

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 查看机器码,无%0

c: Providing Arguments for System Calls

1) 修改mysh,将/bin/sh -c "ls -la"压入栈中,通过#占位和左右移的方式来引入空格。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 修改后的mysh

2)编译并执行mysh-c直接在命令行中输入“ls -la”,观察到二者结果相同。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 执行mysh-c

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 命令行直接执行ls -la

3)查看mysh.o的二进制机器码,发现没有0。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 mysh十六进制机器码

Task 2: Using Code Segment

1)对①-②处的代码进行解释

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 原始代码

按代码执行顺序而非从上至下的顺序:

  1. call one                   :将函数one压入栈中,再跳转到函数one
  2. db ‘xxxx’                  :构建由命令、分隔符、占位符构成的字符串
  3. pop                          :将栈中最顶层的值2中字符串pop装入ebx中
  4. xor eax, eax            :通过异或将eax置0
  5. mov [ebx+7], al       :把2中字符串的*的位置替换为%0,用于截断
  6. mov [ebx+8], ebx    :把命令”/bin/sh”的地址赋给占位符AAAA
  7. mov [ebx+12], eax  :把BBBB赋值为NULL
  8. Lea                          :把命令”/bin/sh”的地址赋给ecx
  9. xor edx, edx            :把edx置为NULL
  10. mov al 0x0b            :把execve系统调用号作为参数传入
  11. Int 0x80                  :调用128号中断

最终,mysh2.s可用c语言总结为:

        char *command[] = {"/bin/sh", NULL};

        execve(command[0], command, NULL);

2)env用于打印环境变量,env后加“-”表示参数选项,因此构造字符串“/usr/bin/env - a=11 b=22”

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 3)构造字符串并在mysh2.s基础上进行修改。

思路和mysh2.s一致,先将用%0替代分割位来截断,再将地址赋值给占位符,最后对寄存器进行处理,构造的命令为 /usr/bin/env - a=11 b=11,最终构造的字符串为'/usr/bin/env*-*a=11*b=22*AAAABBBBCCCCDDDDEEEE',其中*是分隔符,后续会通过mov [esi+x], al操作被赋予0,AAAABBBBCCCCDDDDEEEE是占位符,分别填充四个子命令的地址和最后一个传递给execve的参数NULL。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

section .text
  global _start
    _start:
        BITS 32
	    jmp short two
    one:
 	    pop esi
     	xor eax, eax
 	
 	    mov [esi+12], al   ; /usr/bin/env%0
 	    mov [esi+14], al   ; -%0
 	    mov [esi+19], al   ; a=11%0
 	    mov [esi+24], al   ; b=22%0
 	
 	    mov [esi+25], esi  ; address of /usr/bin/env in AAAA
 	
 	    lea ebx, [esi+13]  ; get address of -
 	    mov [esi+29], ebx  ; address of - in BBBB
 	
 	    lea ebx, [esi+15]  ; get address of a=11
 	    mov [esi+33], ebx  ; address of a=11 in CCCC
 	
 	    lea ebx, [esi+20]  ; get address of b=22
 	    mov [esi+37], ebx  ; address of b=22 in DDDD
 	    
 	    mov [esi+41], eax  ; put NULL in EEEE
 	
 	    mov al,  0x0b      ; pass the execve syscall number as argument
 	    mov ebx, esi
 	    lea ecx, [esi+25]  ; /usr/bin/env - a=11 b=22
 	    lea edx, [esi+41]  ; NULL

 	    int 0x80           ; execve
    two:
 	    call one
 	    db '/usr/bin/env*-*a=11*b=22*AAAABBBBCCCCDDDDEEEE' 

 最终,修改后的mysh2.s可用c语言总结为:

        char *command[] = {"/usr/bin/env", "-", "a=11", "b=22" NULL};

        execve(command[0], command, NULL);

4)编译并执行

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 如果忘加--omagic会出现segmentation fault,--omagic选项使代码段可写。

Task 3: Writing 64-bit Shellcode

1)参考b: Eliminating Zeros from the Code中左右移位将占位符替换为%0的操作修改mysh_64,代码如下:

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

 2)编译并运行,发现成功。

网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)

参考资料:

Shellcode Development Lab

使用netcat进行反弹链接的shellcode - xxxxxxxx1x2xxxxxxx - 博客园

用汇编语言构造简单的shellcode(64位&&32位)以及将汇编语言转换成机器码的方法 - ZikH26 - 博客园

linux 下env命令介绍 - 墨天轮文章来源地址https://www.toymoban.com/news/detail-412064.html

到了这里,关于网络攻防技术-Lab5-shellcode编写实验(SEED Labs – Shellcode Development Lab)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络攻防原理与技术】第3章:网络侦察技术

    ⽹络侦察需要侦察的⽬标的基本信息 静态信息 各种联系信息,包括姓名、邮箱、电话号码等 DNS、Web服务器 主机所在的⽹络段,IP地址 ⽹络拓扑结构 动态信息 ⽬标主机是否开机 ⽬标主机是否安装了你所感兴趣的软件 ⽬标主机安装的操作系统种类 ⽬标主机上是否有安全漏洞

    2024年02月11日
    浏览(37)
  • 1.4 编写简易ShellCode弹窗

    在前面的章节中相信读者已经学会了使用 Metasploit 工具生成自己的 ShellCode 代码片段了,本章将继续深入探索关于 ShellCode 的相关知识体系,ShellCode 通常是指一个原始的可执行代码的有效载荷,攻击者通常会使用这段代码来获得被攻陷系统上的交互Shell的访问权限,而现在用于

    2024年02月11日
    浏览(35)
  • 1.6 编写双管道ShellCode

    本文将介绍如何将 CMD 绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道、启动进程、传输数据等方面对这个功能进行详细讲解。此外,本文还将通过使用汇编语言一步步来实现这个可被注入的 ShellCode 后门

    2024年02月10日
    浏览(66)
  • 【网络安全】-- 网络渗透技术攻防(--更新中)

    1.1.1 什么是网络渗透攻击 “网络渗透攻击”是对大型的网络主机服务器群组采用的一种迂回渐进式的攻击方法,通过长期而有计划的逐步渗透攻击进入网络,最终控制整个网络。 1.1.2 网络渗透测试的意义 渗透测试是受信任的第三方进行的一种评估网络安全的活动,它通过运

    2024年02月13日
    浏览(53)
  • 1.5 编写自定位ShellCode弹窗

    在笔者上一篇文章中简单的介绍了如何运用汇编语言编写一段弹窗代码,虽然简易 ShellCode 可以被正常执行,但却存在很多问题,由于采用了硬编址的方式来调用相应API函数的,那么就会存在一个很大的缺陷,如果操作系统的版本不统或系统重启过,那么基址将会发生变化,

    2024年02月11日
    浏览(477)
  • 1.6 编写双管道ShellCode后门

    本文将介绍如何将 CMD 绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道、启动进程、传输数据等方面对这个功能进行详细讲解。此外,本文还将通过使用汇编语言一步步来实现这个可被注入的 ShellCode 后门

    2024年02月12日
    浏览(223)
  • 1.8 运用C编写ShellCode代码

    在笔者前几篇文章中,我们使用汇编语言并通过自定位的方法实现了一个简单的 MessageBox 弹窗功能,但由于汇编语言过于繁琐在编写效率上不仅要考验开发者的底层功底,还需要写出更多的指令集,这对于普通人来说是非常困难的,当然除了通过汇编来实现 ShellCode 的编写以

    2024年02月15日
    浏览(63)
  • 网络安全攻防技术:移动安全篇

    随着移动通信技术和移动应用的普及,无线网络、移动智能设备等正以前所未有的速度迅猛发展,已经渗透到了社会的各个方面,成为人们生产和生活不可或缺的工具和手段。此外,被誉为继计算机、互联网之后世界信息产业发展的第三次浪潮的物联网,亦得益于无线网络、

    2024年04月09日
    浏览(46)
  • 【网络攻防技术】实验八——SQL注入实验

    SQL注入是一种代码注入技术,它利用web应用程序和数据库服务器之间接口中的漏洞。当用户的输入在发送到后端数据库服务器之前未在web应用程序中正确检查时,就会出现此漏洞。许多web应用程序从用户处获取输

    2024年02月08日
    浏览(31)
  • 网络攻防原理与技术 第一章 课后题

    1.安全属性“CIA”不包括(D)。 A.完整性 B.机密性 C.可用性 D.可控性 2.属于被动攻击的是(B)。 A.中断 B.截获 C.篡改 D.伪造 3.下列攻击中,主要针对可用性的攻击是(A)。 A.中断 B.截获 C.篡改 D.伪造 4.下列攻击中,主要针对完整性的攻击是(C)。 A.中断 B.截获 C.篡改 D.伪造

    2024年02月01日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包