php做电商网站,图形化app开发工具,西乡做网站的公司,网站开发 pptsql注入产生的原因#xff1a; 由于程序过滤不严谨#xff0c;导致用户有一些异常输入#xff0c;最终触发数据库的查询。所以会出现sql注入这个问题。有些恶意的人就会利用这些信息导致数据库泄露。 注意#xff1a;一般我们存在注入点我们会查询管理员的账号和密码#…sql注入产生的原因 由于程序过滤不严谨导致用户有一些异常输入最终触发数据库的查询。所以会出现sql注入这个问题。有些恶意的人就会利用这些信息导致数据库泄露。 注意一般我们存在注入点我们会查询管理员的账号和密码但是我们现在是在前端页面下的我们并不知道管理员的数据在哪个数据库哪张表下的。我们需要知道在哪个数据库哪张表哪个字段下这个是前提当我们发现一个注入点是首先将前置条件查询出来1.mysql的版本号 select version();2.mysql的权限用户如果当前为root那么入侵成功率就很高。 select user();3.当前所在的数据库问题1你现在有普通用户的权限查到了管理员的账号和密码1.管理员的后台找不到 2.管理员的密码破解不了此时该怎么办回答挖掘存储型XSS
第一关实际操作
1前端输入 在这里我们搭建了一个sql注入的靶场如下图所示在web的前端页面中使用id来接受用户传递进来的值。将值传递给后端进行处理。
后端处理代码如下图可知前端web页面输入的值由id传递给后端的sql代码中处理。 2逃逸单引号 我们这里就可以思考如何控制用户的输入触发数据的额外查询。要是传递进来的sql语句能够被执行就好了。但是传递进来的所有值都被单引号包裹全部被变成了字符串这是我们就要思考如何逃出单引号的包围。
当我们传递进来的不是1而是1’ 时就会报错报错的原因就是多了一个单引号如下图 这里提示我们有语法错误那么就意味着我们已经逃逸出了单引号但是后面还有一个单引号所以会报错。此时我们需要闭合单引号。我们可以使用注释将后面的单引号注释掉
我们这里的注入点为 1 ,但是后面还有一个单引号我们需要将后面的另一个单引号注释掉
mysql中的三种注释方法“-- ”注意后面的空格在web的url中我们需要写为“”“--”#/* */
如下图并没有报错说明我们找到了注入点并可以成功的闭合我们就可以在此处插入sql注入。 我们查看后端页面 3.使用联合查询进注入
爆破列数 使用联合查询需要有一个前置条件两个表的列相同。我们怎么能够知道这个表有几列
解决方法
此时我们就需要一个函数 order by order by 是排序的意思通常来说我们是通过字段来排序的但是order by后面也可以以跟数字 order by 1 表示根据第一列来排序 order by 2 表示根据第二列来排序
如下图如果order by后面的数字大于真实的列数时就会报错我们就可以查出列数 在sql靶场中进行操作
当order by 3时页面正常显示当order by 4时页面报错说明我们当前所处的表有3列 联合查询
我们前面已经知道这张表的列数了所以这里写三个参数。 如上图联合查询后还是没有任何变化原因
原因联合查询的条件是前面的条件为假后面的联合查询才能为真就意味着前面的已经查到了所以后面的就不执行了。此时我们需要使前面的条件为假我们有两种方案 1查一个不存在的id 2第二种使使用负号
如下图当传递进来的id为负数前面的为假联合查询后面的为真。在name和password字段上就显示23。
这里我们发现前端页面显示的是23字段说明数据就出在这两个字段上。“1”也可以出数据但是没法在前端页面上显示。
此时可以就可以控制23字段的内容 查数据库名版本号用户
将23字段替换查数据库和版本 此时我们就查出了数据库和数据库的版本 查用户 爆破表名
既然已经知道注入点在23字段我们从该字段下手。
之前我们知道自己的数据库名叫做 security。那么现在我们需要知道本数据库下有哪些表。
此外我们知道数据库存在一个系统自带的数据库 information_schema 其中包含表的信息。
我们就可以通过查询这个数据库中的信息吧当前数据库下的表全查出来
注意基本上mysql中都会存在information_schema这个系统自带的数据库。但是这个数据库只有root用户才能访问由于我们上面已经查询到了当前的用户为root所以我们就直接利用它。如果不是root用户还有其他的数据库可以替代它。 我们去查看information_schema数据库具体信息其中叫tables表中有我们想要的信息我们可以使用这张表查询我们想要的信息 开始爆破表名如下图就爆破出了当前数据库下的所有表名。
在下面几张表中最可能储存用户和密码信息的为users表。但是我们不知道该表的字段名所以我们继续利用information_schema来爆破字段名。
id-1%27%20union select 1,group_concat(table_name),3 from information_schema.tables where table_schemasecurity -- 爆破列名
在information_schema中列名在columns这张表中。 开始爆破表名如下图就吧列名爆破出来了。
id-1 union select 1,group_concat(column_name),3 from information_schema.columns where table_schemasecurity and table_namecolumns-- 爆破具体值
因为我们现在知道表名以及字段名我们就可以直接查询users这张表在本数据库下面
d-1 union select 1,group_concat(username,0x3a,password),3 from users-- 到此我们成功的完成了一次注入