初学者SQL注入指南

小皮
3000小皮首席执行运营官
技术交流 2019-08-16 17:14:38
3000 技术交流 2019-08-16 17:14:38
SQL注入是一种技术,恶意用户可以通过网页将SQL命令注入SQL语句。


攻击者可以绕过数据库中的身份验证,访问,修改和删除数据。在某些情况下,SQL注入甚至可以用于在操作系统上执行命令,可能允许攻击者升级到位于防火墙后面的网络内的更具破坏性的攻击。


数据库列表


MySQL(开源),
MSSQL,
MS-ACCESS,
甲骨文,
Postgre SQL(开源),
SQLite的,
SQL注入的类型
布尔型注入
报错型注入
可联合查询型注入
宽字节注入  二次编码注入

SQLI开发技术
基于错误的利用
基于联盟的剥削
基于布尔的开发
基于时间的延迟开发

尝试识别 - 应用程序与DB交互的位置
验证页面
搜索字段
psot字段
get字段
HTTP标头
cookie
基本SQL函数
select                                        根据搜索条件从数据库中读取数据
insert                                   将新数据插入数据库
update                                       根据给定标准更新现有数据
delete                                   根据给定标准删除现有数据
order by                                     用于按升序或降序对结果集进行排序
limit by                                   该语句用于从一个或多个表中检索记录
SQL注入字符


基于union的SQL注入


user()                                           当前用户
database()                                   当前数据库
version()                                   数据库版本
schema()                                   当前数据库
UUID()                                   系统UUID密钥
current_user()                           当前用户
SYSTEM_USER()                   当前系统用户
SESSION_USER()                   会话用户
@@hostname                                   当前主机名
@@tmpdir                                   临时目录
@@ DATADIR                           数据目录
@@datadir                                   数据目录
@@version                                   当前数据库
@@ GLOBAL.have_symlink           检查符号链接是启用还是禁用
@@ GLOBAL.have_ssl                   检查SSL是否可用

数据库指纹识别
我们可以通过分析错误找出数据库

1   You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ”1” LIMIT 0,1′ at line 1      //MySQL数据库
2     ORA-00933: SQL command not properly ended     //Oracle数据库
3     Microsoft SQL Native Client error ‘80040e14’ Unclosed quotation mark after the character string   //MS  SQL数据库

SQL注入是如何发生的

当应用程序使用输入内容来构造动态sql语句以访问数据库时,会发生sql注入攻击。如果代码使用存储过程,而这些存储过程作为包含未筛选的用户输入的字符串来传递,也会发生sql注入。sql注入可能导致攻击者使用应用程序登陆在数据库中执行命令。相关的SQL注入可以通过测试工具pangolin进行。如果应用程序使用特权过高的帐户连接到数据库,这种问题会变得很严重。在某些表单中,用户输入的内容直接用来构造动态sql命令,或者作为存储过程的输入参数,这些表单特别容易受到sql注入的攻击。而许多网站程序在编写时,没有对用户输入的合法性进行判断或者程序中本身的变量处理不当,使应用程序存在安全隐患。这样,用户就可以提交一段数据库查询的代码,根据程序返回的结果,获得一些敏感的信息或者控制整个服务器,于是sql注入就发生了。


如何防护SQL注入




归纳一下,主要有以下几点:
1.永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和
双"-"进行转换等。
2.永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
3.永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
4.不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
5.应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
6.sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。


SQL攻击原理



正常登陆name框中填写root,pwd为123
上面sql_sel = " select * from app01_test where name='{0}' and pwd='{1}' 就相当于select * from app01_test where name=root and pwd=123 进行查询但如果name框中填写root or 1=1 #,pwd 随便输入上面sql_sel = " select * from app01_test where name='{0}' and pwd='{1}'就相当于select * from app01_test where name=root or 1=1 # and pwd=123 进行查询这里的#相当于把后面的所有查询包括password查询给注释,并且 or 1 = 1的查询永远是正确的,所以sql攻击注入就完成了。
通过这样的方式就绕过了密码检查所以设计SQL语句时不建议这样设计,或者对特殊字符 #、or、and 等做特殊处理。
本文标题:初学者SQL注入指南
本文作者:小皮
本文来自:蚁安黑客官网
转载请注明本文链接:http://bbs.mayidui.net/t3106.html
游客
登录黑客论坛后才可以回帖,黑客登录 或者 注册黑客
weixin
蚁安黑客

找黑客工具、找黑客教程、找黑客朋友,你想不到的黑客技术这儿都有!

微信号:baiyiwangan