SQL注入详细讲解概括-GET注入、POST注入、HEAD注入

更新时间:2023-07-07 17:31:00 阅读: 评论:0

SQL注⼊详细讲解概括-GET注⼊、POST注⼊、HEAD注⼊SQL注⼊详细讲解概括-GET注⼊、POST注⼊、HEAD注⼊
1、SQL注⼊流程
2、GET注⼊
3、POST注⼊
4、HEAD注⼊
⼀、SQL注⼊流程
  1、SQL注⼊流程
  · 寻找注⼊点—与数据库交互的地⽅,⽐如登录框,搜索框、URL地址栏、登陆界⾯、留⾔板等等
  · 判断是否存在注⼊点,判断数据库类型,确定注⼊⽅法
  · 构造特殊语句,查询数据库数据
⼆、GET注⼊
  1、What is GET注⼊
  要搞懂GET注⼊之前,先搞懂什么是GET传参。
  GET传参:⽤户输⼊的内容参数会被传到地址栏(URL栏),是通过GET的⽅式进⾏传参
  · 特点:传参内容可见,传参长度有限,标识“?”,输⼊的内容会可能被url编码
  GET注⼊:通过GET传参的⽅式,传输恶意语句,进⾏SQL注⼊
  2、如何进⾏GET注⼊
  ⼀般情况判断为传参⽅式为GET传参⽅式,⾸先进⾏GET注⼊测试,判断是否存在GET注⼊
  如何判断是否存在GET注⼊:要想知道是否存在,⾸先搞原理,弄清楚是如何发⽣的
  简单说,原本程序要执⾏的代码拼接了⽤户输⼊的数据然后执⾏,就是本来⽤户输⼊的数据是要被查询的,但是被数据库当作代码执⾏
  OK,AND,只需知道输⼊的数据有没有被数据库当作代码,可以判断存不存在注⼊点
  AND,⽤户输⼊的数据⼀定不是输⼊everying都⾏的,如果⽤户随便输⼊的数据都被当做代码执⾏,那么这个⽹站就失去了它的功能,这是⽹站开发者不允许的
  SO,要输⼊什么数据才能被判断是否存在注⼊点呢
  先来看⼀段代码 
$query  = "SELECT first_name, last_name FROM urs WHERE ur_id = $id
⽤户输⼊参数传⼊$id
来输⼊1  >>>>  $id=1    >>> sql语句就变成了下⾯这样
$query  = "SELECT first_name, last_name FROM urs WHERE ur_id = 1
ok,look look 现在数据库收到的数据是这样的,,
SELECT first_name, last_name FROM urs WHERE ur_id = 1
silicon
AND,输⼊什么能够让数据库执⾏⼀些别的操作
思考ing time(3min)
当然是数据库语⾔了,,,试⼀试  or  怎么样
ok,, >>>  1 or 1=1 >>> $id=1 or 1=1
SELECT first_name, last_name FROM urs WHERE ur_id = 1 or 1=1
输⼊的内容当作代码执⾏了  //这个叫做整形闭合
英语教程
    在来看⼀段,这次把变量⽤引号引起来,⽤单引号or⽤双引号,是不⼀样的破解⽅法
$query  = "SELECT first_name, last_name FROM urs WHERE ur_id = '$id';"
上⾯双引号⾥的是要被传⼊数据库执⾏的
first,输⼊的数据被传⼊$id这个变量
ok,那么输⼊⼀个 1 ,$id=1  and 此语句就变成了:
SELECT first_name, last_name FROM urs WHERE ur_id = '1'
那么要怎么做才能变成输⼊的数据变成代码执⾏呢?
思考ing  time(5min)
ok,⽆论输⼊什么数据他都在引号⾥,那输⼊的数据就没有任何意义对吧,
那就来突破引号,如何突破
,,look here 》》 1' or 1=1 '  》》 $id=1' or 1=1 '  拼接试⼀试
SELECT first_name, last_name FROM urs WHERE ur_id = '1' or 1=1 ''
FUCK,,有问题了,,不⼀样了    //这个叫做单引号闭合
那么再来思考⼀个问题,当变量⽤双引号引起来怎么办,不是没⽤引号,也不是单引号
思考ing  time(2min)
ok,easy  那就⽤双引号破解呗
SELECT first_name, last_name FROM urs WHERE ur_id = "$id"
look here  》》》  1" or 1=1 " 》》》 $id=1" or 1=1 "
SELECT first_name, last_name FROM urs WHERE ur_id = "1" or 1=1 ""
success,easy    //这个叫做双引号闭合
  OK,上⾯是能看到后端代码的,哪个⽹站愿意让你看到他的后端代码,It won't
  AND,看不到源码,怎么进⾏注⼊呢
  so easy , 通过传⼊的恶意代码,观察页⾯情况,是否正常等,来判断是否存在注⼊点,确定注⼊⽅法
love paradi
  ⾸先我们找到传参点,进⾏注⼊尝试,⾸先判断闭合类型
  SQL语句的闭合类型:整型闭合、单引号闭合、双引号闭合、单引号加括号、双引号加括号
  · 整形闭合 
1SELECT* FROM admin WHERE id=1;  //整形闭合
  模拟注⼊
  ?id=1'  =>  报错
  ?id=1''  =>  报错
  判断为整形闭合
  · 单引号闭合 
1SELECT* FROM admin WHERE id=‘1’;  //单引号闭合
  模拟注⼊
四六级  ?id=1'  =>  报错
  ?id=1'' =>  正常返回id=1的值
  判断为单引号或者单引号括号闭合
  任何闭合⽅式都这样在没有遇到相对应的闭合时,都会把这个符号当作⼀个整体,注释符也不例外
  再次模拟注⼊
  ?id=1'-+  =>  ⽆报错 => 单引号闭合
  ?id=1'-+  =>  报错  =>  单引号括号闭合
  · 双引号闭合 
1SELECT* FROM admin WHERE id="1";  //双引号闭合
  ?id=1'  => 正常返回id=1的值
  ?id=1" => 报错
  判断为双引号闭合或者双引号括号闭合
郑中基与蔡卓妍
  再次模拟注⼊
filename  ?id=1"-+  => ⽆报错 => 双引号闭合
  ?id=1"-+ => 报错  =>  双引号括号闭合
  · 总结
  判断闭合类型
  ⾸先尝试:?id=1'
简介 英文       ?id=1"
  不报错 =>  整形闭合
  报错  =>  单引号报错,双引号不报错 => 尝试 ?id=1'-+  =>  ⽆报错单引号闭合,报错单引号加括号闭合  报错  =>  单引号不报错,双引号报错  =>  尝试 ?id=1"-+  =>  ⽆报错双引号闭合,报错双引号加括号闭合 
海伦凯勒英文简介  注⼊点找到,确定闭合⽅式开始进⾏注⼊攻击,以DVWA靶场为例
  First,观察url栏判断为GET传参,先进⾏正常内容输⼊,输⼊1 ,看返回结果
  第⼆步,测试是否存在注⼊,进⾏恶意语句测试,不知道闭合类型,先从整形闭合开始判断 1 and 1=1
  页⾯正常,与id=1 时返回的内容⼀样不确定是否注⼊成功,因为and 1=1 恒成⽴所以还得进⾏第⼆次判断,1 and 1=2
  页⾯正常,与id=1 时返回的内容⼀样,and 1=2 是恒不成⽴的,如果数据库执⾏了代码那么应该是没有数据返回的,现在返回了数据,so,不是整形闭合
  ok,既然不是整形闭合,那么去尝试是不是单引号闭合,输⼊  1',,,把错误显⽰出来了,说明是单引号闭合,既存在注⼊,⼜确定是单引号闭合,那么可以进⾏注⼊了。AND,我输⼊的是1'  为什么url的传参是1%27,这是因为get传参会被url编码,这个引号被url编码了,HTTP请求GET请求⼀般要进⾏URL编码,为什么呢,这是为了防⽌URL中的参数和HTTP中的⼀些参数冲突,导致奇异。
2013北京中考英语
  OK,下⾯开始SQL注⼊
  First,已经找到注⼊点,判断出闭合类型,开始通过恶意语句来获取数据库信息
  第⼀步,猜解字段数,⽤到语法:order by  X  当X⼤于字段数就会显错,⼩于或等于正常返回页⾯
  通过order by语句查出当前表有两个字段,为什么要先查字段数?思考ing time(1min)
  answer >>>>  因为下⾯要想查数据库其他的内容,不可能再⽤当前表吧,得通过联合查询吧,那么联合查询的必要条件>>>多个表的字段数必须相同
  第⼆步,判断显位,why?
  answer >>>⼀个表可能有多个字段,但是我们页⾯上看到的可能并不是表的字段的全部,开发者可能页⾯内容只输出指定的那⼏个字段,那是不是我们就看不到其他的字段呢,so,页⾯显⽰并不⼀定是全部字段。那我们就要判断出字段显位,同时也输出另⼀个表同样的显位,这样查询的信息才可能通过显位输出到页⾯。
  HOW?
  answer>>>有的⽹站,会规定这个显位,输出的数据指定是多少,如果开发者指定只能输出⼀条数据,那么联合查询好像也没什么作⽤了,因为联合查询是先输出前⾯表的数据,我们需要的是后⾯的表的数据,有遇到难题了。。。思考ing time(2min)
  ok,⽤联合查询,当⼀个表⾥没有查询到数据,那么不输出这个表的数据,,,,可不可以,前⾯的表不输出数据呢。。of cour
  1.111111111111,1,998787,6.37176,90000.88877,,,,这些数据数据库⾥可以说是百年不会见吧,那我们去查他,是不是空?? of cour
  ok,构建恶意语句>>>> 1.11114434' union lect 1,2 #
三月的英文
  如上图,从第⼀步得知有两个字段,⽤来判显位,两个字段内容全部显⽰,当然这种情况的概率是⾮常⼩的
  ok,显位判断完毕
  第三步,查询当前数据库
  HOW?思考ing time(1min)
  databa()函数
1.7274972' union lect 1,databa() #
  ok,显位已经判断完毕,下⾯才是刚刚开始
  第三步,对数据库⾥的库,表,字段,数据进⾏查询
  HOW?
  First,需要了解数据库,此靶场的数据库是MySQL,后续会写怎么识别数据库,常见数据库太多了,Oracle Databa甲⾻⽂公司、SQL Server微软公司、DB2IBM公司、PostgreSQL开源、MySQL开源、Access微软等等
  mysql在5.0以上版本加⼊了information_schema这个系统⾃带库,其中保存着关于mysql服务器所维护的其他数据信息,如数据库名,数据库的表,表栏的数据类型与访问权限,,这个库⾮常⽜,,数据库所有的库,表,字段的位置在这张表⾥都能找到
  information_scheam这个库下⾯有⼏个⾮常重要的表,必须知道的:
  information_schema.schemata  >>> 这个表保存了所有数据库⾥的库的信息
  information_schema.tables  >>>  这个表保存了数据库⾥所有表的信息
  lumns  >>> 这个表保存了数据库⾥所有的字段信息
  AND,,
  column_name 字段名
  table_name 表名
  schema_name 库名
  OK,基础知识已简单了解,怎么取通过这些知识注⼊呢,
  思考ing  time(5min)
  OK,Time out,,,
  Look here  >>>  上⼀步知道了联合查询,对不对,要查询数据库信息需要知道表名呀,现在已经知道了系统⾃带库、⾃带表,⽽且通过这⼏张表我们可以得到数据库任何数据  OK,那下⾯就easy了,,,构建恶意语句,先看看,当前库存在哪些表
1.2223' union lect 1,table_name from information_schema.tables where table_schema=databa()  #
  >>>
  OK,当前数据库下的表's name有已经拿到,,定睛⼀看,,urs,,这个表有点可疑呀,,ur什么意思>>⽤户
  SO,我们来看⼀下urs表⾥有什么东西,来,上恶意代码
1.2333' union lect 1,column_name from lumns where table_schema=databa() and table_name='urs'  #

本文发布于:2023-07-07 17:31:00,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/170169.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   数据库   闭合   判断
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图