Note-51077-8

Token ID: 1

ERC-721 1 Transfers

Metadata

{
  "title": "浅学$IFS在Shell与Web攻击中的用法",
  "tags": [
    "post",
    "Linux",
    "Shell",
    "网络安全"
  ],
  "sources": [
    "xlog"
  ],
  "external_urls": [
    "https://daxin-6967.xlog.app/ifs-shell"
  ],
  "date_published": "2023-04-01T04:07:33.312Z",
  "content": "今天在分析数据包搜索资料的时候,偶然看到了一篇Freebuf文章提到了${IFS}。\n附下链接:\nhttps://www.freebuf.com/articles/web/286513.html\n\n知识盲区,所以特地搜了一圈,记录下自己的理解。\n\n$IFS是shell脚本中的一种set变量,当shell处理\"命令替换\"和\"参数替换\"时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。\n\n如果直接 echo \"cd${IFS}/home\" %{IFS}内的值应该是\\n\n\n![image](ipfs://bafkreihubarno7rd6gpkvwzevokblebm3jrhh7mwubzpatx6meawnmxuxi)\n但是 当用双引号包裹住$IFS时,$IFS会失效。比如创建shell文件写入下方内容\n输入\n```\nIFS='-'\nstring2=\"1--2--3--4\"\necho $string2\necho \"$string2\"\n```\n输出:\n```\n1  2  3  4\n1--2--3--4\n```\n\n根据链接中的黑客攻击操作,尝试在服务器上直接执行:\n```\n/bin/sh${IFS}-c${IFS}'cd${IFS}/home/target;ls${IFS}-l'\n```\n\n这种写法的命令是可以被执行的,并且能拿到命令的执行结果\n如果这种命令出现在了URL中,且WEB中存在目录穿越漏洞,且IPS或者WAF在检测URL时没有包含对${IFS}的判断 那么很有可能会被攻击者得手\n那时候攻击者可能就是提取的passwd文件,nc回连等操作了。\n\n如果后续有新的学习心得,再补充吧~",
  "attributes": [
    {
      "value": "ifs-shell",
      "trait_type": "xlog_slug"
    }
  ]
}