zoukankan      html  css  js  c++  java
  • mysql注入:SLEEP(duration)

    昨天公司有一个移动端的项目页面打不开,第一感觉是数据库问题,然后show PROCESSLIST 查询正在运行的线程,发现果然多个select/update语句处于locked状态,然后第一反应是遭遇sql注入了,然后的确发现了一个不正常的查询语句.考虑到数据的安全,立即修改线上程序,只允许访问主页,并暂停首页的搜索功能.然后就是赶紧找漏洞....

    那个sql语句是这样的

     SELECT COUNT(*) AS `numrows`
    FROM (`表名` as b)
    WHERE `b`.`cateid` = '1' AND SLEEP(5) AND 'kE

    这个sql语句导致随后一系列的update/select语句被锁住.

    可以发现,cateid字段后面的值不正常,这应该是没有被过滤的post/get值,用户可以输入任意内容.这也太危险了,赶紧去项目中,get/post参数用到cateid的地方,果然,找到了,catid虽然使用框架自带的get方法来获取,但没有开启任何过滤,这不是在裸奔吗?写这个程序的哥们也太善良了...赶紧改,改完接着找和cateid有关的post/get参数,都找完并测试了,才敢把线上恢复正常.

    后来就研究这个被注入的sql语句,为什么会导致不能更新和查询?

    他用了一个sleep(5),并放到了where条件中,好家伙,我们的表上万条数据,每个语句都要sleep5秒,然后这时候要update语句(更新浏览量),update语句要获取锁,需要等待select语句执行完毕,因此update语句处于"Waiting for table level lock"状态,然而myisam引擎的表,在执行update的时候,会阻塞select的执行,因此,随后的select也是"Waiting for table level lock".....然后各种查询都是这样...现在不清楚的是,为什么线下直接是"lock"状态,而我在本地测试却是"Waiting for table level lock"状态?

    好了,理解了攻击者的恶意,也发现了程序的缺陷,随后便是对项目的严格检查工作了...

  • 相关阅读:
    Linux下配置Tomcat服务器
    Octopress + GitHub Page 搭建个人博客
    Cocoapods报错Unable to satisfy the following requirements
    类方法load和initialize的区别
    AFNetworking3.0 Post JSON数据
    iOS防止button重复点击
    iOS与H5交互遇到的坑
    cocoapods安装
    平时做的一些好玩或者测试的 项目 特效,动画
    webpack那些事儿
  • 原文地址:https://www.cnblogs.com/ch459742906/p/6269428.html
Copyright © 2011-2022 走看看