SQL 是结构化查询语言的首字母缩写. 它用于检索和操作数据库中的数据.
什么是 SQL 注入?
SQL 注入使动态 SQL 语句注释掉语句的某些部分或附加始终为真的条件来执行恶意 SQL 代码.
可以使用 SQL 注入执行的攻击类型和数据库引擎相关. 攻击适用于动态 SQL 语句. 动态语句是在运行时使用来自 web 表单或 URI 查询字符串的参数 password 生成的语句.
某 html 表单的代码如下.
- <form action='index.php' method="post">
- <input type="email" name="email" required="required" />
- <input type="password" name="password" />
- <input type="checkbox" name="remember_me" value="Remember me" />
- <input type="submit" value="Submit" />
- </form>
上面的表单接受电子邮件地址和密码, 将它们提交给名为 index.PHP 的 PHP 文件.
它可以选择将登录会话存储在 cookie 中. 我们从 remember_me 复选框中推断出这一点. 它使用 post 方法提交数据. 这意味着值不会显示在 URL 中.
后台用于检查用户 ID 的语句如下所示
- SELECT * FROM users WHERE email = $_POST['email'] AND password = md5($_POST['password']);
- # SELECT * FROM users WHERE email = '[xxx@xxx.xxx](mailto:xxx@xxx.xxx)' OR 1 = 1 LIMIT 1 -- '] AND password = md5('1234'); # SQL 注入
上面的语句直接使用 $_POST[] 数组的值而不检验. 密码使用 MD5 算法加密. 为此用第 2 句可以直接进行 SQL 注入.
SQL 登陆注入实战
演示网址不能承受太大压力, 需要的请加钉钉 pytesting 索取.
图片. PNG
图片. PNG
步骤:
email: 输入 mailto:xxx@xxx.xxx
密码输入: Enter xxx') OR 1 = 1 -- ]
提交
图片. PNG
其他 SQL 注入
删除数据
更新数据
插入数据
在服务器上执行可以下载和安装特洛伊木马等恶意程序的命令
将有价值的数据 (如信用卡详细信息, 电子邮件和密码) 导出到攻击者的远程服务器
获取用户登录详细信息等
参考资料
讨论 qq 群 144081101 591302926 567351477 钉钉免费群 21745728
本文最新版本地址
本文涉及的 python 测试开发库 https://github.com/china-testing/python-api-tesing 谢谢点赞!
安全测试书籍下载 https://china-testing.github.io/testing_books.html
本文相关海量书籍下载
SQL 注入的自动化工具
SQLMap - http://sqlmap.org/ https://github.com/sqlmapproject/sqlmap
SQLSmack - http://www.securiteam.com/tools/5GP081P75C.html 针对 MSSQL, 且很久没有更新, 用处不大.
- SQLPing 2 - http://www.sqlsecurity.com/downloads/
- Havij
如何防止 SQL 注入攻击
组织可以采用以下策略来保护自己免受 SQL 注入攻击.
在动态 SQL 语句中使用之前必须始终对其进行清理.
存储过程 - 这些可以封装 SQL 语句并将所有输入视为参数.
参数化
正则表达式 - 检测潜在的有害代码并在执行 SQL 语句之前将其删除.
数据库连接用户访问权限
错误消息不要显示 SQL.
来源: http://www.jianshu.com/p/fd688fd68269