1. 程式人生 > 實用技巧 >作業系統基礎資訊蒐集

作業系統基礎資訊蒐集

前言

對於作業系統的資訊蒐集有什麼作用?提權、深入測試、域滲透、留後門······
有一位大師傅曾經說過:內網滲透的本質是資訊蒐集。

看了許多內網資訊收集的文章,所用到的收集資訊的命令大都是相同的。既然如此,寫一個簡單的指令碼省去一些重複操作。

Windows

常用命令

whoami/echo %USERNAME%  # 當前使用者
ipconfig  # IP 資訊
net user  # 使用者列表
systeminfo  # 檢視系統資訊
wmic qfe  get HotFixID  # 純補丁資訊
set  # 檢視環境變數
netsh firewall show state  # 檢視防火牆狀態
net localgroup  # 檢視使用者組
net localgroup administrators  # 檢視本機管理員
net config workstation  # 檢視當前計算機名,全名,使用者名稱,系統版本,工作 站域,登陸域


netstat -ano  # 檢視埠
tasklist  # 檢視所有程序
net start  # 檢視已啟動的服務
net share  # 檢視共享列表


net user /domain  # 獲取域內使用者資訊
net view /domain  # 查詢域
net group /domain  # 查詢域內所有使用者
net group "domain computers" /domain  # 查詢所有域成員計算機
net accounts /domain  # 獲取域密碼資訊
net group "Domain admins" /domain  # 收集管理員列表
net group "Domain Controller" /domain  # 查詢域控制器列表
Nslookup -type=SRV _ldap._tcp  # 檢視域控制器的主機

可能存在敏感檔案

C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
C:\Apache\logs\error.log
C:\Apache2\conf\httpd.conf
C:\Apache2\logs\access.log
C:\Apache2\logs\error.log
C:\Apache22\conf\httpd.conf
C:\Apache22\logs\access.log
C:\Apache22\logs\error.log
C:\Apache24\conf\httpd.conf
C:\Apache24\logs\access.log
C:\Apache24\logs\error.log
C:\Documents and Settings\Administrator\NTUser.dat
C:\php\php.ini
C:\php4\php.ini
C:\php5\php.ini
C:\php7\php.ini
C:\Program Files (x86)\Apache Group\Apache\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache\logs\access.log
C:\Program Files (x86)\Apache Group\Apache\logs\error.log
C:\Program Files (x86)\Apache Group\Apache2\conf\httpd.conf
C:\Program Files (x86)\Apache Group\Apache2\logs\access.log
C:\Program Files (x86)\Apache Group\Apache2\logs\error.log
c:\Program Files (x86)\php\php.ini"
C:\Program Files\Apache Group\Apache\conf\httpd.conf
C:\Program Files\Apache Group\Apache\conf\logs\access.log
C:\Program Files\Apache Group\Apache\conf\logs\error.log
C:\Program Files\Apache Group\Apache2\conf\httpd.conf
C:\Program Files\Apache Group\Apache2\conf\logs\access.log
C:\Program Files\Apache Group\Apache2\conf\logs\error.log
C:\Program Files\FileZilla Server\FileZilla Server.xml
C:\Program Files\MySQL\my.cnf
C:\Program Files\MySQL\my.ini
C:\Program Files\MySQL\MySQL Server 5.0\my.cnf
C:\Program Files\MySQL\MySQL Server 5.0\my.ini
C:\Program Files\MySQL\MySQL Server 5.1\my.cnf
C:\Program Files\MySQL\MySQL Server 5.1\my.ini
C:\Program Files\MySQL\MySQL Server 5.5\my.cnf
C:\Program Files\MySQL\MySQL Server 5.5\my.ini
C:\Program Files\MySQL\MySQL Server 5.6\my.cnf
C:\Program Files\MySQL\MySQL Server 5.6\my.ini
C:\Program Files\MySQL\MySQL Server 5.7\my.cnf
C:\Program Files\MySQL\MySQL Server 5.7\my.ini
C:\Program Files\php\php.ini
C:\Users\Administrator\NTUser.dat
C:\Windows\debug\NetSetup.LOG
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\Panther\Unattended.xml
C:\Windows\php.ini
C:\Windows\repair\SAM
C:\Windows\repair\system
C:\Windows\System32\config\AppEvent.evt
C:\Windows\System32\config\RegBack\SAM
C:\Windows\System32\config\RegBack\system
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SecEvent.evt
C:\Windows\System32\config\SysEvent.evt
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\drivers\etc\hosts
C:\Windows\System32\winevt\Logs\Application.evtx
C:\Windows\System32\winevt\Logs\Security.evtx
C:\Windows\System32\winevt\Logs\System.evtx
C:\Windows\win.ini
C:\xampp\apache\conf\extra\httpd-xampp.conf
C:\xampp\apache\conf\httpd.conf
C:\xampp\apache\logs\access.log
C:\xampp\apache\logs\error.log
C:\xampp\FileZillaFTP\FileZilla Server.xml
C:\xampp\MercuryMail\MERCURY.INI
C:\xampp\mysql\bin\my.ini
C:\xampp\php\php.ini
C:\xampp\security\webdav.htpasswd
C:\xampp\sendmail\sendmail.ini
C:\xampp\tomcat\conf\server.xml

Linux

常用命令

whoami  # 使用者名稱
id  # 使用者 id
cat /etc/shadow #獲取使用者 hash,需要 root 許可權
cat /etc/issue  # 檢視系統名稱
cat /etc/lsb-release  # 檢視系統名稱、版本號
uname -a  # 檢視所有資訊
ps aux  # 檢視所有程序詳細資訊
top  # 檢視程序
ifconfig/ip addr  # 檢視 IP
cat /etc/serivices  # 檢視存在的服務
history  # 檢視歷史命令
cat ~/.bash_history # 所有歷史命令
dpkg -l  # 檢視安裝的軟體包
lastlog  # 檢視使用者登入日誌
cat /etc/group  # 檢視使用者組
grep -v -E "^#" /etc/passwd | awk -F: '$3==0{print $1}'  # 列出超級使用者
env  # 檢視環境變數
last  # 歷史登陸使用者

可能存在的敏感檔案

cat /etc/httpd/logs/access_log
cat /etc/httpd/logs/access.log
cat /etc/httpd/logs/error_log
cat /etc/httpd/logs/error.log
cat /var/log/apache2/access_log
cat /var/log/apache2/access.log
cat /var/log/apache2/error_log
cat /var/log/apache2/error.log
cat /var/log/apache/access_log
cat /var/log/apache/access.log
cat /var/log/auth.log
cat /var/log/chttp.log
cat /var/log/cups/error_log
cat /var/log/dpkg.log
cat /var/log/faillog
cat /var/log/httpd/access_log
cat /var/log/httpd/access.log
cat /var/log/httpd/error_log
cat /var/log/httpd/error.log
cat /var/log/lastlog
cat /var/log/lighttpd/access.log
cat /var/log/lighttpd/error.log
cat /var/log/lighttpd/lighttpd.access.log
cat /var/log/lighttpd/lighttpd.error.log
cat /var/log/messages
cat /var/log/secure
cat /var/log/syslog
cat /var/log/wtmp
cat /var/log/xferlog
cat /var/log/yum.log
cat /var/run/utmp
cat /var/webmin/miniserv.log
cat /var/www/logs/access_log
cat /var/www/logs/access.log
ls -alh /var/lib/dhcp3/
ls -alh /var/log/postgresql/
ls -alh /var/log/proftpd/
ls -alh /var/log/samba/

簡易指令碼

# -s 指定作業系統  Linux/Windos
# -d 指定是否存在域,不清楚可省略 0/1 0表示無,1表示有
import subprocess
import argparse


cmds = [{
    'whoami': '當前使用者',
    'ipconfig': 'IP 資訊',
    'net user': '使用者列表',
    'systeminfo': '檢視系統資訊',
    'wmic qfe get HotFixID': '補丁資訊',
    'set': '環境變數',
    'netsh firewall show state': '防火牆狀態',
    'net localgroup': '所有使用者組',
    'net localgroup administrators': '管理員組成員',
    'net config workstation': '當前計算機名、全名、使用者名稱、系統版本、工作站域、登陸域'
}, {
    'netstat -ano': '埠資訊',
    'tasklist': '所有程序',
    'net start': '已啟動服務',
    'net share': '共享列表',
}, {
    'net view /domain': '查詢域結果',
    'net user /domain': '域內使用者資訊',
    'net group /domain': '域內所有使用者組',
    'net group "domain computers" /domain': '所有域成員計算機',
    'net accounts /domain': '域密碼資訊',
    'net group "Domain admins" /domain': '域管理員列表',
    'net group "Domain Controller" /domain': '查詢域控制器列表',
    'nslookup -type=SRV _ldap._tcp': '域控制器的主機',
}]

bashs = [
    {
        'whoami': '使用者名稱',
        'id': '使用者 id',
        'cat /etc/issue': '檢視系統名稱',
        'cat /etc/lsb-release': '系統名稱、版本號',
        'uname -a': '核心資訊',
        'ip addr': 'IP',
        'cat ~/.bash_history': '歷史命令',
        'grep -v -E "^#" /etc/passwd | awk -F: "$3==0{print $1}"': '超級使用者',
        'env': '環境變數',
        'lastlog': '使用者登入日誌',
        'last': '歷史登陸使用者',
        'cat /etc/group': '檢視使用者組',
    },
    {
        'dpkg -l': '檢視安裝的軟體包',
        'cat /etc/serivices': '存在的服務',
        'pa aux': '所有程序詳細資訊',
    },
    {
        'cat /etc/shadow': '使用者 hash',
    }
]

win = '''C:\\Apache\\conf\\httpd.conf
C:\\Apache\\logs\\access.log
C:\\Apache\\logs\\error.log
C:\\Apache2\\conf\\httpd.conf
C:\\Apache2\\logs\\access.log
C:\\Apache2\\logs\\error.log
C:\\Apache22\\conf\\httpd.conf
C:\\Apache22\\logs\\access.log
C:\\Apache22\\logs\\error.log
C:\\Apache24\\conf\\httpd.conf
C:\\Apache24\\logs\\access.log
C:\\Apache24\\logs\\error.log
C:\\Documents and Settings\\Administrator\\NTUser.dat
C:\\php\\php.ini
C:\\php4\\php.ini
C:\\php5\\php.ini
C:\\php7\\php.ini
C:\\Program Files (x86)\\Apache Group\\Apache\\conf\\httpd.conf
C:\\Program Files (x86)\\Apache Group\\Apache\\logs\\access.log
C:\\Program Files (x86)\\Apache Group\\Apache\\logs\\error.log
C:\\Program Files (x86)\\Apache Group\\Apache2\\conf\\httpd.conf
C:\\Program Files (x86)\\Apache Group\\Apache2\\logs\\access.log
C:\\Program Files (x86)\\Apache Group\\Apache2\\logs\\error.log
c:\\Program Files (x86)\\php\\php.ini
C:\\Program Files\\Apache Group\\Apache\\conf\\httpd.conf
C:\\Program Files\\Apache Group\\Apache\\conf\\logs\\access.log
C:\\Program Files\\Apache Group\\Apache\\conf\\logs\\error.log
C:\\Program Files\\Apache Group\\Apache2\\conf\\httpd.conf
C:\\Program Files\\Apache Group\\Apache2\\conf\\logs\\access.log
C:\\Program Files\\Apache Group\\Apache2\\conf\\logs\\error.log
C:\\Program Files\\FileZilla Server\\FileZilla Server.xml
C:\\Program Files\\MySQL\\my.cnf
C:\\Program Files\\MySQL\\my.ini
C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.cnf
C:\\Program Files\\MySQL\\MySQL Server 5.0\\my.ini
C:\\Program Files\\MySQL\\MySQL Server 5.1\\my.cnf
C:\\Program Files\\MySQL\\MySQL Server 5.1\\my.ini
C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.cnf
C:\\Program Files\\MySQL\\MySQL Server 5.5\\my.ini
C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.cnf
C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini
C:\\Program Files\\MySQL\\MySQL Server 5.7\\my.cnf
C:\\Program Files\\MySQL\\MySQL Server 5.7\\my.ini
C:\\Program Files\\php\\php.ini
C:\\Users\\Administrator\\NTUser.dat
C:\\Windows\\debug\\NetSetup.LOG
C:\\Windows\\Panther\\Unattend\\Unattended.xml
C:\\Windows\\Panther\\Unattended.xml
C:\\Windows\\php.ini
C:\\Windows\\repair\\SAM
C:\\Windows\\repair\\system
C:\\Windows\\System32\\config\\AppEvent.evt
C:\\Windows\\System32\\config\\RegBack\\SAM
C:\\Windows\\System32\\config\\RegBack\\system
C:\\Windows\\System32\\config\\SAM
C:\\Windows\\System32\\config\\SecEvent.evt
C:\\Windows\\System32\\config\\SysEvent.evt
C:\\Windows\\System32\\config\\SYSTEM
C:\\Windows\\System32\\drivers\\etc\\hosts
C:\\Windows\\System32\\winevt\\Logs\\Application.evtx
C:\\Windows\\System32\\winevt\\Logs\\Security.evtx
C:\\Windows\\System32\\winevt\\Logs\\System.evtx
C:\\Windows\\win.ini
C:\\xampp\\apache\\conf\\extra\\httpd-xampp.conf
C:\\xampp\\apache\\conf\\httpd.conf
C:\\xampp\\apache\\logs\\access.log
C:\\xampp\\apache\\logs\\error.log
C:\\xampp\\FileZillaFTP\\FileZilla Server.xml
C:\\xampp\\MercuryMail\\MERCURY.INI
C:\\xampp\\mysql\\bin\\my.ini
C:\\xampp\\php\\php.ini
C:\\xampp\\security\\webdav.htpasswd
C:\\xampp\\sendmail\\sendmail.ini
C:\\xampp\\tomcat\\conf\\server.xml'''

lin = """/etc/httpd/logs/access_log
/etc/httpd/logs/access.log
/etc/httpd/logs/error_log
/etc/httpd/logs/error.log
/var/log/apache2/access_log
/var/log/apache2/access.log
/var/log/apache2/error_log
/var/log/apache2/error.log
/var/log/apache/access_log
/var/log/apache/access.log
/var/log/auth.log
/var/log/chttp.log
/var/log/cups/error_log
/var/log/dpkg.log
/var/log/faillog
/var/log/httpd/access_log
/var/log/httpd/access.log
/var/log/httpd/error_log
/var/log/httpd/error.log
/var/log/lastlog
/var/log/lighttpd/access.log
/var/log/lighttpd/error.log
/var/log/lighttpd/lighttpd.access.log
/var/log/lighttpd/lighttpd.error.log
/var/log/messages
/var/log/secure
/var/log/syslog
/var/log/wtmp
/var/log/xferlog
/var/log/yum.log
/var/run/utmp
/var/webmin/miniserv.log
/var/www/logs/access_log
/var/www/logs/access.log"""

Win_files = win.split('\n')
Lin_files = lin.split('\n')


def getInfo(system, key):
    if system == "Windows":
        exes = cmds
        if key == '0':
            exes.pop()
            print(exes)
        files = win
    else:
        exes = bashs
        files = lin
    all = ''
    for commands in exes:
        for k, v in commands.items():
            try:
                res = subprocess.Popen(k, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="utf-8")
                res = v + ":\n" + res.stdout.read() + "-------******-------\n"
                print(res)
                all += res
            except:
                res = subprocess.Popen(k, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding="gbk")
                res = v + ":\n" + res.stdout.read() + "-------******-------\n"
                print(res)
                all += res

    all += '存在的敏感檔案有:\n'
    print('存在的敏感檔案有:(Linux 下由於許可權問題掃描可能會不準確!請複測!!)\n')
    for file in files:
        try:
            with open(file, 'r'):
                all += (file + '\n')
                print(file + '\n')
        except:
            pass
    with open('result.txt', 'a+') as f:
        f.write(all)
    print("\n\nEverything is Done!")
    print('執行的命令有:')
    for command in exes:
        for k, v in command.items():
            print(k)


def main():
    parser = argparse.ArgumentParser(description='InfoScan')
    parser.add_argument("-s", "--system", help="指定作業系統", default='Windows')
    parser.add_argument("-d", "--domain", help="是否存在域,不確定可以不用加", default=0)
    args = parser.parse_args()
    system = args.system
    key = args.domain
    getInfo(system, key)


if __name__ == '__main__':
    main()