Web安全攻防 渗透测试实战指南   学习笔记 (五)

 

第四章 Web安全原理解析  (一)

(一)SQL注入的原理

  1.web应用程序对用户输入数据的合法性没有判断。

  2.参数用户可控:前端传给后端的参数内容是用户可以控制的。

  3.参数带入数据库查询:传入的参数拼接到SQL语句,且带入数据库查询。

  举个栗子:

   select * from users where id= and =

  当1=1为真,且where语句中id也为真,页面会返回与id=1相同的结果。

  当传入的id参数为and 1=2时,由于1=2为假,所以页面就会返回与id=1不同的结果。

  (这样就说明,你构造的sql语句是被执行了,由此可以初步判断id参数存在sql注入漏洞~)
  

(二)Mysql注入

1.MySQL介绍

  Mysql5.0版本以后,mysql默认在数据库中存放一个“information_schema”的数据库。
  在该库中,读者需要记住三个表名,分别是SCHEMATA、TABLES、COLUMNS。

  SCHEMATA表存储该用户创建的所有数据库的库名,该表中记录数据库库名的字段名为SCHEMA_NAME。

  TABLES表存储该用户创建的所有数据库的库名和表名,该表中记录数据库库名和表名的字段名分别为TABLE_SCHEMA和TABLE_NAME。

  COLUMNS表存储该用户创建的所有数据库的库名、表名和字段名,该表中记录数据库库名、表名和字段名的字段名为TABLE_SCHEMA、TABLE_NAME和COLUMN_NAME。

2.Mysql小知识点

  database() : 当前网站使用的数据库
  version():当前mysql的版本
  user():当前mysql的用户

3.MySQL查询语句

  (1)在不知道任何条件下,你可以试试:

  select 要查询的字段名  from  库名.表名

  (2)知道一条已知条件时,你可以试试:

  select 要查询的字段名  from  库名.表名 where 已知条件的字段名=‘已知条件的值’

  (多条已知条件的话,使用 and 连接~)

4.limit用法

  limit子句可以被用于强制 SELECT 语句返回指定的记录数。limit 接受一个或两个数字参数。参数必须是一个整数常量。

  如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1): 为了与 PostgreSQL 兼容,MySQL 也支持句法: limit # OFFSET #。

  举几个例子~

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15   
//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last. //如果只给定一个参数,它表示返回最大的记录行数目:
mysql> SELECT * FROM table LIMIT 5; //检索前 5 个记录行 //换句话说,LIMIT n 等价于 LIMIT 0,n。

  

5.注释符
 
  常见注释符表示方法有  #、空格、/**/
 
  内联注释:
  /*!code*/
  举例: index.php?id=-/*!union*//*!select*/,, 
 
  注:
     必须记住一个库 information_schema
      必须记住三个表 schemata、tables、columns
      schemata表中存储该用户创建的数据库的库名
      tables表中存储该用户创建的库名和表名
      columns表中存储该用户创建的表名和字段名
 
 
 
(三)Union注入攻击
 
由于本书的配套连接已经失效~
等笔者找到合适的环境再来补充实验部分。
 
1.判断方法
 
可以通过添加单引号再次访问
页面返回结果与之前不同
 
访问id=1 and 1=1   
由于and 1=1为真,所以页面返回与id=1相同,
访问id=1 and 1=2
由于and 1=2为假,所以页面返回与id=1不同。
因此有可能出现sql注入漏洞。
 
接着
使用order by 1-99 语句查询该数据表的字段数量,即可以理解为order by=1-99
若访问id=1 order by 3,页面返回和id=1相同的结果,访问id=1 order by 4,页面返回和id=1不同的结果,则字段数为3.
 
在数据库中查询参数id对应的内容,然后将数据库的内容输出到页面。
这时可以使用union注入,并且通过order by查询结果:
union select 1,2,3
 
若只看到页面执行成功,但没有返回union select 的结果,因此获取的结果没有输出到页面
 
我们可以通过设置参数id值,让服务器返回union select的结果
例如:把id的值设置为-1,因为数据库没有id=-1的数据,所以会返回union select的结果。
(这一步没有很懂,大佬们多指教)
 
 
当设置id=-1,页面返回结果,2:3时,意味union select 1,2,3中,2和3的位置可以输入mysql语句,则可以尝试在2的位置查询当前数据库名(使用 database()  函数),
访问  id= union select ,database(), 
页面返回数据库信息
 
得知数据库库名后,查询表名
使用下面语句:
 select table_name from information_schema.tables where table_schema='库名' limit ,; 
 
尝试在 id=1 union select 1,2,3中的2处粘贴上述语句
 

id=-+union select ,select table_name from information_schema.tables where table_schema='库名' limit , ,
 
执行,得到表名
 
这里查询表名
命令:
select column_name from information_schema.columns  where table_schema='库名' and table_name='表名'  limit ,;
获取该表的第一个字段名,使用 limit 1,1,获取该表的第二个字段名
 
 
2.union注入代码分析
 
 

当访问id=1 union select 1,2,3时,执行的sql语句为:

select * from users where id= union select ,,

因此,即可获取数据库中的数据~

 
 
 
 

参考资料:

《Web安全攻防 渗透测试实战指南》

 

 

《Web安全攻防 渗透测试实战指南 》 学习笔记 (五)的更多相关文章

  1. 《CSS网站布局实录》学习笔记(一)

    今天开始,认真学习前端技术,哈哈哈~~~加油~~~ 推荐这本<CSS网站布局实录>(第2版)给初级入门选手,虽然这本书年代有点久远,不过很经典. 注明一下:这里讲述的CSS均为CSS 2. ...

  2. 《CSS网站布局实录》学习笔记(六)

    第六章 CSS高级应用与技巧 6.1 id与class 6.1.1 什么是id id是XHTML元素的一个属性,用于标识对象名称.无论是class还是id,都是XHTML所支持的公共属性,并且也是其核 ...

  3. 《CSS网站布局实录》学习笔记(四)

    第四章 CSS网站元素设计 4.1 网站导航 网站导航是网站中最重要的元素.从形式上看,网站导航主要分横向导航.纵向导航.下拉及多级菜单导航灯3种常见形式. 横向导航:作为门户网站的设计而言,主导航一 ...

  4. 《CSS网站布局实录》学习笔记(三)

    第三章 CSS网页布局与定位 3.1 div 几乎XHTML中的任何标签都可以用于浮动与定位,而div首当其冲.对于其他标签而言,往往有它自身存在的目的,而div元素存在的目的就是为了浮动与定位. 3 ...

  5. 《CSS网站布局实录》读书笔记

    从Web标准.HTML标记.CSS语法基础介绍到实用技巧,事无巨细.实体书已不印刷,只能下载电子版 书的背景: 国内第一本web标准的CSS布局书,2006年9月第一版,作者李超. 环境背景: 当时主 ...

  6. 《css网站布局实录》(李超)——读书札记

    1.web表现层技术 2.HTML链接设计思想 3.对信息进行合理的分析.分类与处理来创造商业价值. 4.头部描述浏览器所需信息,主体包含所需要展现的具体内容. 5.HTML(XHTML)XML 6. ...

  7. 《CSS网站布局实录》学习笔记(五)

    第五章 CSS内容排版 5.1 文字排版 5.1.1 通栏排版 进行网页通栏排版时,只要直接将段落文字放置于p或者其他对象中,再对段落文字应用间距.行距.字号等样式控制,便形成了排版雏形. 5.1.2 ...

  8. 《CSS网站布局实录》学习笔记(二)

    第二章 XHTML与CSS基础 2.1 XHTML基础 XHTML是网页代码的核心内容,标准XHTML代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD ...

  9. (转)Qt Model/View 学习笔记 (五)——View 类

    Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...

  10. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

随机推荐

  1. setCascadeOpacityEnabled

    setCascadeOpacityEnabled Enable or disable cascade opacity, if cascade enabled, child nodes' opacity ...

  2. Python入门2 —— 变量

    一:问号三连 1.什么是变量? 变 指的是事物的状态是可以发生变化的 量 指的是记录事物的状态 2.为什么要有变量? 为了让计算机像人一样去记录事物的状态 3.怎么用变量? 先定义 后引用 二:变量的 ...

  3. IMM设置静态ip,安装系统

    IMM设置静态ip,安装系统 设置ip: System Setting->Integrated Management Module->Network configuration 修改后选择 ...

  4. 题解【UVA12097】Pie

    题目描述 输入格式 输出格式 输入输出样例 输入样例#1 3 3 3 4 3 3 1 24 5 10 5 1 4 2 3 4 5 6 5 4 2 输出样例#1 25.1327 3.1416 50.26 ...

  5. 网络、芯片、专利、产业链……影响5G手机走势的因素有哪些?

    近段时间,备受关注的5G手机迎来一个爆发的小高潮.中国质量认证中心官网显示8款5G手机获得3C认证.其中华为有4款 ,一加.中兴.OPPO和vivo各有一款5G手机获得3C认证.随后在7月23日,中兴 ...

  6. Linux 中查看可用的网络接口

    目录 Linux 中查看可用的网络接口 在 Linux 中找到可用的网络接口 title: Linux 中查看可用的网络接口 date: 2020/2/25 16:56:36 toc: true -- ...

  7. 程序员必需知道的Chrome使用技巧(入门篇)

    浏览器版本 Chrome Canary 新增一些没有经过Google工程师的测试或使用的浏览器功能版本.Chrome Dev让大多数开发人员主要使用此版本来测试对浏览器的重大版本功能版本.Chrome ...

  8. 设置DataGridView的单元格颜色

    RowPrePaint事件: private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArg ...

  9. opencv:图像边缘发现

    拉普拉斯算子 Mat dst; // ksize 3 ,必须是奇数,不同大小会有不同的效果 Laplacian(src, dst, -1, 3, 1.0, 0, BORDER_DEFAULT); im ...

  10. CTF_论剑场 名侦探柯南

    首先看一下是一个压缩包然后下载 解压后会发现一个图片和另一个压缩包 打开图片 发现是这个 用HxD分析一下这张图片通过搜索 zip jpg...... 然后会发现这张图片里有一个png 图片 所以判断 ...