SQLiLabs靶场是靶场个老古董了,但它的搭建价值到现在也没过时。我见过太多人直接拿Docker拉镜像,靶场结果连不上数据库就放弃。搭建其实手动搭建一次,靶场你对SQL注入的搭建理解会比刷一百道题都深。
先把环境准备好。靶场Windows和Linux都行,搭建我用的靶场是Ubuntu 22.04。要装Apache、搭建MySQL和PHP,靶场版本别太新——PHP 7.4以下最舒服。搭建这里有个坑:新版MySQL默认认证插件是靶场caching_sha2_password,PHP老版本根本不认。搭建你需要在my.cnf里加上default_authentication_plugin=mysql_native_password,靶场不然连数据库这关就卡死。
下载源码。GitHub上搜“sqlilabs”,直接clone或者下zip包都行。解压到Web根目录,比如/var/www/html/sqlilabs。接下来是最关键的一步——改配置文件。打开sql-connections/db-creds.inc,把数据库用户名密码改成你自己的。这里有个细节很多人忽略:如果MySQL跑在非标准端口,记得把$db_port也改了,不然报错的时候你会怀疑人生。
然后初始化数据库。浏览器访问http://127.0.0.1/sqlilabs/setup_db.php,页面会显示一堆SQL执行结果。别急着关页面,仔细看一眼有没有红色报错。我遇到过最典型的问题是Access denied for user——这说明你的MySQL用户权限不够,去命令行执行GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'就能解决。
这时候你打开主页面,应该能看到分好了的Less 1到Less 65。每个Less对应一种注入场景,从最简单的数字型到二次注入、堆叠注入全都有。我第一次搭建完,随手点开Less 1,看到那个熟悉的?id=1参数,心里踏实得很——这是真正的练功房,不是那种模拟器能比的。
有个小技巧:靶场里有些Less需要调整PHP配置才能正常显示错误信息。去/etc/php/7.4/apache2/php.ini把display_errors改成On,error_reporting改成E_ALL。不然报错全被吞了,你根本看不到注入点的回显。
搭建过程中最烦人的是端口冲突。Apache默认80端口,如果你之前装过Nginx或者别的服务,得先停掉。用sudo netstat -tlnp | grep :80查一下谁占着端口,直接kill掉PID就行。别怕,这不会弄坏系统,顶多让你多装几次依赖。
最后测试一下。访问http://127.0.0.1/sqlilabs/Less-1/?id=1,页面应该显示你的登录名和密码。尝试输入?id=1',如果页面报错或者显示逻辑异常,说明靶场已经正常工作了。这时候你再配合Burp Suite或者手工注入,就能实实在在感受到每种注入类型的差异。
折腾完这一套,你对Web服务器、数据库、PHP三者怎么协作会有一个立体认知。这比任何教学视频都有用——毕竟自己踩过的坑,印象最深。
