这次找了个发卡平台,url: https://files.cnblogs.com/files/b1gstar/kamiphp.zip
从52破解上下载的 :
先把网站搭建起来。
网站没有采用mvc框架。
首页的getkm.php ,放眼望去就是个sql注入。
if(!empty($_POST['tqm'])){ $tqm = $_POST['tqm']; $sql = "select * from ayangw_km where out_trade_no ='{$tqm}' or trade_no = '{$tqm}' or rel = '{$tqm}' ORDER BY endTime desc limit 1"; $res = $DB->query($sql); echo $res;
看了下包含的通用文件,其中有:
if(is_file(SYSTEM_ROOT.'360safe/360webscan.php')){//360网站卫士 require_once(SYSTEM_ROOT.'360safe/360webscan.php'); }
作者原意是采用360webscan来防护,我下载的包中没有。
即使定义了通用的转义函数,但是此处也没有引用。
function daddslashes($string, $force = 0, $strip = FALSE) { !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); if(!MAGIC_QUOTES_GPC || $force) { if(is_array($string)) { foreach($string as $key => $val) { $string[$key] = daddslashes($val, $force, $strip); } } else { $string = addslashes($strip ? stripslashes($string) : $string); } } return $string; }
继续往下读,根目录的ajax.php,又是一个很low的sql注入:
if(empty($_GET['act'])){ exit("非法访问!"); }else{ $act=$_GET['act']; } switch ($act){ //异步获取商品 case 'selgo': $select = "<option>请选择商品</option>"; $tpID = $_POST['tyid']; $sql = "select * from ayangw_goods where state =1 and tpId = ".$tpID; $res = $DB->query($sql); $i=1;
至此,我就不在关注sql注入漏洞了。
前台主要功能就是购买商品了。这里用的是一个叫彩虹易支付接口,有签名校验,也有判断前台是否修改价格的代码,由于支付平台需要花钱注册和认证商户,我就跳过去了。
我们来看后台:
发现可以直接伪造cookie登录。后台index.php:
<script type="text/javascript"> if($.cookie("user") == null || $.cookie("user") == "" || $.cookie("loginInfo") != $.md5($.cookie("pass"))){ window.location.href='./login.php'; }else{ if (typeof c == 'undefined') window.close(); }
通过postman伪造:
后台文件文件都包含了head.php head又包含了common.php,这个common又包含了member.php,其中有:
if(isset($_COOKIE["admin_token"])) { $token=authcode(daddslashes($_COOKIE['admin_token']), 'DECODE', SYS_KEY); list($user, $sid) = explode(" ", $token); $session=md5($conf['admin'].$conf['pwd'].$password_hash); if($session==$sid) { $islogin=1; } }
但是这里只是用来验证cookie中token是否正确,并没有验证登录。
看了下后台几个php文件,都是sql的增减删改功能,通篇注入。ajax.php直接调用即可。
审计结束。就算是了解一下发卡平台吧。。。。。。。。。。。