审计环境
环境搭建卡了挺久的,这里记录一下。
多版本的php
如果是Ubuntu,参考以下代码
1
2
3
4
5
6sudo add-apt-repository ppa:ondrej/php //添加仓库源
sudo apt-get update //更新源
sudo apt-get install php5.6 //安装其他版本php
sudo apt-get install php5.6-xdebug //安装必须的插件
sudo apt-get install php5.6-mysql
...如果是kali,参考一下代码
1
2
3sudo apt -y install lsb-release apt-transport-https ca-certificates
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ buster main" | sudo tee /etc/apt/sources.list.d/php.listcomposer
1
2
3
4
5
6php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
mv composer.phar /usr/local/bin/composer
//记得加环境变量
//换源
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/安装tp5源码
这里以thinkphp v5.0.15为例
1
2
3
4
5
6
7
8cd /var/www/
composer create-project --prefer-dist topthink/think=5.0.15 tp5015
cd tp5015
vim composer.json //将"topthink/framework":"5.0.*" >>"topthink/framework":"5.0.15"
composer update //可能会报php插件缺失,缺啥装啥。
composer create-project topthink/framework=5.0.15 thinkphp //这个"thinkphp"名字不能改,可能会报依赖错误,按照提示修改thinkphp/composer.json
cd thinkphp
composer update至此源码全部下载下来了。
Apache
首先选择合适的php版本(>5.4),我这里因为依赖问题所以选择7.0
1
2
3a2dismod php5.6 //关闭php5.6
a2enmod php7.0 //开启php7.0
systemctl restart apache2 //重启生效创建虚拟目录
/etc/apache2/sites-available/000-default.conf
增加监听端口
/etc/apache2/ports.conf
创建日志目录(没有会导致apache服务重启失败)
1
2mkdir /var/log/apache2/tp5015
systemctl restart apache2大致的环境就是这样搭建的。遇到特殊情况就举一反三吧 - -!
在进行漏洞分析前我们先来了解下tp的路由有两种模式
1
2
3http://serverName/index.php/模块/控制器/操作/[参数名/参数值...]
如果不支持PATHINFO的服务器可以使用兼容模式访问如下:
http://serverName/index.php?s=/模块/控制器/操作/[参数名/参数值...]
SQL注入1
漏洞分析
漏洞存在于 Builder 类的 parseData 方法中。由于程序没有对数据进行很好的过滤,将数据拼接进 SQL 语句,导致 SQL注入漏洞 的产生。漏洞影响版本: 5.0.13<=ThinkPHP<=5.0.15 、 5.1.0<=ThinkPHP<=5.1.5 。
将 application/index/controller/Index.php 文件代码设置如下:
1
2
3
4
5
6
7
8
9
10
11
12
namespace app\index\controller;
class Index
{
public function index()
{
$username = request()->get('username/a');
db('users')->insert(['username' => $username]);
return 'Update success';
}
}在 application/database.php 文件中配置数据库相关信息,并开启 application/config.php 中的 app_debug 和 app_trace 。创建数据库信息如下:
1
2
3
4
5
6create database tp5015demo;
use tp5015demo;
create table users(
trueid int primary key auto_increment,
trueusername varchar(50) not null
);
- 漏洞利用