Thinkphp 5.x RCE漏洞

Thinkphp 5.x RCE漏洞

0x0 概要

Thinkphp为MVC处理结构,通过对路由的解析,使用控制器调用函数。
由于对兼容模式的路由处理没有进行过滤等,可以调用命名空间下的任意函数,从而产生了RCE漏洞。

Read More

树相关-从决策树到kaggle大杀器

决策树

决策树的最优分支选择

分类树

  1. 枚举所有可能的划分,每次计算一个代价值,取代价最低的分裂方法。
  2. 设定一个阈值,若超过,则分裂。

回归树

  1. 在一次分裂时,遍历所有划分方法(每次划分为两组,分别计算损失函数并相加),找出损失函数和最小的作为本次分裂;然后使用递归划分出所有可能。
  2. 预测时,使用分组的组内平均数作为该组所有元素的预测值;损失函数可以用该组的各值与该组的平均数的残差平方和。

    Read More

数据预处理及训练结果评估

数据预处理及训练结果评估

归一化(标准化)

1
2
3
4
#库名
from sklearn import preprocessing
#使用方法
X_scaled = preprocessing.scale(X)

Read More

2018省赛AWD web writeup

2018年省赛AWD web writeup

  • 一点寒暄 > 本次比赛还是有很多遗憾,AWD做的太少,再加上经验不足,导致结果不好看,下面开始填坑。

  • 网站框架、版本分析
    在ThinkPHP路径下找到ThinkPHP.php文件,在其中找到版本号3.2.3,本版本存在缓存漏洞。
    找到之后,搜索出相同出处的网页: 主页 搜索结果 阅读获得thinkphp缓存漏洞的提示。

    Read More

2018年巅峰极客 Web部分writeup

A simple cms writeup

做此题之前刚好做了一道原题,比赛的时候是做到最后一步的,但是出了差错没有出flag,很气。

  • 首先,打开连接,发现是onethink1.0框架。搜索该框架的漏洞,果然发现了getshell利用过程,原理如下: > 该框架是对thinkphp框架的二次开发,会将注册后的用户名内容存入临时php文件中。
    我们使用一句话来作为用户名注册账户,在登录后就将其存入缓存文件,最后访问缓存文件即可完成getshell。

原理比较简单,但是具体利用过程有几个关键点: 1. 注册用户名由于特殊字符不能直接输入进输入框。 2. 存放一句话的临时文件名并不知道。

Read More

VIM初步

VIM使用初步

  • 一般指令
    查看帮助: help xxx

  • 修改文本指令:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    A:到行首第一个非空字符并输入
    I:到行尾最后一个非空字符并输入
    c:删除光标所在(后跟其他范围指令表示删除该范围)
    d:剪切一行
    x:剪切一个字符
    dtx :删除所有的内容,直到遇到x号(delete to x)
    <ctrl + a>:当前数加1
    <ctrl + x>:当前数减1
    <ctrl + p\n>:p:向前补全;n:向后补全。

  • 粘贴模式
    set paste

    Read More

matplotlib初步学习

matplotlib学习

使用matplotlib.pylab库画图

  • matplotlib可以用来作为机器学习可视化的作图工具,在这里简单记录一下常用的一些画图方法。

    Read More

杂·sklearn 保存训练结果

一、使用joblib保存结果

代码如下:

1
2
3
4
5
6
7
8
9
from sklearn.externals import joblib
#此处假设已训练好的模型为learnClassifier
#保存训练模型
joblib.dump(learnClassifier, 'learnClassifier.model')
#载入训练模型
learnClassifier = joblib.load('learnClassifier.model')

Read More

对逻辑回归的进一步理解

概要

  • 逻辑回归即使用一个超平面将整个空间一分为二,并且在边界附近赋予连续(即不是非黑即白,而是可以有0-1之间的小数概率)的概率估计的二分类方法。

  • 逻辑回归使用\(θX\)作为划分数据的边界。

  • 逻辑回归使用

\[ g( Z) =\frac{1}{1+e^{Z}} \]

替代离散的分布函数,其中,g(Z)即概率统计中的分布函数,可根据极大似然估计得到使用已有样本点估计的近似值:从理论上来讲,此时的似然函数应该是最大的,可以用梯度上升法求之。

Read More

numpy数组常用处理函数

numpy数组常用处理函数

  • numpy 数组是python机器学习常用的数据结构,在这里简单记下常见的使用方法和一些初学时遇到的问题
  1. 注意事项
  • 使用数组时不要犯低级错误,注意行数和列数,不要搞反了。
  • np.array转化宽度不一致的数组时会出现未知错误,使用时要谨慎。
  • numpy使用元组作为引用,容易和多维数组按层拆分搞混,多维数组不支持元组索引(numpy也支持按层拆分)如:a[1,2]b[1][2]
  • 注意矩阵乘法转置。
  • 注意numpy不是默认二维数组, 若矩阵为向量,则只有shape[0](即向量长度为shape[0]而不是它作为矩阵时的shape[1]): [1,2,3,4] 看作矩阵: shape:[1,4] 看作向量:shape:[4]
  • 在维度不匹配的时候可以加上shape先判断。
  • 矩阵第一个参数为行数,第二个为列数...申请空白2维矩阵:(0,2)
  • 添加新行:
    np.append(red,[vx],axis=0)此处的vx必须升维到与大矩阵相同,axis表示添加一行
    yellow=np.r_[yellow,[vx]],道理同上

    Read More