上次在蓝盾的时候第一次接触到了 SQL 注入和 SQLmap 工具,想着考完以后系统的学一下 SQL 注入。这个系列的博文都是在 i 春秋学习的笔记和自己实际操作的过程。
SQL 注入原理
程序命令与用户输入之间没有做到泾渭分明,使攻击者有机会将命令通过用户输入提交给 Web 程序,从而进行攻击 注入攻击的最终是数据库,与平台和脚本无关
SQL 注入前
- 确定 Web 应用程序使用的技术
- 确定可能的输入方式(burp 等)
- 查找可以用于注入的用户输入
SQL 注入点的判断
网页链接特征
- http://www.**.com/***.asp?id=xx (ASP 注入)
- http://www.**.com/***.php?id=xx (PHP 注入)
- http://www.**.com/***.jsp?id=xx (JSP 注入)
- http://www.**.com/***.jspx?id=xx (JSPX 注入)
- http://www.**.com/***.asp?id=xx&page=99 (有两个参数,注入时要注意参数的确认)
- http://www.**.com/index/new/id/8 (伪静态)
- http://www.**.com/index/new/php-8.html (伪静态)
判断是否存在注入漏洞
- 单引号法:在链接后加上一个单引号,若页面不能正常显示,浏览器返回异常信息,可能存在漏洞
- 1=1 与 1=2 法:在链接后分别加上 “and 1=1” 和 “and 1=2” 进行提交,若返回不同页面,可能存在漏洞
防止注入
简单来说只需要在 ?id=xx
这里判断下输入进的 xx
是否为纯数字即可,若不是则拒绝执行。
对于 PHP
if (!is_numeric($id)){
echo "防止sql注入"
echo "<hr>"
}
通过防止注入方法,虽然可以判断出存在 SQL 注入漏洞,但是不能进一步查询