不幸的是,我太新手了,无法寻找这个问题的答案,甚至不知道如何正确地表述它,因为我不知道我在看什么。
这是我在 nginx access.log 中看到的内容。显然,我可以找出 IP 地址和日期。但 \x 后面的参数并不总是十六进制。或者这是 unicode 表示和实际 ASCII 字符的混合?
显然,nginx 认为这是无稽之谈(格式错误的返回代码)。但我想知道发生了什么。所有 IP 地址都是用于 ISP 的,因此我无法真正阻止它们,因为它们是动态的。
68.197.228.104 - - [07/Aug/2016:06:41:41 +0000] "\x9F\x00\x00\x00B\xF3Z\xC7\xDB\xC9b\xC7\xDD=\xE2\xB4m0+\x9E\xA8\x1E\xC5)Z\xDD\xFAD=}\x9E\xE1!\xBA\xE0\xFB\xA0\xA0Z|\xC1K\xBA\xC1\xD1\xD8\xA7\x8C\xD47YrG\xB0\xB4C\x1Fo\x80\xD8\x15\x088\x1B4\xBE\x02z7\x85s\x9753\xA2M\xAC\x22\x5C\x04{4F\x87[\xFD\x17\xFCE\x82}~\x99z\x9D\x87T\xA1\xBB\x89\x8F\xF7/\xD9\xB7g\xF2\x14/\xC7x\xDC\xBElg\xF50\x06;\xE0'\xF3|\xF6\xAD\xBB\x87\xE0\xE2\x8F\x12\x8C\x8B'*\xF6c\xB5\xC9D\xF1\x1Ay!\xAA\xC8\xDA\xEF\xFA\xDEw\x08g\x9B\x1A$<`\x93!~ ^" 400 173 "-" "-"
172.56.30.114 - - [07/Aug/2016:08:55:36 +0000] "\x16\x03\x01\x02\x00\x01\x00\x01\xFC\x03\x034\xA9\x06\x18\xAE\x96 \x0F\xDD\xAA7\x05\x16\xCA\xE9\xE0A69\xE7P\xAB\xCC\xEFB\xBB)yQ\xFE\x00\x00\xA8\x00\x05\x00\x04\x00\x15\x00\x16\x003\x009\x00:\x00\x1A\x00\x18\x005\x00\x09\x00" 400 173 "-" "-"
我正在取消回答我的答案。虽然那所大学是这些字符的来源,但如果你检查 IP 地址,它显然不是唯一的来源。这是来自 nginx access.log 的新条目
75.120.80.102 - - [17/Aug/2016:17:56:54 +0000] "\x9F\x00\x00\x00B\xF3Z\xC7\xDB\xC9b\xC7\xDD=\xE2\xB4m0+\x9E\xA8\x1E\xC
5)Z\xDD\xFAD=}\x9E\xE1!\xBA\xE0\xFB\xA0\xA0Z|\xC1K\xBA\xC1\xD1\xD8\xA7\x8C\xD47YrG\xB0\xB4C\x1Fo\x80\xD8\x15\x088\x1B4
\xBE\x02z7\x85s\x9753\xA2M\xAC\x22\x5C\x04{4F\x87[\xFD\x17\xFCE\x82}~\x99z\x9D\x87T\xA1\xBB\x89\x8F\xF7/\xD9\xB7g\xF2\
x14/\xC7x\xDC\xBElg\xF50\x06;\xE0'\xF3|\xF6\xAD\xBB\x87\xE0\xE2\x8F\x12\x8C\x8B'*\xF6c\xB5\xC9D\xF1\x1Ay!\xAA\xC8\xDA\
xEF\xFA\xDEw\x08g\x9B\x1A$<`\x93!~ ^" 400 173 "-" "-"
这很有趣。请注意在无意义字符之前对 ipip.net 的请求。它得到了 444(回复是第一个参数),因为它触发了我放入 nginx 的一些代码,尽管我不太确定它为什么会出现,因为我不会中继请求。
444 139.162.13.205 - - [26/Aug/2016:12:04:52 +0000] "GET http://clientapi.ipip.net/echo.php?info=20160826200452 HTTP/1
.1" 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64)" "-"
400 139.162.13.205 - - [26/Aug/2016:12:04:53 +0000] "\x00\x9C\x00\x01\x1A+<M\x00\x01\x00\x00\x01\x00\x00\x00\x00\x00\x
00\x01\x00\x00\x00\x01\x00\x00" 173 "-" "-" "-"
400 139.162.13.205 - - [26/Aug/2016:12:04:53 +0000] "\x05\x02\x00\x02" 173 "-" "-" "-"
400 139.162.13.205 - - [26/Aug/2016:12:05:04 +0000] "\x04\x01\x1F\x00\x00\x00\x00\x00\x00" 173 "-" "-" "-"
答案1
这是标准 ASCII 字符和十六进制编码字符的混合。例如,在第一个请求的开头,\x00B
是空字节和 ASCII B。这样做的目的是以某种方式对请求进行编码,使服务器上的保护软件无法检测到攻击。
答案2
好的,问题解决了。
“我可以请求排除我的服务器吗?要让您的主机或网络免受亚琛工业大学未来扫描的影响,请联系[电子邮件保护]与您的 IP 地址或 CIDR 块。或者,您可以将防火墙配置为丢弃来自我们用于扫描的子网的流量:137.226.113.0/24。”
全文见链接。这是一个所谓的研究项目。
答案3
您可以在fail2ban中添加规则来减少这些复杂的攻击字符串。
请看我的回答:
https://stackoverflow.com/questions/46254721/regex-for-detecting-complex-attack-strings-on-web-sites