我的是php写的,服务器是justhost上申请的。
今天查看后台发现admin有被别人在凌晨用的痕迹,但那个时间我没上网,而且那个进入我admin的人IP是在中东,我后台有自动记录ip。
后来查看justhost日志和最近访客,发现这个IP访问了很多类似这种的页面:/au/shop.php?dest_id=3&shop_id=999999.9+union+all+select+%28select+concat%280x7e%2C0x27%2CCART.username%2C0x27%2C0x7e%29+from+%60whimwin1_DB%60.CART+Order+by+ip_address+limit+40%2C1%29+--正常人访问的页面应该是/au/shop.php?dest_id=3 之类的,这么长的访问地址是不是恶意试探的?而且在1分钟之内访问了很多类似的地址,是不是用黑客软件在自动探测????但是我又感觉不像,这地址里面包括了我数据库名字和一些表,这些是怎么出来的???愁死我了

解决方案 »

  1.   

    应该是在找你SQL的注入点.可能已经找到了一些漏洞,他知道你数据库名和一些表 这个可能有危险,当然他也可能是注入了别人然后再得到你这边的数据,不过还是假设你有没有过滤好的地方吧检查一下自己的代码将关键的部分都仔细的做个安全过滤。没事,只要你不是明文保存密码,问题不大。
    互联网上闲得蛋痛的人太多了
      

  2.   


    而且查看日志 这个人明显是登录了我的后台。所以我就很奇怪,他怎么知道我admin账号的 而且怎么知道我数据库名字和表的名字 我很费解!
      

  3.   


    所有外部提交的数据,我们都先假设他是不安全的
    例如$_POST $_GET
    那么根据实际的最后结果我们做一些过滤比如 id 他肯定是个数字 那么用 $id=intval($_GET['id']);
    就能省掉很多事当然 你可以参考http://www.phphtm.com/2011/1022/3NMDAwMDAwNjk3Ng.html
    http://blog.163.com/yes___ican/blog/static/1850624492012029105531388/互联网上已经有很多这种介绍了,解决方法也很多。看看吧,不懂再来问1.检测提交数据的长度
    2.检测提交数据的类型
    3.过滤提交内容包含的非法符号/单词
      

  4.   


    他用注入的方法绕过了你的验证 你的php代码没写好,这个是典型的。不过只要密码不是明文,将漏洞堵上就不怕咯.
      

  5.   

    有可能被注入了。shop_id
    这个是id吧?取值时用 (int)$_GET['shop_id']; 。或用addslashes($_GET['shop_id']),给单引加转义,
    SQL查询时就  shop_id = '$shop_id' 单引查询值。或把你网站贴上来给给你找洞洞 或...
      

  6.   

    /au/shop.php?dest_id=3&shop_id=999999.9+union+all+select+%28select+concat%280x7e%2C0x27%2CCART.username%2C0x27%2C0x7e%29+from+%60whimwin1_DB%60.CART+Order+by+ip_address+limit+40%2C1%29+--看这个好像注入点已经找到了 在查数据了吧?
      

  7.   

    楼主:1, 没有@抑制错误
    2, 没有对用户数据addslashes就执行了sql查询必须悲剧, 随便丢两个垃圾请求让mysql报报错就知道你的sql语句了,表结构就知道了, 直接开始注入了.
      

  8.   

    3&shop_id=999999.9 union all select (select concat(0x7e,0x27,CART.username,0x27,0x7e) from `whimwin1_DB`.CART Order by ip_address limit 40,1) --我们来分析一下,你原本将3和shop_id插入到sql语句中执行查询,结果人家在shop_id=99999.9之后加入了后边的union语句,结果就是你的sql语句是原本的:select * from xxx where id=3 and shop_id 9999.9 变成了:select * from xxx where id=3 and shop_id 9999.9 union all select (select concat(0x7e,0x27,CART.username,0x27,0x7e) from `whimwin1_DB`.CART Order by ip_address limit 40,1) --后面的--是为了注释掉你原本sql语句where子句后面可能还存在的其他例如orderby子句。后边查询的东西不知道whimwin1_DB是什么了。
      

  9.   


    所以,首先addslshes你的各个字段,另外一定用''包裹, 这样就OK了.
      

  10.   


    就是,给我们也去注入注入练练SQL呗。