首页 » 网站建设 » phppdo衔接access技巧_Myql SLEEP函数和SQL注入

phppdo衔接access技巧_Myql SLEEP函数和SQL注入

访客 2024-11-11 0

扫一扫用手机浏览

文章目录 [+]

WHERE col.id = (select(0)from(select(sleep(90)))v)/'+(select(0)from(select(sleep(90)))v)+'\"大众+(select(0)from(select(sleep(90)))v)+\公众/;

可能便是你网站启用后大概1小时候内就收到的日志,或者你Web做事器(nginx)访问中看到的。
如果你是在Mysql慢查询日志中或者access日志中看到,并且该跳要求返回的状态码为200,而不是404,那么恭喜你可能中标了,被人Sql攻击了。
本文虫虫就和大家以sleep()函数为参与来谈论。

phppdo衔接access技巧_Myql SLEEP函数和SQL注入

SLEEP()函数

SLEEP(n),停息数据库n秒。

phppdo衔接access技巧_Myql SLEEP函数和SQL注入
(图片来自网络侵删)

不要稠浊MySQL掌握台中的sleep状态,它描述了连接的状态,SLEEP()函数做了一件事,便是停息数据库的实行,直到设定的韶光。
那么该操作有什么用?为什么要用它呢?

常日,有一些操作须要一段韶光来操作,操作时候须要暂时操作或者更新(比如数据锁,比如记录一个Pos点后,备份一个从库),当然也有可能是黑客攻击。

漏洞渗透和扫描

如果你的数据库和网站没有做安全方法,直接把端口暴露在公网上(比如ssh 22端口,mysql 3306端口),那么,很快就会能有扫描器对你的端口进行扫描渗透。
以是虫虫以也提到过在主机防护中的条款:禁止把端口暴露在公网;修正常用端口。
专门对付mysql,最常用的扫描渗透和安全审计工具是sqlmap。

sqlmap是利用Python编写的一款数据库sql注入扫描工具,目前支持常见的mysql、oracel、postgresql、sql server,access,db2,sqlite等数据的安全漏洞(sql注入)。

在sqlmap盲主扫描中,常日会Fuzzy各种sql语句,常日还会利用sleep命令。
比如扫描那些利用旧的mysql或mysqli等非PDO的连接PHP MySQL网站,然后列举易受攻击的AJAX命令列表或GET/POST结果,在输出扫描结果时候的常日须要中止实行。

sqlmap及同类工具可以并行攻击几十个站点,通过对这些网站逼迫数据库sleep一段韶光(数字设定取决于个人履历),通过计数sleep的韶光,来测试渗透命令中的有效性,这在安全界常日叫基于韶光的盲注。

快速解剖

在本文开头,我们举了一个sql语句的例子,这是常用的盲注的范例语句。
如果实行SELECT语句,个中的条件语句部分被更换为类似以下的内容,那么它将绝对锁天命据库:

WHERE col.id = (select(0)from(select(sleep(90)))v)/'+(select(0)from(select(sleep(90)))v)+'\"大众+(select(0)from(select(sleep(90)))v)+\"大众/;

把稳该语句奥妙地利用各种运算符和分隔符。
把稳该语句,对只对拼写sql语句的程序有用,利用PDO该语句可以被过滤,不能实行的 。

PHP mysql注入示例

让我们写一个php的示例,来说问题。
看以下函数:

上面的示例中,我们利用implode()函数天生以逗号分隔的ID列表。
由于对输入没有任何验证,传入的数组中,可能是非法的具有SLEEP的命令或者dump 数据库表中的数据到展示页面。
针对这种问题,你须要利用对传入的数据做验证,验证长度(根据实际须要限定参数长度,可以极大防止注入的成功)。

你可以利用PDO等链接框架,利用占位符代替(绑定)参数天生sql语句,并通过prepare做参数验,这样可以阻挡绝大多数的SQL注入的值。

PDO并非灵丹灵药

上面我们也说通过PDO可以预防绝大多数的PHP Sql注入问题,但是他不是100%担保能办理所有问题。

如前所述,自己拼凑Sql的原始动态组合方法,让很多PHP系统处于危险之中

以是,一无所措的码农们不可避免地会通过谷歌寻求帮助他们:

上面是网上一个很盛行的PDO利用教程之一,该代码利用PDO,但是和纯的手动拼凑Sql的并没有什么两样,也是非常危险的做法。

还有如下StackOverflow(一个有名的编程问答网站)上的的一个答案:

看到了么,这也是很糟糕的代码,但是还被接管了。
在码农们接管的观点是\"大众利用PDO可以防止sql注入\"大众,但是他们不知道PDO防止注入也是有条件的,那便是必须是用\公众?占位符绑定写SQL,然后prepare,然后execute\公众,否则即是没有用。

不要鄙视sleep()

可能你以为创造sleep()实行,并没有什么的?最少不会DROP你的数据库。
SLEEP()很随意马虎识别,并且在该阶段常日险些没有啥害。
但是通过,可以在通过盲注Fuzz测试数据实行大量的查询,并很快就找到有效的攻击EXP。

实际上,这就去世sqlmap的核心功能。
这种思路的一个问题是,在依赖于MySQL for UX/UI的生产Web项目中,常日的做法是将代码实行用户限定为仅具有SELECT权限,不给他DROP权限。
但是SLEEP()利用只需SELECT权限。

SLEEP怎么禁止?

由于SLEEP函数的利用只须要SELECT,不须要任何特权权。
并且可以作为\"大众最安全的\"大众MySQL命令实行。

它只是一个SQL注入漏洞,无法利用定时攻击停息数据库实行或浏览数据(或对其进行dump)。
而且一样平常通过大略的配置无法禁用SLEEP函数。
MySQL可以在数据库,表和列级别做权限限定。
当然如果能有办法大略这顶对某些危险函数的禁止也是故意义的(比如php.ini中的disable_functions配置)。

实际上sleep也给了我们一种防御思路,基于对该函数关键字的探测来实现sql攻击告警和防御。
比如虫虫自研了一款web防火墙App-Waf(github:/ bollwarm/App-Waf)便是基于这样的探测事理,通过剖析访问日志中的关键词,个中就包括了sleep函数,下面是我用的关键字规则(部分)。

本文中虫虫和大家一起以Mysql的sleep()函数为参与谈论了Sql注入的问题,总体上来说可以利用sleep()来列举SQL漏洞,PDO绑定参数的方法擦可以防御Sql注入,sleep()一样平常无害,而且不会正常情形下很少用的到,但是可以变废为宝用他来做为探测攻击的手段。

关于更多的安全和Sql注入的问题关注虫虫,虫虫会撰写文章和大家一起学习。

标签:

相关文章

微信第三方登录便捷与安全的完美融合

社交平台已成为人们日常生活中不可或缺的一部分。微信作为我国最受欢迎的社交软件之一,拥有庞大的用户群体。为了方便用户在不同平台间切换...

网站建设 2025-02-18 阅读0 评论0

广东高速代码表解码高速公路管理智慧

高速公路作为国家交通动脉,连接着城市与城市,承载着巨大的物流和人流。广东作为我国经济大省,高速公路网络密布,交通流量巨大。为了更好...

网站建设 2025-02-18 阅读0 评论0