游客发表
装SQL注入靶场这事,入靶我拖了快两周才动手。场搭不是入靶懒,是场搭之前用Docker拉sqli-labs镜像时踩过坑——容器起来了,页面死活打不开,入靶日志里全是场搭PHP连接MySQL失败的报错。后来才发现是入靶docker-compose.yml里MySQL的版本标签写成了latest,拉下来的场搭是MySQL 8,而sqli-labs的入靶代码里用的还是mysql_connect()这种老函数,认证方式对不上,场搭直接连不上。入靶
所以这次我换了个路子,场搭直接在CSDN上翻教程,入靶找那种手把手带截图的场搭。翻了大概七八篇,入靶发现大部分文章的问题在于:要么只贴命令不解释为什么,要么环境是Windows+phpStudy,跟我用的Linux服务器对不上。最后综合了几篇,自己拼了一套能跑通的流程。
我用的是一台腾讯云轻量服务器,Ubuntu 22.04,2核2G。先装Apache和PHP:
sudo apt install apache2 php libapache2-mod-php php-mysql php-mbstring php-xml -y 这里有个细节:php-mysql这个包必须装,不然PHP连不上数据库。很多人只装php,后面页面白屏就是缺这个扩展。
MySQL我选了5.7版本,没装8.0。原因前面说了,sqli-labs的代码兼容性只到5.x。Ubuntu 22.04默认源里没有5.7,得先加MySQL的APT源:
wget https://dev.mysql.com/get/mysql-apt-config_0.8.24-1_all.deb sudo dpkg -i mysql-apt-config_0.8.24-1_all.deb 弹窗里选MySQL 5.7,然后sudo apt update && sudo apt install mysql-server。装完后mysql_secure_installation跑一遍,root密码设成root——靶场环境,不讲究。
GitHub上直接clone:
cd /var/www/html sudo git clone https://github.com/Audi-1/sqli-labs.git 如果服务器上没git,先apt install git。clone下来之后,目录结构是这样的:sqli-labs/Less-1/到Less-65/,每个Less对应一种注入场景。
接下来改数据库配置。文件在sqli-labs/sql-connections/db-creds.inc,把里面的用户名密码改成你MySQL的:
$dbuser = 'root'; $dbpass = 'root'; 然后浏览器访问http://你的IP/sqli-labs/,点“Setup/reset Database for labs”,它会自动创建security数据库和几张表。这一步如果报错,多半是MySQL用户权限问题——5.7的root默认只能localhost登录,而PHP可能通过127.0.0.1连,需要在MySQL里执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'root'; FLUSH PRIVILEGES; 装完第一关能打开,但输入?id=1之后页面返回空白。查了Apache错误日志,发现是PHP 8.1的兼容性问题——sqli-labs代码里用了mysql_*函数,PHP 7.0之后已经移除了。解决办法有两个:降PHP版本到5.6,或者装mysqli兼容层。我选了前者,因为降版本最省事:
sudo add-apt-repository ppa:ondrej/php sudo apt install php5.6 libapache2-mod-php5.6 php5.6-mysql 然后a2dismod php8.1 && a2enmod php5.6 && service apache2 restart。再刷新页面,正常了。
另一个坑是Less-1的?id=1'报错信息不显示。这是因为PHP的display_errors默认关闭。改/etc/php/5.6/apache2/php.ini,把display_errors = Off改成On,重启Apache。这样注入时的SQL报错才会回显到页面上,不然你只能盲注。
访问http://你的IP/sqli-labs/Less-1/?id=1',如果页面返回类似:
You have an error in your SQL syntax; check the manual... near ''1'' LIMIT 0,1' at line 1 说明注入点存在,靶场搭建成功。接下来就可以按Less的顺序一个个练了。我个人建议从Less-1到Less-10先过一遍,这十个覆盖了联合注入、报错注入、布尔盲注和时间盲注,基础打牢了再往后做堆叠和宽字节。
整个搭建过程大概四十分钟,其中一半时间花在解决PHP和MySQL版本兼容上。如果你用Docker,其实有现成的acgpiano/sqli-labs镜像,但那个镜像里的PHP是7.0,跟MySQL 8搭配也有坑。自己手动装虽然麻烦点,但每一步都能控制,出了问题知道去哪查。
友情链接