emlog 6.0特别版的BUG些 emlog
声明:本文仅供爱好者折腾参阅,且由于我这是我很久之前的手记,如有遗漏,表意不明的请多包涵。
一点关于安装出现错误编号2002的可能办法:
第一个就是发文章标签打不上之数据库标签表 emlog_tag
从emlog5.3.1升级过来或者是自己瞎折腾后发现发文章标签打不上或者没了的多半是这个原因。
gid 的值 开头和结尾必须是 英文逗号 不然 问的标签 不能存入 且...
fastadmin(V1.0.0.20200506_beta)前台getshell(文件上传解析)漏洞分析 渗透测试
0x1.简介
FastAdmin是一款基于ThinkPHP和Bootstrap的极速后台开发框架。
补天平台介绍:近日,补天漏洞响应平台监测到互联网上出现Fastadmin文件上传漏洞,exp被公开。该漏洞源于网络系统或产品的代码开发过程中存在设计或实现不当的问题,可导致文件上传并解析为可执行文件。目前厂商已发布新版本修复此漏洞,补天漏洞响应平台建议受影响的客户将框架更新至安全版本。
影响版本:V1.0.0.20180911_beta~V1.0.0.20200506_beta
修复建议:
升级Fastadmin版本到V1.0.0.20200920_beta,详见官网链接:
https://www.fastadmin.net/download.html
0x2.漏洞详情
利用限制:需要开启会员中心功能,且登录会员中心。
/application/config.php 文件中:
//是否开启前台会员中心 'usercenter' => true,
漏洞分析
/application/index/User.php 文件
第58-67行:
public function _empty($name) { $data = Hook::listen("user_request_empty", $name); foreach ($data as $index => $datum) { $this->view->assign($datum); } return $this->view->fetch($name); }
user_request_empty 为开发者预留的钩子可以忽视不看,主要看 return $this->view->fetch($name);
此方法中的 $name 参数可控,并且将 $name 的值传入到了 fecth() 函数中。
fetch() 为thinkphp的解析模板函数,其返回模板文件渲染后的内容
fetch() 函数的关键内容如下:
public function fetch($template, $data = [], $config = []) { if ('' == pathinfo($template, PATHINFO_EXTENSION)) { // 获取模板文件名 $template = $this->parseTemplate($template); } // 模板不存在 抛出异常 if (!is_file($template)) { throw new TemplateNotFoundException('template not exists:' . $template, $template); } // 记录视图信息 App::$debug && Log::record('[ VIEW ] ' . $template . ' [ ' . var_export(array_keys($data), true) . ' ]', 'info'); $this->template->fetch($template, $data, $config); }
继续调用栈可以看下其实这个fetch()函数调用的是内置模板引擎的fetch方法, 这个方法实际上就是将要输出的页面内容赋值给一个变量,为了方便,thinkphp在对模板渲染的过程中,添加了php标签功能,使得其可以解析php代码。
总之一句话,这个漏洞其实就是由于对传入变量过滤不严导致的模板引擎注入漏洞,只要控制了传入模板的文件,就可以利用模板本身的渲染功能,实现包含漏洞getshell
另外需要注意的是,当验证传入的模板是否是文件时,使用的 is_file() 函数,这个函数在Linux下和windows下的判断会有所不同,具体如下:
1、在linux下利用 is_file() 来判断类似于 /****/../../../../etc/passwd 文件时,如果 **** 是不存在的目录,则会返回false,在windows下 ,这个目录存在与否,均返回true,如下图所示:
2、在linux下, is_file() 函数判可用于判断符号链接
3、在linux下, is_file 函数会受到权限的影响,当前用户权限不足或父目录没有设置+x权限时, is_file() 会返回false
4、windows系统里面 / 和 \ 都可以使用,但是在linux下只能使用 / 来分隔路径,因此这会导致 is_file() 在不同系统下的返回结果不一致
5、 is_file() 判断文件时,如果文件大小超过2^32时,会判断失败
0x3.漏洞验证
通过前文可知,这个漏洞的利用点在 _empty() 函数,需要注意的是,在官方文档中通常 _empty() 方法是用来判断一个方法是否存在,如果不存在,则进入该函数。而这里是开发者自定义的方法,因此直接传入 _empty 方法,调用name参数即可。
利用过程如下:
在前台的会员中心,个人资料处,上传修改头像:
抓包后修改图片数据(满足图片头格式即可):
记录下路径后,成功getshell
在Linux下,通过这种方法会失效,因为在 /public 路径下不存在 user 目录,由前文中的知识点可以知道,当不存在这个目录的时候,无论怎么跳转目录, is_file() 函数返回的结果始终未false,因此无法利用该漏洞,如下图所示:
当我们在 /public 目录下创建文件夹 /user ,在利用,即可成功:
文章出自:https://forum.90sec.com/t/topic/1294
作者:https://forum.90sec.com/u/panda
大家可以投稿90注册啊!给你们投票!哈哈哈
【译】Mysql 中的 "utf8" 编码是个假的 utf-8,请使用 True utf-8 编码:"utf8mb4" 代码人生
注:以下文章为译文,也是我最近遇到的MySQL问题,故摘抄在此做备用,如有侵权,请联系我,我会立即处理。
最近我遇到了一个 bug,我试着通过 Rails 在以“utf8”编码的 MariaDB 中保存一个 UTF-8 字符串,然后出现了一个离奇的错误:
Incorrect string value: ‘\xF0\x 9F \x 98 \x 83 <…’ for column ‘summary’ at row 1
我用的是 UTF-8 编码的客户端,服务器也是 UTF-8 编码的,数据库也是,就连要保存的这个字符串“ <…”也是合法的 UTF-8。
问题的症结在于,MySQL 的“utf8”实际上不是真正的 UTF-8。
“utf8”只支持每个字符最多三个字节,而真正的 UTF-8 是每个字符最多四个字节。
MySQL 一直没有修复这个 bug,他们在 2010 年发布了一个叫作“utf8mb4”的字符集,绕过了这个问题。
当然,他们并没有对新的字符集广而告之(可能是因为这个 bug 让他们觉得很尴尬),以致于现在网络上仍然在建议开发者使用“utf8”,但这些建议都是错误的。
简单概括如下:
-
MySQL 的“utf8mb4”是真正的“UTF-8”。
-
MySQL 的“utf8”是一种“专属的编码”,它能够编码的 Unicode 字符并不多。
我要在这里澄清一下:所有在使用“utf8”的 MySQL 和 MariaDB 用户都应该改用“utf8mb4”,永远都不要再使用“utf8”。
那么什么是编码?什么是 UTF-8?
我们都知道,计算机使用 0 和 1 来存储文本。比如字符“C”被存成“01000011”,那么计算机在显示这个字符时需要经过两个步骤:
-
计算机读取“01000011”,得到数字 67,因为 67 被编码成“01000011”。
-
计算机在 Unicode 字符集中查找 67,找到了“C”。
同样的:
-
我的电脑将“C”映射成 Unicode 字符集中的 67。
-
我的电脑将 67 编码成“01000011”,并发送给 Web 服务器。
几乎所有的网络应用都使用了 Unicode 字符集,因为没有理由使用其他字符集。
Unicode 字符集包含了上百万个字符。最简单的编码是 UTF-32,每个字符使用 32 位。这样做最简单,因为一直以来,计算机将 32 位视为数字,而计算机最在行的就是处理数字。但问题是,这样太浪费空间了。
UTF-8 可以节省空间,在 UTF-8 中,字符“C”只需要 8 位,一些不常用的字符,比如“”需要 32 位。其他的字符可能使用 16 位或 24 位。一篇类似本文这样的文章,如果使用 UTF-8 编码,占用的空间只有 UTF-32 的四分之一左右。
MySQL 的“utf8”字符集与其他程序不兼容,它所谓的“”,可能真的是一坨……
MySQL 简史
为什么 MySQL 开发者会让“utf8”失效?我们或许可以从提交日志中寻找答案。
MySQL 从 4.1 版本开始支持 UTF-8,也就是 2003 年,而今天使用的 UTF-8 标准(RFC 3629)是随后才出现的。
旧版的 UTF-8 标准(RFC 2279)最多支持每个字符 6 个字节。2002 年 3 月 28 日,MySQL 开发者在第一个 MySQL 4.1 预览版中使用了 RFC 2279。
同年 9 月,他们对 MySQL 源代码进行了一次调整:“UTF8 现在最多只支持 3 个字节的序列”。
是谁提交了这些代码?他为什么要这样做?这个问题不得而知。在迁移到 Git 后(MySQL 最开始使用的是 BitKeeper),MySQL 代码库中的很多提交者的名字都丢失了。2003 年 9 月的邮件列表中也找不到可以解释这一变更的线索。
不过我可以试着猜测一下。
2002 年,MySQL 做出了一个决定:如果用户可以保证数据表的每一行都使用相同的字节数,那么 MySQL 就可以在性能方面来一个大提升。为此,用户需要将文本列定义为“CHAR”,每个“CHAR”列总是拥有相同数量的字符。如果插入的字符少于定义的数量,MySQL 就会在后面填充空格,如果插入的字符超过了定义的数量,后面超出部分会被截断。
MySQL 开发者在最开始尝试 UTF-8 时使用了每个字符 6 个字节,CHAR(1) 使用 6 个字节,CHAR(2) 使用 12 个字节,并以此类推。
应该说,他们最初的行为才是正确的,可惜这一版本一直没有发布。但是文档上却这么写了,而且广为流传,所有了解 UTF-8 的人都认同文档里写的东西。
不过很显然,MySQL 开发者或厂商担心会有用户做这两件事:
-
使用 CHAR 定义列(在现在看来,CHAR 已经是老古董了,但在那时,在 MySQL 中使用 CHAR 会更快,不过从 2005 年以后就不是这样子了)。
-
将 CHAR 列的编码设置为“utf8”。
我的猜测是 MySQL 开发者本来想帮助那些希望在空间和速度上双赢的用户,但他们搞砸了“utf8”编码。
所以结果就是没有赢家。那些希望在空间和速度上双赢的用户,当他们在使用“utf8”的 CHAR 列时,实际上使用的空间比预期的更大,速度也比预期的慢。而想要正确性的用户,当他们使用“utf8”编码时,却无法保存像“”这样的字符。
在这个不合法的字符集发布了之后,MySQL 就无法修复它,因为这样需要要求所有用户重新构建他们的数据库。最终,MySQL 在 2010 年重新发布了“utf8mb4”来支持真正的 UTF-8。
为什么这件事情会让人如此抓狂
因为这个问题,我整整抓狂了一个礼拜。我被“utf8”愚弄了,花了很多时间才找到这个 bug。但我一定不是唯一的一个,网络上几乎所有的文章都把“utf8”当成是真正的 UTF-8。
“utf8”只能算是个专有的字符集,它给我们带来了新问题,却一直没有得到解决。
总结
如果你在使用 MySQL 或 MariaDB,不要用“utf8”编码,改用“utf8mb4”。这里(https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4)提供了一个指南用于将现有数据库的字符编码从“utf8”转成“utf8mb4”。
英文原文:https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
原文作者:Adam Hooper
翻译原文:https://www.infoq.cn/article/in-mysql-never-use-utf8-use-utf8
译文作者:无明
「更新」油猴脚本---freebuf文章图片去除!small并自动缩放图片大小到100% 技术文章
我之前写过一篇文章是关于freebuf文章图片去除!small得,地址在这里:https://mrxn.net/jswz/modify_freebuf_pic.html,但是后来我发现有一个BUG,很严重得那种:因为我当时在写插件的时候是在文章全部浏览完后直接写得,这也就导致了我当时忽略了 freebuf 的图片是懒加载的,这样的话如果还是像我之前那样直接去除图片 src 末尾的 !small ,会导致没有在第一屏内的图片不会被渲染出来!so ,趁着这次五一国际劳动节放假当天,我就来更新来了!本次更新重新设计了一下,就是取消掉了那个小标签添加,在文章页面禁用了lazyload加载,当你读文章慢慢往下滚动的时候就可以自动去除图片末尾的 !small 了,而且回自动修改图片的宽度属性到 100% (受父节点限制,不会撑爆的),尽可能的显示图片大小从而方便阅读。
Greasy Fork 在线下载安装
B站源码泄露后续-GO代码行数、网警锁定、关键词过滤、人气倍率、真假播放量、作弊粉丝数 业界新闻
关于SQL中join的各种用法总结 技术文章
首先声明:文章来源于国外的 codeproject 我这里只是由于复习SQL的时候需要就Google搜索[可以用我个人搭建的Google搜索供大家搜索文章学习使用]了一下,找到这篇文章,再次做个简单的记录同时也方便以后的有缘人,如有侵权的地方还请来信注明,感谢原文的作者的勤劳付出,留下如此详细全面的关于SQL的join的用法。
codeproject是国外一个免费的可以公开自己写的代码与程序的优秀网站有点类似于GitHub只不过是社区版,在这个网站所有用户都可以发布自己写过的代码,程序,或者是详细的文档说明。比国内的cnblog、csdn都要好,如果要说缺点的话,就是全英文的,当然大部分还是比较容易理解的。但是codeproject也有中文区: https://www.codeproject.com/Forums/1580230/General-Chinese-Topics.aspx ,感兴趣的可以去注册玩。
我们先用一张图来看一下 LEFT JOIN、RIGHT JOIN、INNER JOIN、OUTER JOIN 等七种 join 相关的用法:
下面分开说明这七种用法,先说第一种:
1.INNER JOIN(内连接)
这是最简单,最容易理解的Join,也是最常见的。此查询将返回左表(表A)中右表(表B)中都具有匹配记录的所有记录(共同拥有的相同的部分)。此Join用法的代码大致如下:
SELECT <select_list> FROM Table_A A INNER JOIN Table_B B ON A.Key = B.Key
2.LEFT JOIN
(左连接)
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。此Join用法的代码大致如下:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key
3.RIGHT JOIN
(右连接)
RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。此Join用法的代码大致如下:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key
4.OUTER JOIN
(外连接)
FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行. FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。此Join用法的代码大致如下:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key
5.LEFT JOIN EXCLUDING INNER JOIN
(左连接-内连接)
此查询将返回左表(表A)中与右表(表B)中的任何记录都不匹配的所有记录。此Join的编写如下:
SELECT <select_list> FROM Table_A A LEFT JOIN Table_B B ON A.Key = B.Key WHERE B.Key IS NULL
6.RIGHT JOIN EXCLUDING INNER JOIN
(右连接-内连接)
此查询将返回右表(表B)中与左表(表A)中的任何记录都不匹配的所有记录。此Join的编写如下:
SELECT <select_list> FROM Table_A A RIGHT JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL
7.OUTER JOIN EXCLUDING INNER JOIN
(外连接-内连接)
此查询将返回左表(表A)中的所有记录以及右表(表B)中都不匹配的所有记录。我还没有需要使用这种类型的Join,但是其他的类型,我经常使用。此Join的编写如下:
SELECT <select_list> FROM Table_A A FULL OUTER JOIN Table_B B ON A.Key = B.Key WHERE A.Key IS NULL OR B.Key IS NULL
下面举一些例子:
TABLE_A PK Value ---- ---------- 1 FOX 2 COP 3 TAXI 6 WASHINGTON 7 DELL 5 ARIZONA 4 LINCOLN 10 LUCENT TABLE_B PK Value ---- ---------- 1 TROT 2 CAR 3 CAB 6 MONUMENT 7 PC 8 MICROSOFT 9 APPLE 11 SCOTCH这七种连接方式的结果如下所示:
-- INNER JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A INNER JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- 1 FOX TROT 1 2 COP CAR 2 3 TAXI CAB 3 6 WASHINGTON MONUMENT 6 7 DELL PC 7 (5 row(s) affected)
-- LEFT JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A LEFT JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- 1 FOX TROT 1 2 COP CAR 2 3 TAXI CAB 3 4 LINCOLN NULL NULL 5 ARIZONA NULL NULL 6 WASHINGTON MONUMENT 6 7 DELL PC 7 10 LUCENT NULL NULL (8 row(s) affected)
-- RIGHT JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A RIGHT JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- 1 FOX TROT 1 2 COP CAR 2 3 TAXI CAB 3 6 WASHINGTON MONUMENT 6 7 DELL PC 7 NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 (8 row(s) affected)
-- OUTER JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A FULL OUTER JOIN Table_B B ON A.PK = B.PK A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- 1 FOX TROT 1 2 COP CAR 2 3 TAXI CAB 3 6 WASHINGTON MONUMENT 6 7 DELL PC 7 NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 5 ARIZONA NULL NULL 4 LINCOLN NULL NULL 10 LUCENT NULL NULL (11 row(s) affected)
-- LEFT EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A LEFT JOIN Table_B B ON A.PK = B.PK WHERE B.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- 4 LINCOLN NULL NULL 5 ARIZONA NULL NULL 10 LUCENT NULL NULL (3 row(s) affected)
-- RIGHT EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A RIGHT JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 (3 row(s) affected)
-- OUTER EXCLUDING JOIN SELECT A.PK AS A_PK, A.Value AS A_Value, B.Value AS B_Value, B.PK AS B_PK FROM Table_A A FULL OUTER JOIN Table_B B ON A.PK = B.PK WHERE A.PK IS NULL OR B.PK IS NULL A_PK A_Value B_Value B_PK ---- ---------- ---------- ---- NULL NULL MICROSOFT 8 NULL NULL APPLE 9 NULL NULL SCOTCH 11 5 ARIZONA NULL NULL 4 LINCOLN NULL NULL 10 LUCENT NULL NULL (6 row(s) affected)注:原文连接:https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
写个了油猴脚本-freebuf文章图片去除!small 技术文章
写这个脚本的原因就是我发现freebuf的文章里的图片后缀都会跟一个 !small 后缀,我想网站初心可能是为了对付爬虫吧,恶意爬虫爬去文章文字和图片,但是对于我这种懒虫,不喜欢点击一下放大去看图,而是比较喜欢文章的图片就是页面最佳尺寸,简单的研究了一下,发现去掉文章里的图片的 !small 后缀后,文章图片默认就会显示最佳尺寸了!简直Nice啊!但是每次这么去手动修改太麻烦了,如果文章图片太多,那岂不是要累死?于是这个脚本就出来了!效果如下的动图演示:
使用:前提是在油猴脚本支持的浏览器(比如chrome,Firefox这些现代浏览器),在油猴插件里面自己粘贴我发布在GitHub仓库的代码或者是从Greasy Fork 在线下载安装 (强烈推荐)
【实用reg文件分享】设置cmd为utf-8&在此处打开CMD&让 Windows 时钟显示精确到秒 技术文章
【实用reg文件分享】设置cmd为utf-8&在此处打开CMD&让 Windows 时钟显示精确到秒
在实际使用中,我们经常需要使用cmd处理一些小东西,比如解密脚本啊等:cmd默认的编码方式不支持utf-8的,会乱码:
这时候如果我们使用命令:chcp 65001 即可让cmd命令行支持utf-8的编码格式,就不会乱码了:
在我解决这个问题之前,Google了好久,结果是有很多文章看得我是云里雾里。。。不知所云。最后还是找到了一些零散的信息,最终通过实践验证,加上Google查资料,于是就自己写了个注册表文件导入后就可以安心食用了。下载文件我放在最后,代码也会贴出来。
还有另外两个注册表文件,一个是【在此处打开CMD】另一个是【让 Windows 时钟显示精确到“秒”】。
【在此处打开CMD】 主要是方便我们直接在某个文件夹直接打开cmd并且不用去cd切换路径。效果如下:
【让 Windows 时钟显示精确到“秒”】顾名思义:让Windows的时钟显示秒数。效果如下:
下面就是代码:
Windows Registry Editor Version 5.00 ;# -*- coding: utf-8 -*- ;# @Author: Mrxn ;# @Blog: https://mrxn.net/ ;# @DateTime: 2018-10-30 20:25:51 Tuesday ;# @Description: this is the default description for Mrxn ;# ; ; 下载【cmd-utf-8_seconds.zip】 ;【解压!】【解压!】【解压!】重要的事说三遍! ; 解压后,进入 【cmd-utf-8_seconds】文件夹,双击 【设置cmd为utf-8.reg】弹出的对话框按次序选择 【是】【是】【确定】即可。 ; 打开你的cmd.exe 输入 chcp 回车 看到如下类似的信息就表明成功了,以后每次打开cmd就都支持utf-8编码了 ; Active code page: 65001 ; C:\WINDOWS\system32>chcp ; Active code page: 65001 ; C:\WINDOWS\system32> ; 注意:作者在Windows10 1803 中测试没问题。 ;第一个是设置chcp 65001(十六进制),but,貌似没用啥作用 [HKEY_CURRENT_USER\Console\%SystemRoot%_system32_cmd.exe] "CodePage"=dword:0000fde9 "FaceName"="Lucida Console" ;真正起作用的 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor] "autorun"="chcp 65001" ;设置字体的,不喜欢的可以删除或者是修改成自己喜欢的字体(前提是你的电脑里面有这个字体) [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont] "936"="*Lucida Console" ;小伙砸,看你骨骼精奇,都看到这里了没来我博客逛逛啊 --->https://mrxn.net<
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere] @="在此处打开命令提示符" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd "%V"" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Directory\Background\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\Drive\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\"" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere] @="在此处打开命令窗口" "Icon"="cmd.exe" [HKEY_CLASSES_ROOT\LibraryFolder\background\shell\OpenCmdHere\command] @="cmd.exe /s /k pushd \"%V\""
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced] "ShowSecondsInSystemClock"=dword:00000001 [HKEY_CURRENT_USER\Control Panel\International] "sLongDate"="yyyy '年' M '月' d '日' dddd" "sShortDate"="yyyy '年' M '月' d '日' dddd" "sTimeFormat"="HH:mm:ss" "sShortTime"="HH:mm:ss" "sYearMonth"="yyyy '年' M '月'"
附件下载:
PS:这周就会更新 kms脚本和宝塔面板开启域名SSL登录脚本,感谢发邮件反馈bug的朋友。
宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题 Linux
PS:最近因为工作原因,很忙,没时间写博客,各位读者,当你们每次打开都没有更新的时候,给你们说一声抱歉。
Onekey-Open-BT-panel-ssl-with-domain
宝塔(bt.cn)面板开启域名登录并且使用域名证书,解决浏览器信任证书问题,强迫症福音@_@
- 注意 :
目前使用此shell需要你在宝塔后台面板里面建一个需要绑定到面板的域名网站,最好申请Let's SSL证书,当然,shell也支持自定义证书路径。 只测试了建立网站后的,没有测试过不用建立网站,直接解析域名到服务器(这种未来会支持的,使用 acme.sh 来申请SSL证书或者是自定义证书都可以)
shellcheck
推荐一个可以检查shell语法的网站,超级好用.也可以安装到自己的机器上:使用方法:
- 直接wget到本地执行就可以根据提示操作了:
wget https://raw.githubusercontent.com/Mr-xn/Onekey-Open-BT-panel-ssl-with-domain/master/Onekey-Open-BT-panel-ssl-with-domain.sh && bash Onekey-Open-BT-panel-ssl-with-domain.sh
- ToDo
- 支持自定义证书
- 不需要宝塔后台添加域名
- 添加宝塔常用命令:重置面板密码、重置封禁IP列表、更改端口等等
shell编程报错:“syntax error near unexpected token `” 代码人生
因为测试exp...在Kali测试正常....不小心在windows下用sublime编辑了一下...再去linux运行就出错了..
运行报错syntax error near unexpected token `..
左看右看shell脚本没有问题,没有办法google搜索,发现一位仁兄讲的挺好,内容如下:
用命令vi -b 打开你的SHELL脚本文件,你会。发现每行脚本最后多了个^M。
那么接下来就要搞清楚这个^M是什么东东?
long long ago..... 老式的电传打字机使用两个字符来另起新行。一个字符把滑动架移回首位 (称为回车,<CR>,ASCII码为0D),另一个字符把纸上移一行 (称为换行, <LF>,ASCII码为0A)。当计算机问世以后,存储器曾经非常昂贵。有些人就认定没必要用两个字符来表示行尾。UNIX 开发者决定他们可以用 一个字符来表示行尾,Linux沿袭Unix,也是<LF>。Apple 开发者规定了用<CR>。开发 MS-DOS以及Windows 的那些家伙则决定沿用老式的<CR><LF>。
因为MS-DOS及Windows是回车+换行来表示换行,因此在Linux下用Vim查看在Windows下用VC写的代码,行尾后的“^M”符号,表示的是符。
在Vim中解决这个问题,很简单,在Vim中利用替换功能就可以将“^M”都干掉,键入如下替换命令行:
1)vi -b setup.sh
2)在命令编辑行<就是: 按ESC键 然后shift+:冒号>输入:%s/^M//g
注意:上述命令行中的“^M”符,不是“^”再加上“M”,而是由“Ctrl+v”、“Ctrl+M”键生成的。
这样替换掉以后,保存就可以执行了。当然还有其他的替换方式比如:
a.一些linux版本有 dos2unix 程序,可以用来祛除^M。
b.cat filename1 | tr -d "/r" > newfile 去掉^M生成一个新文件,还有sed命令等,凡是可以替换的命令都是可以用来新生成一个文件的。
按照上面所说的,删除^M后 ,shell脚本就运行正常.切记.sh脚本不要再Windows下编辑...各种诡异的错误...
PS:另外小计一下在测试exp时候,
执行curl -sSL 提示curl: (35) SSL connect error ,解决方法----
升级网络安全服务即可(centos): yum update nss.