渗透测试步骤
信息收集
搜集一些IP地址以及对应的端口开放情况,看看是否有80、3306、22等等端口开放,以及操作系统和版本号,同时也要扫描可能存在的漏洞
漏洞利用
建立据点
漏洞利用成功后,通常会在目标机上获得一个webshell,虽然webshell可以执行命令和管理文件,但毕竟不是真正的shell,而且也不稳定,因此就需要反弹shell到一个稳定的环境
反弹shell会遇到的问题:
反弹命令不存在
禁止出口流量
限定向外访问端口
流量审查
权限提升和维持
反弹shell:
攻击机在自己的主机上开启一个监听端口,然后诱使受害者去执行一个反向连接的命令,连接回攻击者的机器
常用的反弹shell命令
nc、telnet、awk、exec
基于编程语言反弹shell
PHP、Java、Ruby、Perl、Python
加密反弹shell
在攻击机上生成证书
然后在攻击机上进行监听
最后在目标机上执行反弹
正向连接脚本
首先在目标主机创建一个python文件,里面代码的功能就是正向连接攻击机
其次在目标主机上执行这个python文件
最后在攻击机上进行监听,实现正向连接
对于lampiao靶机的入侵实战:
首先进行信息搜集,获取其IP地址以及对应的端口开放情况,操作系统以及版本号
当然也可以使用Nessus进行扫描
扫描出来的端口为22,80,1898
对于22端口来说的话,我们可以使用工具进行爆破
当然也可以使用御剑对后台文件进行扫描
接着我们基于搜集出来的信息去msf看一下是否有存在的已知漏洞可以利用
MsfVenom木马制作
第一种方法就是直接制作一个木马上传到目标主机上
第二种方法就是进程注入,使用msfvenom将木马注入到一个进程中,然后上传到目标机器上
第三种方法就是程序捆绑,就是将制作的木马与一个应用程序进行捆绑,当应用程序上线的时候,木马也会上线,比如使用putty.exe进行实验
如何制作一个免杀的木马
可以适用编码或代码混淆来生成木马
同时msfvenom也只支持生成很多格式的可执行文件
比如asp、aspx,dll等
使用shellcode生成木马
1、利用python执行shellcode
我们可以使用msfvenom来生成shellcode,然后将shellcode和加载器代码放到一个python文件当中去,然后去执行这个python文件,然后就能够上线了
当然也可以使用pyinstaller工具将其打包为exe文件,上传至杀毒软件看其能否免杀
2、python加载器实现免杀
也就是使用Shellcode Loader这个工具
将我们生成的shellcode使用这个工具的加密程序进行加密,输出一个加密过后的Shellcode,然后将这个加密过后的shellcode复制到Shellcode.py的密文那里,然后运行这个文件,使其上线成功,然后使用pyinstaller生成exe,看看是否免杀
免杀基础与加解密
免杀的概念:能使病毒木马被杀毒软件查杀的技术
杀毒的原理:
静态查杀
动态查杀
云查杀
免杀的方法:
1、对Shellcode进行加密处理
2、对加载器代码进行加密或编码处理
3、分离免杀
4、使用进程注入或使用傀儡进程
5、通过加壳的方式对木马进行混淆
Linux系统提权
1、工具的使用
使用linux-exploit- suggester或者Nessus进行主机漏洞扫描,结合扫描出来的漏洞进行提权
2、SUDO提权(内核漏洞导致的提权)
使用命令sudoedit -s /看看系统回显内容,如果是not a regular file,则说明存在SUDO这个漏洞,如果是其他的话就没有了
我们就当存在这个漏洞,使用sudo -l看看该登录有没有root权限,如果有的话直接提权成功
3、SUID命令提权
如果该用户有s的权限,那么它允许用户执行的文件以文件拥有者的身份去运行,也就是越权执行命令
我们可以执行find命令去看哪个文件具有s的权限,但并不是所有文件具有s权限就能够实现提权了,比如说是/bin/bash、/bin/cat、/bin/find、/bin/env、/bin/vi等等
4、Cron定时任务
使用crontab -l或者cat /var/spood/cron/root
如果找到可以有权限修改的计划任务脚本,就可以去修改脚本实现提权,本质上就是文件配置不当
基本原理:借助root用户的定时任务,去修改其运行的脚本,用关键命令授予SUID权限
5、环境变量提权
开发一段C程序进行执行,里面包含命令执行,包括cat、vi等等,然后进行编译成新的文件,然后为编译的程序授予S权限
假如说C程序里的命令是cat,我们就进入到系统的临时目录中,将/bin/bash复制到临时目录的cat文件里,然后为其添加新的环境变量,然后去执行这个文件就能实现提权,前提是用户得有权限写文件和添加新的环境变量
Linux权限维持
1、创建账户
1.1 修改/etc/passwd,创建拥有root权限的用户
1.2 创建拥有sudo权限的账号
先创建一个普通用户,而后在/etc/passwd文件中为该用户添加sudo权限
1.3 普通用户➕SUID shell
先将/bin/bash复制到/bin/.shell目录里,是为了能够让.shell文件隐藏起来,不容易被发现,然后使用普通用户去执行这个文件即可实现提权
2、文件属性修改
2.1 修改文件创建时间
2.2 创建隐藏文件
2.3 文件上锁,防止用户直接删除文件
3、SSH后门
3.1 软连接后门
建立一个软连接,然后通过5555端口扫描访问ssh服务
3.2 SSH隐身登录
隐身登录系统,不会被last who w等指令检测到
3.3 上传公钥,ssh免密登录
客户端生成对应的公钥和私钥,然后在服务端/root的目录下创建一个.ssh目录,上传公钥到此目录下,并修改文件名为authorized_keys,上传方式有很多种,比如使用scp上传,接着去检查服务器的ssh配置,要将允许使用公钥登录的设置打开
3.4 ssh warpper后门
4、Crontab定时任务
创建一个Crontab定时任务,但很容易被发现,我们可以利用cat隐藏将一部分内容隐藏起来,再添加no crontab for whoami,让用户以为没有定时任务
原理就是cat打开文件时会遇到一些特殊的符号,比如\r,\n,\f,输出内容换页换行导致隐藏前面的部分内容
5、自启动脚本
只要执行了这些脚本,在条件触发的时候会进行任意提权命令
6、其他方式
6.1 cat隐藏
可以隐藏php一句话木马
6.2 隐藏进程
基于Redis实战
Redis : 缓存服务器,数据都保存到内存中,所有的I/O操作全部都在内存中进行,如果断电或者停止服务,数据就会消失,而内存型数据库恰好可以弥补类似于MySQL等关系数据库在硬盘当中进行I/O操作的速度上的局限
如何利用Redis来实现提权甚至入侵
第一种方案就是使用Redis写定时任务
第二种方案就是直接写我们的后门文件、shell、一句话木马
第一种方案:
为什么Redis可以进行写文件的操作?
因为Redis有一个持久化的操作,默认情况下Redis写的数据是写到了后缀名为aof或者rdb的文件下,我们可以去配置这个路径,使其写到一个我们比较熟悉的目录下,写入进去之后就去访问
第二种方案:写定时任务
比如说就写一个创建一个具有root权限的普通用户的定时任务,然后使用该用户去远程登录
SSRF+Redis内网渗透
基于SSRF来进行内网渗透
需要用到伪协议,dict和gopher
dict适用于Redis没有密码进行登录的,因为它不支持维持session
gopher适用于Redis有密码的,因为gopher可以构造各种TCP层面的请求包
然后我们就能通过gopher来写入一句话木马
第四个方法就是使用Python去进行连接并发送数据
其核心在于data值的构建,data里面要输入一些参数,也就是说要将数据包构造出来,构造出来之后就可以进内网进行操作了
dict只支持Redis的单条命令,而gopher可以很好的处理批命令
对于gopher来说,遇见回车换行就要用%0d%0a进行一个替换,同时要将data数据进行url编码,让%替换%25
基于Redis提权实战
对于修复建议,我们不仅要对Redis设置密码,而且还要设置成复杂的密码,然后将配置文件的r的那个权限给拿掉,不能够o+r,只能让root用户去读,其他任何账号都不能读取这个文件,还有一个,最好不要用root去启动Redis,最好是新建一个账号去启动redis服务,这样就不会像root一样去处理了,这样的话其他用户就没有权限往root根目录那里去写文件了
Windows系统提权
1、UDF提权
即用户自定义函数
本提权适用于MySQL 5.5.59以下版本
先通过爆破获取MySQL的账号,如果能够爆破出来密码的话,就直接登录到数据库当中,然后使用navicat进行连接
连接上需要进行的操作是先确认MySQL的写文件权限,看看师傅拥有任意路径的写文件
,然后再去确认MySQL的插件目录,并由此推断HTTP的主目录,接着需要确认系统中是否存在sys_exec的函数,如果不存在的话需要使用UDF进行自行定义
然后进入到MSF中进行漏洞利用,使用的模块是multi/mysql/mysql_udf_payload,run之后会将dll文件复制到plugin的目录下,同时exec函数也会创建成功
exec只会返回一个指令,0和非0,0代表成功,非0代表失败,而eval会返回结果
我们也可以运行以下脚本来创建用户自定义函数eval,如果执行成功的话,我们就可以使用eval函数了,接着我们去看看该系统正在登录的用户有啥权限,如果权限高的话,可以通过创建一个角色将其放入到本地管理员组中,这样我们就可以进行远程登录了,并且还是超级管理员的权限
2、MOF提权
MOF指的是托管对象格式,是一种文件类型,每隔一段时间就会以System权限执行一次,我们可以通过root权限下的mysql将该文件写入到路径下,以达到提权的目的,提权条件:
1、mysql允许远程连接
2、secure_priv_file的值为空
接着我们使用漏洞模块exploit/windows/mysql/mysql_mof进行入侵提权