Qunie构造型注入(payload===password)

Qunie构造原理

即让某个字符串经过某个变换过程后仍然等于他本身

而在mysql中,可以使用replace函数去构造Qunie

构造的模板:

其中B的编码是为了在替换的时候保持中间的参数不被替换

S = REPLACE('A',B的编码,'A')
A = REPLACE("B",B的编码,"B")

替换后:

S = REPLACE('REPLACE("B",B的编码,"B")',B的编码,'REPLACE("B",B的编码,"B")') 

当我们将 A 里面的 ”B“ 替换后,即为

P = REPLACE("REPLACE("B",B的编码,"B")",B的编码,"REPLACE("B",B的编码,"B")" 

这个与S已经非常相似了,但单双引号不同

 

单双引号替换

接着我们去想办法替换掉刚才构造后产生的双引号:

如果我们直接在上述的 P 的外面替换,就会导致多替换,因为在P中内部的双引号是正确的,只有最外围的双引号是错误的,那么只能S转化之前对A进行操作

思考的方法即为,让A中的双引号在变换的时候给变成单引号,既然这样子那肯定要变换两次

那么接下来尝试构造 S , A :

S = REPLACE(REPLACE('A',CHAR(34),CHAR(39)),B的编码,'A')
A = REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")

构造一起则为

P = REPLACE(REPLACE('REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")',CHAR(34),CHAR(39)),B的编码,'REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")') 

在这一大串里面,S的第二个replace会先将A中的双引号替换为单引号,第一次替换过后是这样的

REPLACE('REPLACE(REPLACE('B',CHAR(34),CHAR(39)),B的编码,'B')',B的编码,'REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")')

在进行一次替换

REPLACE(REPLACE('REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")',CHAR(34),CHAR(39)),B的编码,'REPLACE(REPLACE("B",CHAR(34),CHAR(39)),B的编码,"B")')

与S相同,满足Qunie的构造

 

S 和 A 很相似,除了第一个形参和第二个形参以及形参上的引号不一样外,其他是一样的,这或许可以有助于记忆

构造自动生成脚本

Qunie构造脚本(payload==password).py

花了好大功夫写的