mysql中的%3cif%3e_PHP中MD5常见绕过

PHP中md5的绕过

md5($password,true)的SQL注入问题

两变量值不相等,md5计算散列值后相等的绕过

MD5碰撞

函数:

md5($string,bool): 得到一个字符串散列值。

其中第二个参数默认为false,表示该函数返回值是32个字符的十六进制数。

若指定为true,则表示函数返回的是16字节的二进制格式(这样通过浏览器解析会出现乱码)。

md5($password,true)的SQL注入问题

这里需要注意一下MYSQL中的一些数值比较的特征。

1.当数字和字符串比较时,若字符串的数字部分(需要从头开始)和数字是相同的,那么则返回的是true。

select if(1="1a","相等","不相等") as test

if(exp1,stat1,stat2):类似于高级语言中三元运算符。当exp1为true的是否返回stat1,为false返回stat2

46d50b9e647e6cb879556b6383b36ab7.png

2.以数字开头的字符串,若开头的字符不是0,那么在做逻辑运算的时候返回的是1,也就是true。

比如以下语句就是一个万能密码的例子:

select * from user where password =''or'1234a';

解释一下:'1234a’会被当做true对待。而任何数和true做逻辑或运算返回的值都是true.

5f7ba17722901ae4c8db8b024ce15b0b.png

看这个md5($password,true)的漏洞

select * from usera where username = 'admin' and password = md5($pass,true)

若我们可找到字符串,在对该字符串进行md5后能够得到 'or’加上一个非0的字符就可以绕过。这里我们可以用到的字符串为:ffifdyop。它的md5结果是:276f722736c95d99e921722cf9ed621c 。通过这个结果我们可以发现得到16字节的二进制被解析为字符的结果是:'or’6后面接乱码 (27是单引号的16进制编码,67是字母o的16进制…)这样后构造的sql语句就位

select * from user where password=' 'or'6xxx'

和上面分析的万能密码是一致的。

两变量值不相等,md5计算散列值后相等的绕过

==的绕过

PHP中==是判断值是否相等,若两个变量的类型不相等,则会转化为相同类型后再进行比较。PHP在处理哈希字符串的时候,它把每一个以0e开头的哈希值都解析为0。常见的如下:

在md5加密后以0E开头

QNKCDZO

240610708

s878926199a

s155964671a

一下值在sha1加密后以0E开头

aaroZmOk

aaK1STfY

payload: /?a=QNKCDZO&b=240610708

if($_GET['a'] !== $_GET['b']){

if(md5($_GET['a']) == md5($_GET['b'])){

echo "flag";

}

}

?>

===的绕过

===会比较类型,这个时候可以用到PHP中md5()函数无法处理数组(会返回NULL)来实现绕过。

payload: /?a[]=1&b[]=2 (上面==的例子也可以用数组绕过)

if($_GET['a'] !== $_GET['b']){

if(md5($_GET['a']) === md5($_GET['b'])){

echo "flag";

}

}

?>

MD5碰撞

这里给出不同字符串但是MD5后值相同的情况

$s1 = "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47%aa%78%49%6e%0a%c0%c0%31%d3%fb%cb%82%25%92%0d%cf%61%67%64%e8%cd%7d%47%ba%0e%5d%1b%9c%1c%5c%cd%07%2d%f7%a8%2d%1d%bc%5e%2c%06%46%3a%0f%2d%4b%e9%20%1d%29%66%a4%e1%8b%7d%0c%f5%ef%97%b6%ee%48%dd%0e%09%aa%e5%4d%6a%5d%6d%75%77%72%cf%47%16%a2%06%72%71%c9%a1%8f%00%f6%9d%ee%54%27%71%be%c8%c3%8f%93%e3%52%73%73%53%a0%5f%69%ef%c3%3b%ea%ee%70%71%ae%2a%21%c8%44%d7%22%87%9f%be%79%6d%c4%61%a4%08%57%02%82%2a%ef%36%95%da%ee%13%bc%fb%7e%a3%59%45%ef%25%67%3c%e0%27%69%2b%95%77%b8%cd%dc%4f%de%73%24%e8%ab%66%74%d2%8c%68%06%80%0c%dd%74%ae%31%05%d1%15%7d%c4%5e%bc%0b%0f%21%23%a4%96%7c%17%12%d1%2b%b3%10%b7%37%60%68%d7%cb%35%5a%54%97%08%0d%54%78%49%d0%93%c3%b3%fd%1f%0b%35%11%9d%96%1d%ba%64%e0%86%ad%ef%52%98%2d%84%12%77%bb%ab%e8%64%da%a3%65%55%5d%d5%76%55%57%46%6c%89%c9%df%b2%3c%85%97%1e%f6%38%66%c9%17%22%e7%ea%c9%f5%d2%e0%14%d8%35%4f%0a%5c%34%d3%73%a5%98%f7%66%72%aa%43%e3%bd%a2%cd%62%fd%69%1d%34%30%57%52%ab%41%b1%91%65%f2%30%7f%cf%c6%a1%8c%fb%dc%c4%8f%61%a5%93%40%1a%13%d1%09%c5%e0%f7%87%5f%48%e7%d7%b3%62%04%a7%c4%cb%fd%f4%ff%cf%3b%74%28%1c%96%8e%09%73%3a%9b%a6%2f%ed%b7%99%d5%b9%05%39%95%ab";

$s2 = "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47%aa%78%49%6e%0a%c0%c0%31%d3%fb%cb%82%25%92%0d%cf%61%67%64%e8%cd%7d%47%ba%0e%5d%1b%9c%1c%5c%cd%07%2d%f7%a8%2d%1d%bc%5e%2c%06%46%3a%0f%2d%4b%e9%20%1d%29%66%a4%e1%8b%7d%0c%f5%ef%97%b6%ee%48%dd%0e%09%aa%e5%4d%6a%5d%6d%75%77%72%cf%47%16%a2%06%72%71%c9%a1%8f%00%f6%9d%ee%54%27%71%be%c8%c3%8f%93%e3%52%73%73%53%a0%5f%69%ef%c3%3b%ea%ee%70%71%ae%2a%21%c8%44%d7%22%87%9f%be%79%6d%c4%61%a4%08%57%02%82%2a%ef%36%95%da%ee%13%bc%fb%7e%a3%59%45%ef%25%67%3c%e0%27%69%2b%95%77%b8%cd%dc%4f%de%73%24%e8%ab%66%74%d2%8c%68%06%80%0c%dd%74%ae%31%05%d1%15%7d%c4%5e%bc%0b%0f%21%23%a4%96%7c%17%12%d1%2b%b3%10%b7%37%60%68%d7%cb%35%5a%54%97%08%0d%54%78%49%d0%93%c3%b3%fd%1f%0b%35%11%9d%96%1d%ba%64%e0%86%ad%ef%52%98%2d%84%12%77%bb%ab%e8%64%da%a3%65%55%5d%d5%76%55%57%46%6c%89%c9%5f%b2%3c%85%97%1e%f6%38%66%c9%17%22%e7%ea%c9%f5%d2%e0%14%d8%35%4f%0a%5c%34%d3%f3%a5%98%f7%66%72%aa%43%e3%bd%a2%cd%62%fd%e9%1d%34%30%57%52%ab%41%b1%91%65%f2%30%7f%cf%c6%a1%8c%fb%dc%c4%8f%61%a5%13%40%1a%13%d1%09%c5%e0%f7%87%5f%48%e7%d7%b3%62%04%a7%c4%cb%fd%f4%ff%cf%3b%74%a8%1b%96%8e%09%73%3a%9b%a6%2f%ed%b7%99%d5%39%05%39%95%ab";

$s3 = "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47%aa%78%49%6e%0a%c0%c0%31%d3%fb%cb%82%25%92%0d%cf%61%67%64%e8%cd%7d%47%ba%0e%5d%1b%9c%1c%5c%cd%07%2d%f7%a8%2d%1d%bc%5e%2c%06%46%3a%0f%2d%4b%e9%20%1d%29%66%a4%e1%8b%7d%0c%f5%ef%97%b6%ee%48%dd%0e%09%aa%e5%4d%6a%5d%6d%75%77%72%cf%47%16%a2%06%72%71%c9%a1%8f%00%f6%9d%ee%54%27%71%be%c8%c3%8f%93%e3%52%73%73%53%a0%5f%69%ef%c3%3b%ea%ee%70%71%ae%2a%21%c8%44%d7%22%87%9f%be%79%ed%c4%61%a4%08%57%02%82%2a%ef%36%95%da%ee%13%bc%fb%7e%a3%59%45%ef%25%67%3c%e0%a7%69%2b%95%77%b8%cd%dc%4f%de%73%24%e8%ab%e6%74%d2%8c%68%06%80%0c%dd%74%ae%31%05%d1%15%7d%c4%5e%bc%0b%0f%21%23%a4%16%7c%17%12%d1%2b%b3%10%b7%37%60%68%d7%cb%35%5a%54%97%08%0d%54%78%49%d0%93%c3%33%fd%1f%0b%35%11%9d%96%1d%ba%64%e0%86%ad%6f%52%98%2d%84%12%77%bb%ab%e8%64%da%a3%65%55%5d%d5%76%55%57%46%6c%89%c9%df%b2%3c%85%97%1e%f6%38%66%c9%17%22%e7%ea%c9%f5%d2%e0%14%d8%35%4f%0a%5c%34%d3%73%a5%98%f7%66%72%aa%43%e3%bd%a2%cd%62%fd%69%1d%34%30%57%52%ab%41%b1%91%65%f2%30%7f%cf%c6%a1%8c%fb%dc%c4%8f%61%a5%93%40%1a%13%d1%09%c5%e0%f7%87%5f%48%e7%d7%b3%62%04%a7%c4%cb%fd%f4%ff%cf%3b%74%28%1c%96%8e%09%73%3a%9b%a6%2f%ed%b7%99%d5%b9%05%39%95%ab";

### uni-app 中 `Failed to decode param` 报错解决方案 在 UniApp 项目中遇到类似于 `Failed to decode param &#39;%3C%=%20BASE_URL%20%%3Estatic/index.%3C%=%20VUE_APP_INDEX_CSS_HASH%20%%3E.css&#39;` 的错误,通常是因为路径解析失败或者资源未被正确加载所致。以下是针对该问题的具体分析与解决方法: #### 错误原因 此错误的核心在于 URL 参数中的特殊字符未能被正确解码。具体来说,`<%= BASE_URL %>` 和 `<%= VUE_APP_INDEX_CSS_HASH %>` 是模板占位符,在某些情况下可能未被替换为实际值,从而导致浏览器无法识别并抛出异常。 --- #### 解决方案 ##### 方法一:调整静态资源配置路径 通过修改项目的配置文件(如 `manifest.json` 或者自定义的构建脚本),确保静态资源路径设置合理。可以尝试如下方式: 1. **检查 `publicPath` 配置** 如果项目中有类似的 `publicPath` 设置逻辑,则需区分开发环境和生产环境分别处理[^3]。 修改 `vue.config.js` 文件(如果存在)或新增类似配置: ```javascript module.exports = { publicPath: process.env.NODE_ENV === &#39;development&#39; ? &#39;/&#39; : &#39;./&#39; }; ``` 2. **清理无用占位符** 确保 HTML 模板或其他地方不存在未被替换的变量占位符(如 `<%= BASE_URL %>`)。这些占位符应由编译工具动态注入真实值。 --- ##### 方法二:优化 PWA 图标配置 对于涉及 PWA 功能的项目,可以通过重新指定图标路径的方式规避潜在问题。参考 Vue CLI 的做法[^4],可以在 `pages.json` 或其他全局配置文件中加入以下内容: ```json { "pwa": { "iconPaths": { "favicon32": "static/favicon.ico", "favicon16": "static/favicon.ico", "appleTouchIcon": "static/favicon.ico", "maskIcon": "static/favicon.ico", "msTileImage": "static/favicon.ico" } } } ``` 上述代码明确了各个尺寸图标的存储位置,避免因默认路径不匹配引发错误。 --- ##### 方法三:修正 CSS 资源哈希命名冲突 当 CSS 文件名包含复杂的哈希字符串时,可能会触发编码问题。建议关闭不必要的文件指纹功能或将生成规则标准化。例如编辑 Webpack 插件选项: ```javascript module.exports = { configureWebpack: { output: { filename: &#39;[name].js&#39;, chunkFilename: &#39;[id].[contenthash:8].chunk.js&#39; }, optimization: { splitChunks: { cacheGroups: { commons: { test: /[\\/]node_modules[\\/]/, name: &#39;vendors&#39;, chunks: &#39;all&#39; } } } } } }; ``` 以上片段控制了打包后的文件名称格式,减少复杂度的同时也降低了发生 URI 编码错误的概率。 --- ##### 方法四:升级依赖版本 部分旧版框架可能存在兼容性缺陷,因此更新至最新稳定版本往往能有效解决问题。执行命令刷新所有必要的包: ```bash npm install --save-dev @dcloudio/uni-cli@latest npm update vue-loader webpack ``` --- ### 总结 综合来看,此类报错主要源于路径拼接不当或是特定场景下的插件行为失常。按照前述四种策略逐一排查即可找到根本原因并妥善修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值