php截取字符串网站内容(什么是SQL注入呢。(SQL)应用(图))
优采云 发布时间: 2022-03-21 16:14php截取字符串网站内容(什么是SQL注入呢。(SQL)应用(图))
什么是 SQL 注入?SQL注入是一种Web应用程序不限制和检查用户输入的数据的攻击方法,使恶意攻击者可以通过网页的不同显示条件甚至直接显示数据来获取数据库数据。
我们先来看回声注入。这很简单。这个SQL注入是因为浏览器没有限制URL后面的id参数。我们可以通过联合查询等SQL语句查询哪些数据库可用,直接在网页上展示。要查询其他数据,请更改查询语句。
现在来说说盲注,也就是不能直接从网页获取数据。比如我在本地建了一个网站,它的网页URL如下:
,其网页与上图不同。它不直接显示你要查询的数据,而只显示两种不同的情况。我们认为它是 TRUE 和 FALSE。判断and ?id=1 and 1=1 为TRUE,?id=1 and 1=2 为FALSE,也就是说and之后的数据是对的,是TRUE,如果是错的,是错误的。当然,TRUE和FALSE实际上并不是直接显示的,而是两个不同的页面。
这时候,我们如何获取我们要查询的数据,那么就需要使用ASCII,它是对每个英文字符和特殊符号的编码,比如A-65、a-97等。 ,我们来看看下面的网址:
' 和 ascii(substr((select database()),0,1))>97 --+
我从里到外解析了这个,select database(),查询数据库的语句;substr(),是php中截取字符串的函数,第一个参数是要查询的数据库,第二个参数0是索引,是从截取字符串的第一个字母开始向后切。第三个参数1是只截取1个字符,也就是说substr()得到的数据是数据库名的第一个字母,而ascii()这个函数就是取这个字母的ASCII码值比较它的值是 97。
首先,我们不知道数据库名称。如果库名的第一个字母是 a,则 >、97 或
这就是盲注SQL注入获取数据的原理。当然,这是非常缓慢的。只需编写脚本并交给机器运行即可。这就是为什么我们通常通过and 1=1 and and 1=2来判断SQL注入。
现在我们来看另一种通过SQL注入获取数据的方式:错误注入,该漏洞影响cms系统joomla,版本号为3.7.0,CVE号为CVE -2017-8917 。搭建环境为PHPstudy系统。该系统集成了 php、mysql 和 Apache。把我们的joomla放到WWW目录下,然后进入joomla主页完成安装。这很简单。存在sql注入的地方。
这里我先分析一下报错和注入数据的原理。我使用的报错函数是updatexml(Doc, XPathstring, new_value),Doc是文档对象,new_value是用来替换XPathstring字符串的值。原理是XPathstring字符串形式为:'html/body/h1',concat()组合的字符串不是XPath形式的字符串产生错误执行congcat()函数中的SQL语句,其中0x3a为:,这里用于concat()函数,如果是拼接的,也可以换成其他的。你不必担心。您总是需要一个作为拼接参数。
分析这种注入的原因。该组件的构造函数描述位于 \components\com_fields\controller.php 中。这里我们看到加载 com_fields 组件需要两个条件,即 view=fields&&layout=modal ,即构造好的 URL :
该组件的模型在 \administrator\components\com_fields\models\fields.php 中存在注入问题。在getListQuery函数中,getState()函数获取列表fullordering的key值,这里并没有对fullordering进行严格过滤,只是把它传递给查询参数。
State状态参数会被View视图获取,位于\administrator\components\com_fields\views\fields\view.html.php页面,会作为显示函数的参数显示在网页上,这也是这个错误的注入。原因在网页上得到了回应。
由此,最终的exp注入方式如下:
[fullordering]=updatexml(1,concat(0x3a,(select%20database()),0x3a),1)