php的盲注脚本怎么写,Blind SQL Injection SQL盲注的利用方法及总结

0x00 概 述

从2006年开始,SQL注入已经成为Web安全的重点了,随着管理员的安全意识加强,注入已经不再是那么简单了。从注入过滤和绕过注入等等,安全爱好者和管理员一直持续着猫和老鼠的游戏。本文描述在Blind SQL Injection中的利用技巧,并非绕过过滤的总结。

0x01 何为盲注

盲注和普通的SQL注入原理是一样的(老生常谈的话题),不同在哪里?普通注入是会显示一些错误信息在页面上给攻击者判断,也就是说它会有多种情况,从而方便攻击者。而盲注则是只有两种情况,即TRUE和FALSE,这样说并不是很准确,因为SQL查询无非就这两种情况,应该说是盲注的时候你只能得到一个正常的页面或者是什么页面的不存在,甚至你在查询表的记录过程也不会有显示。还是不大理解,那么就继续往下看,我会试图尽力让大家明白这个问题。另外一点,盲注用工具很难进行注入(其实,有国外牛人写的一些程序,我测试了一下,效果不大理想),所以这里要重视手工注入技巧。

0x02 检测盲注点

和普通的SQL注入类似,老样子两条语句判断。

And 0=0 和 And 0=1

根据返回结果判断是否存在注入点,盲注存在,则第一条语句是正常的原始页面,第二条语句则会出错但是没有任何的错误信息和提示信息。

假设,我们有这样一个注入点:http://127.0.0.1/gbook/gshow.php?bid=1。

0x03 盲注利用方法

本文的重点在于如何解决盲注的难点继续进行注入,总结了前辈的三种方法:通用方法、时间延迟、正则表达式等,主要测试平台是Mysql和Mssql。

1.通用的方法

通用的方法,严格上来说不算是盲注的一种,因为他还是有SQL查询返回结果,就是True 或者False,我不说这种方法,相信有SQL注入基础的朋友都会。

2.时间延迟

什么时候需要用到时间延迟攻击呢?当你输入SQL语句后没有看到任何的返回结果的时候。不同的数据库系统使用不同的函数或者方法。

<1> MySQL

在PHP+Mysql中,有安全意识的网站管理员会经常将display_errors设置成Off,如果存在注入,我们就可以利用Mysql数据库BENCHMARK函数进行盲注。我们从MySQL5.1参考手册看下函数说明:

BENCHMARK(count,expr)

BENCHMARK() 函数重复count 次执行表达式 expr 。 它可以被用于计算  MySQL 处理表达式的速度。结果值通常为 0。另一种用处来自 mysql客户端内部,能够报告问询执行的次数。此处报告的时间是客户端上的共用时间,而不是服务器端上的CPU时间。

我们测试程序有gbook.admin表的权限,其他类似,我们把php的display_errors设置成Off,程序明显存在注入漏洞,渗透技巧但是当我们提交单引号或者and 1=2都返回了和原来一样的错误了。那我们怎么进行注入呢?当然了,有些人说这种比较难判断,为什么呢?因为这个也跟网速有关系,所以可以选择两个时间相差较大的值来测试就很明显了。

具体利用方法是:

# 执行经过了10S后才反应过来,说明第一位是a,否则继续

http://127.0.0.1/gbook/gshow.php?bid=1 union select if(substring(pwd,1,1)=char(97),benchmark(10000,md5(1)),0),2,3,4,5 from admin where uid=1

# 原理同上面一句一样

http://127.0.0.1/gbook/gshow.php?bid=1 union select if(substring(pwd,1,1)=char(98),benchmark(10000,md5(1)),0),2,3,4,5 from admin where uid=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值