【脚本】Push镜像到Dockerhub

首先你要自己制作一个Docker镜像,这个就不再赘述了,相信各位都会了

  1. COMMIT你的镜像,-p可选,为commit时暂停容器
    docker commit <容器ID> <镜像名:版本号>

    file

  2. 登录你的Dockerhub
    按提示输入账号密码

    docker login
  3. 修改规范你的镜像名
    规范为<注册用户名/镜像名>
    可以通过tag指令修改镜像名

    docker tag <旧镜像名> <新镜像名>
  4. 推送至仓库,版本号可填latest,意思是最新的容器
    docker push <镜像名:版本号>

    file
    登录Dockerhub就确认已经推送上了
    file
    如果你在windows下,且有Docker on desktop,你可以通过这样操作登录,直接push
    file

梅开二度:记得给Docker换源,不然慢死,参考脚本如下
【脚本】Linux换源汇总

【CTFd】靶场安装与配置(Docker一键配置版)

【CTFd】靶场安装与配置这由于上一次的配置有点小问题,主要是Whale插件不再支持CTFd3.x版本,于是找了个新的插件使用
并且找到了更好的解决方式,不用那么麻烦配环境了
CTFd-Whale最新维护仓库
这次我采用Docker一键部署,并且稍加改动添加了中文包
成果图
file
继续阅读【CTFd】靶场安装与配置(Docker一键配置版)

【脚本】正则表达式详解

最近在Github上遇到了个很好的学习正则表达式的仓库
Github-Learn-regex
对于一些正则表达式的高级应用我也不是很熟,于是来重新学习下
在线测试网站Regex101

什么是正则表达式?

正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。

1. 基本匹配

正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。
例如:一个正则表达式 the,它表示一个规则:由字母t开始,接着是h,再接着是e

"the" => The fat cat sat on the mat.

正则表达式123匹配字符串123。它逐个字符的与输入的正则表达式做比较。
正则表达式是大小写敏感的,所以The不会匹配the

"The" => The fat cat sat on the mat.

2. 元字符

正则表达式主要依赖于元字符。
元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍:

元字符 描述
. 句号匹配任意单个字符除了换行符。
字符种类。匹配方括号内的任意字符。
[^ ] 否定的字符种类。匹配除了方括号里的任意字符
* 匹配>=0个重复的在*号之前的字符。
+ 匹配>=1个重复的+号前的字符。
? 标记?之前的字符为可选.
{n,m} 匹配num个大括号之前的字符或字符集 (n <= num <= m).
(xyz) 字符集,匹配与 xyz 完全相等的字符串.
| 或运算符,匹配符号前或后的字符.
\ 转义字符,用于匹配一些保留的字符 ( ) { } . * + ? ^ $ \ |
^ 从开始行开始匹配.
$ 从末端开始匹配.

继续阅读【脚本】正则表达式详解

【SQLI】SQLI攻击与防护

SQL注入

约有如下13种:

  1. Boolean盲注

    与时间盲注类似,但是用于有明显回显情况

  2. Union注入
    最常见的注入方式之一

    1' union select 1,2,database() --+
  3. 文件读写

    select '' into outfile '/var/www/c.php' --+
  4. 报错注入

    floor()、extractvalue()、updatexml()、geometrycollection()、multipoint()、polygon()、multipolygon()、linestring()、multilinestring()、exp()

  5. 时间盲注

    sleep()

  6. REGEXP正则匹配

    PCRE绕过:union/‘+’a’1000001+’*/select

  7. 宽字节注入

    运用GBK与UTF-8编码不同来绕过转义

  8. 堆叠注入

    两句代码以分号等方式隔开:select * from users where id=1;select 1,2,3;

  9. 二次注入

    巧妙利用update等方式,用已有的数据进行注入

  10. User-Agent注入、11.Cookie注入

    10,11两种其实只是个注入位置的区别而已,可以采用Burp或者直接Curl构造payload实现

  11. 过滤绕过

    union绕过,双写绕过,注释绕过等

  12. 万能密码

    admin’ or ‘1’=’1
    username = secpulse’=’ password = secpulse’=’
    ffifdyop

SQL防护

  1. 预编译

    String sql="select id,no from user where id=?";
    PreparedStatement ps=conn.prepareStatement(sql);
    ps.setInt(1,id);
    ps.executeQuery();

    采用了PreparedStatement,就会将sql语句:”select id, no from user where id=?” 预先编译好也就是SQL引擎会预先进行语法分析,产生语法树,生成执行计划,也就是说,后面你输入的参数,无论你输入的是什么,都不会影响该sql语句的语法结构了,因为语法分析已经完成了,而语法分析主要是分析sql命令,比如 select ,from ,where ,and, or ,order by 等等。
    所以即使你后面输入了这些sql命令,也不会被当成sql命令来执行了,因为这些sql命令的执行,必须先的通过语法分析,生成执行计划,既然语法分析已经完成,已经预编译过了,那么后面输入的参数,是绝对不可能作为sql命令来执行的,只会被当做字符串字面值参数。
    所以sql语句预编译可以防御sql注入。

  2. PDO

    也是一种预编译的方式,常用在PHP的数据库查询上,绑定的参数不需要使用引号,也可以有效防止注入

  3. 正则表达式过滤

    实在不行,那就自己写过滤!

继续阅读【SQLI】SQLI攻击与防护