介绍
Anaconda是Python和Conda的组合包,里面附带了不少科学计算使用的Python依赖,并且可以通过Conda进行版本管理,能够便携获得管理包
Conda不仅支持Python,还支持R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN语言(虽然大部分都用不上)
Anaconda是Python和Conda的组合包,里面附带了不少科学计算使用的Python依赖,并且可以通过Conda进行版本管理,能够便携获得管理包
Conda不仅支持Python,还支持R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN语言(虽然大部分都用不上)
红日靶场一有两种Getshell方式
方法一:木马反弹shell
方法二:永恒之蓝
由于方法一过于简单,这里尝试使用msf6及永恒之蓝漏洞
在这之前可以使用nmap扫描一下端口开启情况,我这里直接使用Goby进行一个扫
这是两道题目的WP合集,由于我只打了这两道题,所以就不分开写了(丢人)
序列化是为了方便于数据的传输,将对象转换为字节流,载入网络/磁盘IO流中,可以通过对应方法将其还原出来。
对象===【序列化】==>消息===【编码】==>字节流
总结来说就是,先把对象拆开变成一串可以还原成原对象的字符串,再通过特定编码,变为网络传输的字节流
__sleep() //使用serialize时触发
__wakeup() //执行unserialize()时,先会调用这个函数
__construct() //对象创建时触发
__destruct() //对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据
__set() //用于将数据写入不可访问的属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__toString() //把类当作字符串使用时触发
__invoke() //当脚本尝试将对象调用为函数时触发
__set_state()//调用var_export()导出类时,此静态方法会被调用。
__clone()//当对象复制完成时调用
__autoload()//尝试加载未定义的类
__debugInfo()//打印所需调试信息
此博客为比赛时协作文档的整理,包括后期复现的一些修改,感谢一起打比赛的小伙伴们
https://buuoj.cn/match/matches/89
2022年3月26日 10:00 – 2022年3月26日 18:00
【CTFd】靶场安装与配置这由于上一次的配置有点小问题,主要是Whale插件不再支持CTFd3.x版本,于是找了个新的插件使用
并且找到了更好的解决方式,不用那么麻烦配环境了
CTFd-Whale最新维护仓库
这次我采用Docker一键部署,并且稍加改动添加了中文包
成果图
最近在Github上遇到了个很好的学习正则表达式的仓库
Github-Learn-regex
对于一些正则表达式的高级应用我也不是很熟,于是来重新学习下
在线测试网站Regex101
正则表达式是一组由字母和符号组成的特殊文本,它可以用来从文本中找出满足你想要的格式的句子。
正则表达式其实就是在执行搜索时的格式,它由一些字母和数字组合而成。
例如:一个正则表达式 the
,它表示一个规则:由字母t
开始,接着是h
,再接着是e
。
"the" => The fat cat sat on the mat.
正则表达式123
匹配字符串123
。它逐个字符的与输入的正则表达式做比较。
正则表达式是大小写敏感的,所以The
不会匹配the
。
"The" => The fat cat sat on the mat.
正则表达式主要依赖于元字符。
元字符不代表他们本身的字面意思,他们都有特殊的含义。一些元字符写在方括号中的时候有一些特殊的意思。以下是一些元字符的介绍:
元字符 | 描述 |
---|---|
. | 句号匹配任意单个字符除了换行符。 |
[ ] | 字符种类。匹配方括号内的任意字符。 |
[^ ] | 否定的字符种类。匹配除了方括号里的任意字符 |
* | 匹配>=0个重复的在*号之前的字符。 |
+ | 匹配>=1个重复的+号前的字符。 |
? | 标记?之前的字符为可选. |
{n,m} | 匹配num个大括号之前的字符或字符集 (n <= num <= m). |
(xyz) | 字符集,匹配与 xyz 完全相等的字符串. |
| | 或运算符,匹配符号前或后的字符. |
\ | 转义字符,用于匹配一些保留的字符 [ ] ( ) { } . * + ? ^ $ \ | |
^ | 从开始行开始匹配. |
$ | 从末端开始匹配. |
约有如下13种:
Boolean盲注
与时间盲注类似,但是用于有明显回显情况
Union注入
最常见的注入方式之一
1' union select 1,2,database() --+
文件读写
select '<?php @eval($_POST[c]);?>' into outfile '/var/www/c.php' --+
报错注入
floor()、extractvalue()、updatexml()、geometrycollection()、multipoint()、polygon()、multipolygon()、linestring()、multilinestring()、exp()
时间盲注
sleep()
REGEXP正则匹配
PCRE绕过:union/‘+’a’1000001+’*/select
宽字节注入
运用GBK与UTF-8编码不同来绕过转义
堆叠注入
两句代码以分号等方式隔开:select * from users where id=1;select 1,2,3;
二次注入
巧妙利用update等方式,用已有的数据进行注入
User-Agent注入、11.Cookie注入
10,11两种其实只是个注入位置的区别而已,可以采用Burp或者直接Curl构造payload实现
过滤绕过
union绕过,双写绕过,注释绕过等
万能密码
admin’ or ‘1’=’1
username = secpulse’=’ password = secpulse’=’
ffifdyop
预编译
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注入。
PDO
也是一种预编译的方式,常用在PHP的数据库查询上,绑定的参数不需要使用引号,也可以有效防止注入
正则表达式过滤
实在不行,那就自己写过滤!
由于换源需求过多,又不想每一次都上网查,于是有此博客记录不同系统换源过程
PS:为什么不能有一键换源脚本呢
#备份
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
CTFd是githbu上开源的ctf靶场之一,配合上whale等插件,可以快速搭建一个靶场
以下测试环境均为Ubuntu20.04,Python3.8
CTFd官网
CTFd-Github仓库
CTFd中文汉化
由于本人更喜欢汉化风格,所以使用的均为CTFd_chinese_CN下3.4.1版本的CTFd
#如果空白环境
sudo ./prepare.sh
#如果是在宝塔环境下安装(bt自带的python会产生冲突)
sudo apt-get --fix-broken install
#如果已经安装好python环境(建议使用3.7)
sudo pip install -r requirements.txt
#配置文件CTFd/config.ini
python serve.py