Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说
sql注入攻击与防范_SQL必知必会,希望能够帮助你!!!。
SQL注入式攻击技术,一般针对基于Web平台的应用程序.造成SQL注入攻击漏洞的原因,是由于程序员在编写Web程序时,没有对浏览器端提交的参数进行严格的过滤和判断。用户可以修改构造参数,提交SQL查询语句,并传递至服务器端,从而获取想要的敏感信息,甚至执行危险的代码或系统命令。
SQL注入攻击原理:程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给Web程序,以发号施令,为所欲为(注:注入最终是数据库,与脚本、平台无关)。
总之一句话:sql注入产生的原因是接受相关参数未经处理直接带入数据库查询操作
1.数字型注入 2.字符型注入 3.搜索型注入
1.“单引号”法:第一种检测SQL注入漏洞是否存在的方法是“单引号”法。方法很简单,直接在浏览器地址栏中的网址链接后加上一个单引号,如果页面不能正常显示,浏览器返回一些异常信息,则说明该链接可能存在注入漏洞。
2. and 1=1和1=2法
很多时候检测提交包含引号的链接时,会提示非法字符,或者直接不返回任何信息,但这并不等于不存在SQL注入漏洞。此时可使用经典的“1=1和1=2”法进行检测。方法很简单,就是直接在链接地址后分别加上and 1=1和and 1=2进行提交,如果返回不同的页面,那么说明存在SQL注入漏洞。
在我们的注入语句被带入数据库查询但却什么都没有返回的情况我们该怎么办?例如应用程序就会返回一个“通用的”的页面,或者重定向一个通用页面(可能为网站首页)。这时,我们之前学习的SQL注入办法就无法使用了。
盲注,即在SQL注入过程中,SQL语句执行选择后,选择的数据不能回显到前端,我们需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注。
SQL盲注分为两大类:基于布尔型SQL盲注、基于时间型SQL盲注、
1.布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根据 你的注入信息返回Ture跟Fales,也就没有了之前的报错信息。
2.时间盲注 界面返回值只有一种,true 无论输入任何值 返回情况都会按正常的来处理。加入特定的时间函数,通过查看web页面返回的时间差来判断注入的语句是否正确
推荐三款我自己经常使用的sql注入工具: 1.sqlmap 2.Pangolin(穿山甲) 3.havij pro(自动化注入工具)
1.极力推荐使用sqlmap(还需要安装python) 优点:只要你会使用sqlmap就不需要掌握其他的注入工具了 缺点:sqlmap的命令语句很多很难记住
这里有我常使用的一些sqlmap的语句: sqlmap.py -u http://192.168.1.4/sqlserver/1.aspx?xxser=1 ( -u 是get注入)
post注入 sqlmap.py -r burpsuite抓包.txt(对post页面进行抓包,放在txt文件里再去跑)
指定表单注入 sqlmap.py -u URL –data“username=a&password=a”
sqlmap自动填写表单注入:sqlmap.py -u URL –forms --dbs //默认情况系sqlmap会自动的探测web应用后端的数据库类型:MySQL、Oracle、PostgreSQL、MicrosoftSQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAPMaxDB、DB2
sqlmap cookies注入:sqlmap.py -u 注入点URL --cookie "id=xx" --level 3(默认情况下SQLMAP只支持GET/POST参数的注入测试,但是当使用–level 参数且数值>=2的时候也会检查cookie里面的参数,当>=3的时候将检查User-agent和Referer。可以通过burpsuite等工具获取当前的cookie值,然后进行注入)
2.Pangolin(穿山甲)这款工具前几年感觉还可以,现在确实随着waf的牛逼,这东西基本上用处不大,优点:中文页面小白专属 缺点:工具过于鸡肋
3.havij pro(自动化注入工具) 优点:工具功能强大 缺点:英文界面 还是付费的(有激活成功教程)
这是我经常使用的sql注入工具,具体用法和下载可以百度或者加我:
一般如果对方网站有waf拦截的话基本上是使用不了工具的,这是我们就要手工注入,上面已经提到了sql注入点一定是在与数据库有交互的地方,可以再这些网站参数后面加入单引号或者and 1=1 1=2 来进行查看返回的报错信息从而去判断注入点
探测出sql注入点后,利用order by猜解字段数目语句查询:
order by 1
order by 2
...
order by n-1
order by n
如果n-1时返回正常,n时返回错误,那么说明字段数目为n
得到字段长度后,就可利用union select查询获得字段内容了。
and 1=2 union select1, 2, 3...., n from 表名
执行上面的查询时,在页面中会返回数字,修改查询语句中的数字为字段名,例如提交如下代码。
and 1=2 union select1, 字段1, 字段2...., n from 表名
在页面中就会返回字段内容,不必一个一个进行猜解了
实例语句:http://192.168.1.55:901/news_view.asp?id=14and 1=2 union select 1,user_name,password,4,5,6,7 from administrator
在页面返回信息中,立即获得了user_name和password字段的值(图16),比前面的方法快速高效多了
得到帐号密码后去后台登陆,从而上传webshell,
网络层面:1.通过WAF设备启用防SQL Inject注入策略(或类似防护系统)2.云端防护(360网站卫士,阿里云盾等)
代码层面:1.对输入进行严格的转义和过滤(过滤原则:对用户输入的数据进行判断,用黑名单,或者白名单的方式验证,或者替换危险字符)
2.使用参数化(Parameterized)
原理:使用参数化查询数据库服务器不会把参数的内容当作sql指令的一部分来执行,是在数据库完成sql指令的编译后才套用参数运行
简单的说: 参数化能防注入的原因在于,语句是语句,参数是参数,参数的值并不是语句的一部分,数据库只按语句的语义跑
正在学习python的李治龙
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章