企业网站模板演示企业贷款
2026/4/16 21:20:56 网站建设 项目流程
企业网站模板演示,企业贷款,东莞 网站制作,经典网站代码攻防世界#xff1a; ics-05 本文知识点 preg_replace可执行代码漏洞的使用 preg_replace有三个参数#xff0c;第一个参数是正则的模式字符串#xff0c;第二个是替换的数据#xff0c;第三个是正则模式字符串要去匹配的字符串。 当正则的模式字符串与要匹配的字符串匹配…攻防世界 ics-05本文知识点preg_replace可执行代码漏洞的使用preg_replace有三个参数第一个参数是正则的模式字符串第二个是替换的数据第三个是正则模式字符串要去匹配的字符串。当正则的模式字符串与要匹配的字符串匹配时即第一个参数与第三个参数匹配就会使用替换数据第二个参数进行替换。当正则的第一个参数包含/e的时候就能触发代码执行的逻辑具体可看后文。题目总览点击下图中的红框位置跳转到设备维护中心的页面然后再次点击云平台设备维护中心可以看到浏览器中出现了page参数因此怀疑其是一个文件包含的漏洞。原始文件获取使用前面提到过的php伪协议将index.php转换为base64的编码输出。为什么转换为base64, 因为文件包含漏洞的后端代码可能是include $page如果这是一个php的代码php代码的执行引擎会直接执行而不会将原始文件返回给我们我们希望得到原始的文件方便我们分析怎么绕过得到flag。将上述的base64解码得到下面的php内容?phperror_reporting(0);session_start();posix_setuid(1000);?!DOCTYPEHTMLhtmlheadmeta charsetutf-8meta namerenderercontentwebkitmeta http-equivX-UA-CompatiblecontentIEedge,chrome1meta nameviewportcontentwidthdevice-width, initial-scale1, maximum-scale1link relstylesheethreflayui/css/layui.cssmediaalltitle设备维护中心/titlemeta charsetutf-8/headbodyulclasslayui-navliclasslayui-nav-item layui-thisa href?pageindex云平台设备维护中心/a/li/ulfieldsetclasslayui-elem-field layui-field-titlestylemargin-top: 30px;legend设备列表/legend/fieldsettableclasslayui-hideidtest/tablescript typetext/htmlidswitchTpl!--这里的 checked 的状态只是演示--input typecheckboxnamesexvalue{{d.id}}lay-skinswitchlay-text开|关lay-filtercheckDemo{{d.id10003?checked:}}/scriptscript srclayui/layui.jscharsetutf-8/scriptscriptlayui.use(table,function(){vartablelayui.table,formlayui.form;table.render({elem:#test,url:/somrthing.json,cellMinWidth:80,cols:[[{type:numbers},{type:checkbox},{field:id,title:ID,width:100,unresize:true,sort:true},{field:name,title:设备名,templet:#nameTpl},{field:area,title:区域},{field:status,title:维护状态,minWidth:120,sort:true},{field:check,title:设备开关,width:85,templet:#switchTpl,unresize:true}]],page:true});});/scriptscriptlayui.use(element,function(){varelementlayui.element;//导航的hover效果、二级菜单等功能需要依赖element模块//监听导航点击element.on(nav(demo),function(elem){//console.log(elem)layer.msg(elem.text());});});/script?php$page$_GET[page];if(isset($page)){if(ctype_alnum($page)){?br/br/br/br/div styletext-align:centerpclasslead?phpecho$page;die();?/pbr/br/br/br/?php}else{?br/br/br/br/div styletext-align:centerpclasslead?phpif(strpos($page,input)0){die();}if(strpos($page,ta:text)0){die();}if(strpos($page,text)0){die();}if($pageindex.php){die(Ok);}include($page);die();?/pbr/br/br/br/?php}}//方便的实现输入输出的功能,正在开发中的功能只能内部人员测试if($_SERVER[HTTP_X_FORWARDED_FOR]127.0.0.1){echobr Welcome My Admin ! br ;$pattern$_GET[pat];$replacement$_GET[rep];$subject$_GET[sub];if(isset($pattern)isset($replacement)isset($subject)){preg_replace($pattern,$replacement,$subject);}else{die();}}?/body/html代码分析重点关注下面的代码前面提到的知识点我们可以利用preg_replace函数的可执行漏洞执行我们想执行的任何代码。HTTP_X_FORWARDED_FOR这个请求头就是客户端的ip地址我们知道这个地址是能通过x-forwarded-for的请求头进行伪造的。if($_SERVER[HTTP_X_FORWARDED_FOR]127.0.0.1){echobr Welcome My Admin ! br ;$pattern$_GET[pat];$replacement$_GET[rep];$subject$_GET[sub];if(isset($pattern)isset($replacement)isset($subject)){preg_replace($pattern,$replacement,$subject);}else{die();}}破解思路通过前面的分析我能想到的一条路径就是发送一个x-forwarded-for的请求头到达preg_replace函数的处理逻辑然后利用这个函数的漏洞执行任意代码从而拿到flag。尝试执行ls系统命令得到对应的文件名或则文件夹名称。如果你不知道谁是文件还是文件夹可以执行ls -l命令使用cat命令查看flag。注意这里我有几个踩坑的地方pat参数不能够匹配sub参数导致代码没有得到执行。最简单的情况就是pat是sub 的子字符串由于我直接在burp suite中进行改包忘记将参数进行uri的编码了导致执行失败uri编码小知识对Url进行编码后可以将一些特殊字符和汉字变为Encode编码格式encodeURI方法不会对下列字符编码 ASCII字母、数字、~!#$*():/,;?’encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()’encodeURIComponent编码的范围更广会将http://XXX中的//也编码会导致URL不可用。错误的编码方式正确的编码方式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询