sql注入学习sqli-lab lesson1

之前稍微接触了一下sqli-lab,但是没有继续学下去,最近刷了些web题,发现sqli-lab用来学习数据库和php语言挺有用的。

将sqlilab搭在了phpstudy上后(文件解压到phpstudy下的WWW,然后添加站点,之后改host),开始第一课。

sql注入学习sqli-lab lesson1_第1张图片

先根据提示,在url后面加上?id=1(其中问号起到传递参数的作用)。

sql注入学习sqli-lab lesson1_第2张图片

可以看到返回了两个值,通过改变id的值,可以的得到不同的login name和password。

之后在id=1后加上’,发现报错了

sql注入学习sqli-lab lesson1_第3张图片

但我觉得这个报错很不直观,然后我又添加了“

sql注入学习sqli-lab lesson1_第4张图片

后面两个单引号之间的便是出错的数据,很直观地看出在传入的id值后面是 ' LIMIT 0,1

大致能推断出我们传入的值附近语句是 "'$id' LIMIT 0,1",大致推断出后就能运用mysql数据库语句进行注入了。

比如?id=1’order by 3 --+和order by 4 --+能了解到传入了三个字段(--+是注释,也可以用%23替代)。

sql注入学习sqli-lab lesson1_第5张图片sql注入学习sqli-lab lesson1_第6张图片

之后用id=-1' union select 1,2,3 --+(UNION 操作符用于合并两个或多个 SELECT 语句的结果集。如果id=-1,因为不存在所以返回空,那么就只会显示我们构建的select语句了)判断出显示位为 2,3。

sql注入学习sqli-lab lesson1_第7张图片

之后还是用union select 配合version()得到mysql版本,database()得到数据库名字,如果想要遍历出所有表名或者列名,可以使用?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+ 或者1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+  。group_concat可以将数组中的字符连在一起用逗号隔开输出,去掉这个函数只会显示数组内的第一个参数。(不知道为什么较长的内容不能写在2的位置,会报出’3 --‘出错,可能是因为2的位置输入了逗号?)

sql注入学习sqli-lab lesson1_第8张图片sql注入学习sqli-lab lesson1_第9张图片

还可以用group_concat('username',';','password') from security.users爆出所有用户名和密码字段。

sql注入学习sqli-lab lesson1_第10张图片

数据库命令参考了https://mochazz.github.io/2017/09/12/EBsql/

以下为不相关的胡思乱想:

在我的理解里,sql注入就是通过传入的参数,绕过各种限制拿到自己想要的东西。一开始不了解php语言在mysql中的应用时,我试图在传入的值中添加分号(;),试图直接结束当前语句,从而随意添加php语句,达到修改页面的目的。。。然后查看php源代码并询问了同学后,才明白传入的值只是字符串,并不会影响php代码文件。


sql作为字符串,放进了mysql_query进行查询,这个函数的作用大概与直接在mysql命令行中输入$sql一致(),但加上一句echo $result 显示的是Resource id #8(多次改变id值,都是返回Resource id #8,但mysql_fetch_array读取$result后得到的name和password都是正常的),看百度说返回的是资源标识符,还有说是存在缓存中?

sql注入学习sqli-lab lesson1_第11张图片

通过这几个函数,大概知道了sql注入只是查询数据库里所需要的信息。




你可能感兴趣的:(sql注入学习sqli-lab lesson1)