第一百零一次闯荡江湖的无名游侠 - 2018年1月
type: channel
link: http://diyibailingyici.chuangdangjianghudewumingyouxia.cn/2018/01/
description: 英雄願望 〜アルゴイゥ卜~
items: PHP My Admin被曝存在严重CSRF漏洞可对数据库造成破坏
items: PHPExcel+ThinkPHP5 +ajax实现导入有合并的单元格并以tabel显示

PHP My Admin被曝存在严重CSRF漏洞可对数据库造成破坏
type: item
date: 2018-01-08T22:29:00+08:00
description: 近期，印度安全工程师Ashutosh Barot发现phpMyAdmin存在严重CSRF漏洞（跨站请求伪造），可以通过技巧欺骗管理员去点击构造链接，触发对基于phpMyAdmin的MySQL数据库的远程操作，实现对数据库的破坏攻击行为。漏洞影响该漏洞对phpMyAdmin 4.7.x系列中4.7.7之前的所有版本造成影响，目前，phpMyAdmin官方已发布漏洞修补声明，声明中提到“该漏洞利用方式为，通过欺骗当前登录用户点击某个恶意构造链接，之后可能导致对MySQL数据库的记录数据等信息的删除（dropping/truncating tables）”。漏洞分析CSRF是OWASP Top 10的严重漏洞之一， phpMyAdmin发起删除数据表等操作的POST请求后，会执行一个Get请求，为防止CSRF攻击Get会受到安全防护。该案例中，可以通过如浏览器书签等URL链接来发起POST请求，攻击者可以藉此构造特殊恶意链接按钮，欺骗管理员点击之后，达到操作数据库目的。虽然有这种可能，但对于远程攻击者来说，很难收集到可以构造恶意URL的相关信息。基于此，我发现可以利用Burp的请求更改功能，把phpMyAdmin的POST请求转换为GET请求，之后，即使身份token过期或被清除，一样可以把它从URL中直接执行。利用这种方法，我可以添加一个wordpress的管理员用户。为了实现目的，攻击者则需要知道cPanel的会话id和数据库名称，其它如wp_users的表名则非常容易进行猜解。执行数据库操作的构造URL可以被保存在浏览器历史记录中，如果用户点击insert和DROP等按钮来执行查询操作，该URL就需要包含数据库名和表名等信息。由于这种构造URL链接可在浏览器历史、安全事件管理日志（SIEM logs）、防火墙日志、ISP日志等地存储，因此，该漏洞还可导致某种程度上的敏感信息泄露。在用户通过了phpMyAdmin的管理面板认证登录后，即使关闭了phpMyAdmin，这种CSRF攻击照样可行。但如果想要成功利用该漏洞，实现远程数据库操作，需要与用户有一个点击链接的交互，因此，目前该漏洞的影响程度暂定为中级（Medium）。POC视频视频中，远程攻击者通过欺骗管理员点击构造的恶意链接后，就能让管理员毫不知情地删除了整个数据库。漏洞修复phpMyAdmin通过数据库管理功能能与WordPress、Joomla等建站系统结合，很多服务托管商也会使用phpMyAdmin后台来管理交互客户数据，基于此，phpMyAdmin已经发布了修复措施，希望相关受影响用户及时修补漏洞，或下载更新版本。*参考来源：cyberworldmirror，freebuf小编clouds编译，转载请注明来自FreeBuf.COM

PHPExcel+ThinkPHP5 +ajax实现导入有合并的单元格并以tabel显示
type: item
date: 2018-01-05T22:59:00+08:00
description: 要导入的excel如下,显示在网页的html也一样；但也只能按照这样的合并，横向不能合并，不合并的不能为空，还要改几下php代码public function daoru{ vendor("PHPExcel.PHPExcel"); //获取表单上传文件 $file = request()->file('file'); $info = $file->validate(['ext'=>'xlsx,xls'])->move(ROOT_PATH . 'public' . DS . 'uploads' . DS); //数据为空返回错误 if(empty($info)){ $result=array( 'code'=>40003, 'msg'=>'导入数据失败！请查看文件是否有问题！' ); return json($result); } //获取文件名 $exclePath = $info->getSaveName(); //上传文件的地址 $filename = ROOT_PATH . 'public' . DS . 'uploads' . DS . $exclePath; //echo $filename; //判断截取文件 $extension = strtolower( pathinfo($filename, PATHINFO_EXTENSION) ); //区分上传文件格式 if($extension == 'xlsx') { $objReader =\PHPExcel_IOFactory::createReader('Excel2007'); $objPHPExcel = $objReader->load($filename, $encode = 'utf-8'); }else if($extension == 'xls'){ $objReader =\PHPExcel_IOFactory::createReader('Excel5'); $objPHPExcel = $objReader->load($filename, $encode = 'utf-8'); } $excel_array1 = $objPHPExcel->getsheet(0)->toArray(); //转换为数组格式 $tab.=' '; $hang=count($excel_array1); $h=''; $l=''; foreach($excel_array1 as $k => $v) { $tab .= ' '; foreach ($v as $ke => $vo) { if ($excel_array1[$k+1<$hang?$k+1:$hang-1][$ke] == null && $excel_array1[$k][$ke] != null) { $vaa=$excel_array1; for($i=$k;$i>=-1;$i--){ unset($vaa[$i]); } foreach ($vaa as $kk=>$vv){ if($vv[$ke]==null){ $l++; }elseif($vv[$ke]!=null){ break; } } } if(!empty($l)){ $tab .= ' ' . $vo . ' '; $l=''; }elseif($v[$ke] == null){ }else{ $tab .= ' ' . $vo . ' '; } } $tab .= ' '; } $tab.=' '; foreach ($aa as $k=>$v){ $tab.=' '.$v.' '; } $tab.=' '; $tab.=' '; return json(array('code'=>0,'data'=>$tab)); }