先占个天坑,前几天做到一个sql注入实验室,但是年久失修,破败不堪,所以我想把它修一修,正好自己也可以复习一下sql注入的一些姿势。。

言归正传,这里是sql注入改良版地址需要的萌新and大佬可以来fork呦,本教程部分来自于于 LL的从零开始的sql注入

0x01 安装环境

首先要做的肯定是搭建我们的测试环境,总不能一上来就去找真实的网站一通乱注吧,这样总归是不好的。而且现实中在注入的过程中会出现各种意外情况,为了应付这些意外情况不得不去学习另外的一大堆知识,所以我们还是选择自己搭建 SQL 注入环境。

这里推荐使用 LNMP,就是linux+nginx+mysql+php(ps:原来我是apache党的,我的wamp一直十分稳定,结果上学期有一天蜜汁报错,原本支持ci的居然不支持重写了,所以果断转nginx。。。我承认我比较懒2333,推荐一个lnmp集成包),一键安装,比较方便,毕竟我们研究的是 SQL 注入而不是环境配置。

把上面的sql注入环境下载下来

接下来我们把这东西丢到网站根目录(XAMPP 的网站默认根目录在 XAMPP 安装目录下的 htdocs 文件夹)去,然后访问下,主要是为了安装数据库。

当你看到黑底黄字很炫酷的刷评论之后,就安装成功啦!

测试一下:访问下 Less-1, 看看能否打开:http://127.0.0.1/sqli-labs/Less-1/?id=1,URL 可能要根据你自己的路径修改.

0x02 何为 SQL 注入?

说了这么多热闹的东西,又是搭环境又是下东西的。到底什么才是 SQL 注入呢?如果你去 google 搜索的话,一定会看到一大堆很官方的东西,看着很厉害的样子,但是看了半天也看不懂。啥?如果你看懂了。那应该不用看这个教程了。

我们就用 PHP 来举例吧,为啥是 PHP 呢?因为 PHP 是世界上最好的语言!假如让你写一个简单的新闻站,你会怎么做呢?用户肯定可以查看某条新闻吧,用户告诉你说:“hi~ 我想看第 59 条新闻!”,服务器(或者你)就会从数据库中取出第 95 条新闻回复给浏览器,浏览器再显示给用户。看似很简单,也确实很简单,用编程语言来描述大概是下面这个样子。

用户访问:http://news.lightless.me/show.php?id=59 (“hi~ 我想看第 59 条新闻”) 这个show.php就会从数据库中取出第 59 条新闻返回给用户。其中的处理语句可能是这样的:

$id = $_GET['id'];  // 此时$id为59于是下面的SQL语句就变成了:
SELECT * FROM news WHERE news_id = 59

一切看起来都挺正常的,但是我们知道,现实中除了男人和女人还有第三种人,那就是熊孩子!此时有个熊孩子说:“我要看第 60 条新闻并且删除数据库”。于是你的程序就按照接收到的数据去执行了。可能处理语句就变成了:

$id = $_GET['id'];  // 此时$id为60 and drop db_news
SELECT * FROM news WHERE news_id = 60 and drop db_news

于是你的程序高兴的执行了这个语句,因为他分不清哪里是指令哪里是数据!本来应该60 and drop db_news都应该当做数据的一部分而不是指令被执行,但是你的程序却自作聪明的将and后面的内容当做指令执行了,这样一来你的数据库就 GG 了。

看了上面的例子,你应该大概明白什么叫做 SQL 注入了吧。如果你想看更官方的解释,可以自行 google 一下看看,相信你会看懂一部分的。

0x03 最后啰嗦两句

这个教程所有的测试都是基于 PHP+MySQL 的,现实中可能会有更多的情况,不,是一定会有更多的情况,比如 mssql,oracle 等等,如果有机会以后再讲。