|
拿到一个IP地址,知道离真正“进入”服务器还差得远。何进很多人以为知道IP就等于拿到了钥匙,入服其实那只是知道一栋楼的地址,连门牌号都算不上。何进你站在楼下,入服连单元门都进不去。知道 我见过太多人卡在这一步。何进ping通了一个IP,入服兴奋地截图发群里说“找到了”,知道然后呢?何进然后就没有然后了。ping通只证明那台机器活着,入服网络可达,知道仅此而已。何进它不会告诉你上面跑着什么服务,入服更不会主动给你开门。 先搞清楚那台机器在听什么 最直接的办法是扫端口。nmap是干这个的老手,一条命令下去,常见端口的状态一目了然。比如nmap -sV 192.168.1.100,-sV会尝试识别服务版本。22端口开着,大概率是SSH;80和443开着,那是Web服务;3389是Windows远程桌面;3306是MySQL。端口就是那栋楼里亮着灯的窗户,告诉你哪间屋子有人。 但别高兴太早。很多服务器只对外开放80和443,SSH改到高位端口,数据库只监听127.0.0.1。你扫出来的结果可能只有那么两三个端口,剩下的全是filtered。防火墙在后面冷笑。 找到入口之后,还得有凭证 假设22端口开着,SSH服务在跑。你敲下ssh root@192.168.1.100,回车。服务器回你一句“Permission denied (publickey)”。这条路就堵死了。密码认证被禁用,只允许密钥登录。你手里没有对应的私钥,知道IP和端口也没用。 Web服务稍微好一点,至少浏览器能打开一个页面。但登录框弹出来的时候,你还是得面对用户名和密码。弱口令能碰运气,admin/admin、root/123456这种,但稍微正经一点的服务器早就禁掉了。我试过一台暴露在公网的Jenkins,默认口令没改,进去之后直接能执行系统命令。那是运气,不是常态。 有些“进入”根本不需要密码 Redis未授权访问是个经典例子。6379端口对外开放,没有密码,连上去直接config set dir /root/.ssh,再config set dbfilename authorized_keys,把自己的公钥写进去。完事之后SSH直接密钥登录。整个过程不需要知道任何密码。这种漏洞前几年遍地都是,现在少了很多,但内网里偶尔还能碰到。 类似的还有MongoDB未授权、Elasticsearch未授权。这些服务默认不设认证,装完就能用,很多人图省事直接暴露在公网。你连上去,数据随便读,甚至能写。但这不是“进入服务器”,这是服务本身没锁门。你能操作数据,但拿不到shell。 从服务漏洞到系统权限,中间隔着一条河 Web应用有RCE漏洞,你能执行命令,但通常是以www-data或者apache这种低权限用户跑着。想提权到root,还得找内核漏洞、SUID文件、计划任务配置错误。每一步都是独立的关卡。知道IP只是买了张地图,真正的路得自己一步步蹚出来。 我自己的习惯是,拿到IP先别急着扫。先看这个IP属于哪个网段,反向解析出什么域名,whois查一下归属。有时候域名比IP透露的信息更多。一个IP上绑了十几个域名,那大概率是共享主机,别费劲了。只有一个域名,而且是内部命名规范,那才值得花时间。 进入服务器这件事,说到底是在找一条从外部到内部的路径。IP是起点,端口是门,凭证是钥匙,漏洞是后门。缺了哪一样,你都进不去。很多人只盯着IP看,以为那是全部,其实那只是故事的第一行。 |