PWNHUB公开赛 easy_think wp

题目源码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
namespace app\index\controller;

use app\index\model;
use think\Container;

class Index
{
public function index(){
highlight_file(__FILE__);
$model = new model\Index();

$id = @$_GET['id'];

$model->where(["id"=>$id])->select();
}
}

复现

环境:Ubuntu20.04

下载Tp5.1.37

安装php composer。composer是php的一个依赖管理工具,安装后一个命令即可下载tp。composer下载地址:

https://getcomposer.org/download/

直接输入下面的命令即可完成安装:

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

安装后会在当前目录出现一个composer.phar文件,接着:

mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer 
composer -V

出现版本信息即说明安装成功了

接着换composer下载源:

composer config -g repo.packagist composer https://packagist.phpcomposer.com

在github上找到该版本之后的v5.1.38 commit记录:

https://github.com/top-think/think/commit/51c736597ca8979bc5cd5d5ff49f9c03155494ac

下载V5.1.37LTS源码,下载解压之后修改composer.json文件,将里面的5.1.*修改为5.1.37,然后命令行执行:

composer install

然后修改日志文件目录权限:

sudo chmod 777 -R runtime

本地创建数据库

在本地mysql创建index数据库和flag

接着创建index表(tp查询时不指定表的话会默认连接index表):

tp5连接数据库的三种方式

Tp有三种连接数据库的方式

1.配置文件定义

进行数据库配置,位置:config/database.php

使用Db类来进行连接(该类位于thinkphp/library/think/Db.php),编写index控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
namespace app\index\controller;

use think\Db;

class Index
{
public function index()
{
return 'hello world';
}

public function data(){
$Db = new Db();
$data = $Db::table("test")->select();
//$data = $Db::query("select * from test");
dump($data);
}
}

查询数据可以用tp方法,也可以使用sql语句

2.connect方法配置

直接在代码中进行数据库连接配置

使用数组配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
namespace app\index\controller;

use think\Db;

class Index
{
public function index()
{
return 'hello world';
}

public function data1(){
$Db=Db::connect([
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'index',
// 用户名
'username' => 'root',
// 密码
'password' => 'password',
// 端口
'hostport' => '3306',
]);
$data = $Db->table('test')->select();
dump($data);
}
}

使用字符串配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
namespace app\index\controller;

use think\Db;

class Index
{
public function index()
{
return 'hello world';
}

public function data1(){
$Db = Db::connect("mysql://root:password@127.0.0.1:3306/index#utf8");
$data = $Db->table('test')->select();
dump($data);

}

}

3.模型类定义

可以直接在命令行(tp根目录)创建模型类:

php think make:model User

创建完后会在application目录下生成一个common/model目录,将其复制到application/index/目录下,

编辑User模型类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
namespace app\index\model;

use think\Model;

class User extends Model
{
protected $connection = [
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'index',
// 用户名
'username' => 'root',
// 密码
'password' => 'password',
// 端口
'hostport' => '3306',
];
}

编辑控制器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
namespace app\index\controller;

class Index
{
public function index()
{
return 'hello world';
}

public function data1(){
$user = new \app\index\model\User();
$data = $user->table('test')->select();
dump($data);
}

}

完成环境搭建

创建Index模型:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php

namespace app\index\model;

use think\Model;

class Index extends Model
{
protected $connection = [
'type' => 'mysql',
// 服务器地址
'hostname' => '127.0.0.1',
// 数据库名
'database' => 'index',
// 用户名
'username' => 'root',
// 密码
'password' => 'password'