【脚本】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 '<?php @eval($_POST[c]);?>' 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攻击与防护

【脚本】Linux换源汇总

由于换源需求过多,又不想每一次都上网查,于是有此博客记录不同系统换源过程
PS:为什么不能有一键换源脚本呢

Apt-get

换源方式

#备份
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
#修改源
sudo vi /etc/apt/sources.list
#更新源
sudo apt-get update
#如出现依赖问题
sudo apt-get -f install
#更新软件:
sudo apt-get upgrade

继续阅读【脚本】Linux换源汇总

【CTFd】靶场安装与配置

CTFd是githbu上开源的ctf靶场之一,配合上whale等插件,可以快速搭建一个靶场

CTFd

以下测试环境均为Ubuntu20.04,Python3.8
CTFd官网
CTFd-Github仓库
CTFd中文汉化
由于本人更喜欢汉化风格,所以使用的均为CTFd_chinese_CN下3.4.1版本的CTFd

  1. 克隆CTFd代码并安装相关依赖
    #如果空白环境
    sudo ./prepare.sh
    #如果是在宝塔环境下安装(bt自带的python会产生冲突)
    sudo apt-get --fix-broken install
    #如果已经安装好python环境(建议使用3.7)
    sudo pip install -r requirements.txt
  2. 下载CTFd_chinese_CN-v3.4.1并将CTFd目录覆盖到你的项目目录
  3. 运行,默认运行在http://127.0.0.1:4000,你可以通过更改配置文件使其监听0.0.0.0,或者使用nginx反代,此处使用后者
    #配置文件CTFd/config.ini
    python serve.py

    继续阅读【CTFd】靶场安装与配置

【脚本】安卓虚拟机配置

本文分为CM-x86和WSA(Win11安卓子系统)两部分

CM-x86

CM-x86是Android-x86的衍生版本,用作PC的安卓虚拟机再好不过
我使用的是CM-x86-14.1(64位),以下为配置
file
在安装时有以下几步

  1. GPT安装 NO
  2. 创建新磁盘(New)->设置为启动盘(bootable)->写入分区表(Write)
  3. 安装Grub引导
  4. EXT4文件格式
  5. Reboot重启即可

但是完成以上几步,只能进入到安卓的Shell模式,无法进入图形界面,可以选择下面第三个的nomodeset模式
file

继续阅读【脚本】安卓虚拟机配置

【CRYPTO】MD5算法详解

前言

MD5是一种哈希算法,用来保证信息的完整性。
就一段信息对应一个哈希值,且不能通过哈希值推出这段信息,而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。
不过MD5算法算出来的值也就16byte(即128bit),肯定存在相同的,找到另一个所花时间长短而已。

填充信息

我们要对一个字符串进行MD5计算,那么肯定要从这个字符串的处理入手。
我们知道一个字符的长度是1个byte,即8bit的长度。
MD5对待加密的字符串的处理是将一个字符串分割成每512bit为一个分组,形如N*512+R,这里的R是余下的位数。这个R分为几种情况:

  • R=0时,需要补位,单补上一个512bit的分组,因为还要加入最后64个位的字符串长度。
  • R<448时,则需要补位到448位,后面添加64位的字符串长度。
  • R>448时,除了补满这一分组外,还要再补上一个512位的分组后面添加64位的原字符串长度。

补位的形式是先填充一个1,再接无数个0,直到补足512位。

举例:
消息内容为“HUANG”,就能得到以下内容

48 55 41 4E 47 80 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 [28 00 00 00 00 00 00 00]低位在左边

最后面这里有个0x28,数8个字节,就是0x0000000000000028,刚刚好是十进制的40,消息的内容是5个byte,也就是40bit
还要注意到这里是小端字节序存储

继续阅读【CRYPTO】MD5算法详解

【MISC】Wordle

TQLCTF-Wordle题目出自当下火热的填字游戏
填字游戏的规则为输入五个字母,然后分别返回五个颜色

  • 绿色:位置和字母均正确
  • 黄色:字母正确位置不正确
  • 灰色:字母和位置均不正确

我们的任务就是用最少的次数,把答案找出来
在该题目中,颜色可以通过字节流分辨出来。在这之前,我在B站大学看到过一个讲述相关技术的视频,于是我就翻了下。
利用信息论解决Wordle问题
理论存在,实践开始
于是,又写了一个10K的代码,发现自己的代码只能做到平均4.3左右。
好废物啊我
于是上Github找轮子Wordle-solver
这个开源项目能做到平均3.4,然后就有了如下10K代码

继续阅读【MISC】Wordle