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

Task 1: Writing Shellcode

a: The Entire Process

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

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

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

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

截取

替换

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

b: Eliminating Zeros from the Code

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

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

前文中的处理

修改mysh

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

运行发现成功

查看机器码

查看机器码,无%0

c: Providing Arguments for System Calls

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

修改后的mysh

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

执行mysh-c

命令行直接执行ls -la

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

 mysh十六进制机器码

Task 2: Using Code Segment

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

原始代码

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

  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”

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。

section .textglobal _start_start:BITS 32jmp short twoone:pop esixor eax, eaxmov [esi+12], al   ; /usr/bin/env%0mov [esi+14], al   ; -%0mov [esi+19], al   ; a=11%0mov [esi+24], al   ; b=22%0mov [esi+25], esi  ; address of /usr/bin/env in AAAAlea ebx, [esi+13]  ; get address of -mov [esi+29], ebx  ; address of - in BBBBlea ebx, [esi+15]  ; get address of a=11mov [esi+33], ebx  ; address of a=11 in CCCClea ebx, [esi+20]  ; get address of b=22mov [esi+37], ebx  ; address of b=22 in DDDDmov [esi+41], eax  ; put NULL in EEEEmov al,  0x0b      ; pass the execve syscall number as argumentmov ebx, esilea ecx, [esi+25]  ; /usr/bin/env - a=11 b=22lea edx, [esi+41]  ; NULLint 0x80           ; execvetwo:call onedb '/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)编译并执行

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

Task 3: Writing 64-bit Shellcode

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

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

参考资料:

Shellcode Development Lab

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

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

linux 下env命令介绍 - 墨天轮

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

  1. 20155201 网络攻防技术 实验六 信息搜集与漏洞

    20155201 网络攻防技术 实验六 信息搜集与漏洞 一.实践内容 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术:主机发现.端口扫描.OS及服务版本探测.具体服务的查点 漏洞扫描: ...

  2. 2018-2019-2 20189215 《网络攻防技术》第九周作业

    教材<网络攻防技术>第九.十章学习 第9章 恶意代码安全攻防 9.1 恶意代码基础知识 恶意代码是指使计算机按照攻击者的意图执行以达到恶意目标的指令集.类型包括:计算机病毒.蠕虫.恶意移动 ...

  3. 网络攻防技术(摆烂一天)

    网络攻防技术非常基础 1. 信息采集 信息采集的重点概念: 信息采集是黑客为了更有效的实施攻击而在攻击前对被攻击目标进行探测活动(信息渗透的过程) 信息采集是渗透重要的一部分:知道的越多就可能知道的更 ...

  4. 20189216 《网络攻防技术》第六周作业

    教材和视频学习总结 一.教材内容学习总结 课本第五章主要围绕TCP/IP网络协议攻击技术进行讲述,教材中主要涉及的攻击内容如下: 网络攻击基本模式: 截获 中断 篡改 伪造 网络层协议攻击手段 IP源 ...

  5. 2018-2019-2 20189215 《网络攻防技术》第五周作业

    <Python 黑帽子>第四章 代码托管:[https://github.com/jsjliyang/python3-Black.Hat/tree/master/chapter4) 教材& ...

  6. 20169205 2016-2017-2 《网络攻防技术》第7周学习总结

    20169205 2016-2017-2 <网络攻防技术>第7周学习总结 教材学习内容总结 课本第七章主要围绕windows操作系统安全攻防技术进行讲述,教材中主要涉及的攻击内容如下: W ...

  7. 2018-2019-2 20165212《网络攻防技术》Exp5 MSF基础应用

    2018-2019-2 20165212<网络攻防技术>Exp5 MSF基础应用 攻击成果 主动攻击的实践 ms17010eternalblue payload windows/x64/m ...

  8. 2018-2019-2 20189221 《网络攻防技术》第六周作业

    2018-2019-2 20189221 <网络攻防技术>第六周作业 视频学习(21-25) KaliSecurity-密码攻击之在线攻击工具 1.Cewl 可以通过爬行网站获取关键信息创 ...

  9. 2018-2019-2 20189215 《网络攻防技术》第六周作业

    教材<网络攻防技术>第五.六章学习 第5章 TCP/IP网络协议攻击 5.1 TCP/IP协议栈攻击概述 网络安全的属性:机密性 .完整性 .可用性 .真实性 .不可抵赖性 . 网络攻击的 ...

最新文章

  1. HDU1527(博弈论)
  2. 洛谷P4216 [SCOI2015]情报传递(树剖+主席树)
  3. freebsd 域名服务器
  4. Bitlocker and BitLocker To Go
  5. 对Python中路径操作指南
  6. [pythonjava爬虫实战]-爬取学院老师信息之-java版本python版本
  7. python堆栈汉诺塔非递归_汉诺塔问题的递归解法和非递归解法(python语言实现)...
  8. java bean目录_树形目录的递归实现数据库+jsp+javabean
  9. Oracle解决Ora-01653无法扩展表空间问题
  10. python代码怎么样_python代码怎样清屏
  11. 电脑配置挑选速成攻略
  12. 计算机微信接收excel打不开怎么回事,微信打不开收到的Excel
  13. .NET学习路线总结之LINQ查询
  14. 软件项目开发中各岗位职责
  15. 东方财富开通融资融券知识测评问卷答案
  16. 苹果系统怎么链接共享服务器,mac连接共享服务器设置
  17. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
  18. GIT创建版本库及版本的迭代
  19. 用Python的networkx绘制精美网络图
  20. PATA1024_大整数运算(难度:⭐️⭐️)

热门文章

  1. excel表格如何转换成word表格_如何将excel转换成word?如何将excel表格转换成word文档?...
  2. Stimulsoft新版本2022.4 版本正式发布|附免费下载试用
  3. 深度隐藏文件或文件夹原理与应用
  4. ERROR: 报错分析 phase.raise_objection(this)不能是phase.raise_objection(phase)
  5. 销售的几种层次-销售笔记
  6. 《LeetCode之每日一题》:148.回旋镖的数量
  7. 基于微信小程序的信件收发管理平台设计
  8. 抓取taobao的IP库
  9. html5代码验证电话号码,这个我觉得挺重要的!
  10. qml 文本框获取焦点