Python安全编程可以做什么?
目录扫描
Web+多线程{requests + threading + Queue: [后台 | 敏感文件(svn|upload)| 敏感目录(phpmyadmin)]}
信息收集
Web + 数据库{中间件(Tomcat | Jboss)+ C断 Web 信息 + 搜集特定程序}
信息匹配&SQL注入
Web + 正则{抓取信息(用户名 + 邮箱)+ SQL注入}
反弹shell
网络
是不是已经心动了呢?
一、Python 正则表达式
1. 正则表达式
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的表达式。关于字符串中转义的问题,强烈推荐使用原生字符串类型来书写正则表达式,即只需要在表达式前面加 r 即可。
2. re库详解
2.1 正则表达式常用的函数
函数 | 说明 |
---|---|
re.match() | 从字符串的起始位置开始匹配,匹配成功返回一个匹配的对象,否则返回None |
re.search() | 扫描整个字符串并返回第一个成功匹配的 |
re.findall() | 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表;如果没有找到则返回一个空列表 |
re.split() | 将字符串按正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 在字符串中找到正则表达式所匹配的所有字串,并将所有字串的结果作为一个迭代器返回 |
re.sub() | 将字符串中所有匹配的正则表达式的地方替换成新的字符串 |
语法说明如下: |
语法:re.match(pattern, string, flags=0)
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等;flags=0表示不进行特殊指定
import re
matchStr = 'Cats are smarter than dogs'
matchObj = re.match(r'(.*) are (.*?) .*', matchStr, re.M|re.I)
if matchObj:
print("matchObj.group(): ", matchObj.group())
print("matchObj.group(1): ", matchObj.group(1))
print("matchObj.group(2): ", matchObj.group(2))
print("matchObj.group3(): ", matchObj.groups())
else:
print("No match!")
matchObj.group(): Cats are smarter than dogs
matchObj.group(1): Cats
matchObj.group(2): smarter
matchObj.groups(): ('Cats', 'smarter')
关于正则表达式中的flag位:
标志位 | 说明 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.L | 使本地化识别匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据 Unicode 字符集解析字符,这个标识影响 w, W, , B. |
flag=0 | 表示不进行特殊指定 |
2.2 正则表达式模式
模式 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾 |
. | 匹配除了换行符意外的任意字符 |
[...] | 表示一组字符,单独列出:[amk] 匹配 'a','m'或'k' |
[^...] | 不在[]内的字符:[^abc]匹配除了a, b, c之外的字符 |
re* | 匹配0个或多个的表达式 |
re+ | 匹配1个或多个的表达式 |
re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪模式 |
........... | 还有很多暂时用不上的,后续补充 |
2.3. 贪婪模式和非贪婪模式
python 中默认的是贪婪模式;
贪婪模式:尝试匹配尽可能多的字符;
非贪婪模式:尝试匹配尽可能少的字符
start_at = 'good'
match_start = re.match(r'^g.*', start_at)
match_start.group()
'good'
match_start = re.match(r'^g.*?', start_at)
match_start.group()
'g'