从零到一的ctfer

取自NU1L战队的《从零到一的ctfer成长之路》

web安全的相关概念

1.POC

POC,Proof ofConcept,中文意思是“观点证明”。这个短语会在漏洞报告中使用,漏洞报告中的POC则是一段说明或者一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。
2.EXP

EXP,Exploit,中文意思是“漏洞利用”。意思是一段对漏洞如何利用的详细说明或者一个演示的漏洞攻击代码,可以使得读者完全了解漏洞的机理以及利用的方法。
3.VUL

VUL,Vulnerability的缩写,泛指漏洞

4.payload(有效攻击负载)是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代码

5.shellcode(可提权代码) 对于一个漏洞来说,ShellCode就是一个用于某个漏洞的二进制代码框架,有了这个框架你可以在这个ShellCode中包含你需要的Payload来做一些事情

6.CVE漏洞编号

CVE 的英文全称是“Common Vulnerabilities & Exposures”公共漏洞和暴露,例如CVE-2015-0057、CVE-1999-0001等等。CVE就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。如果在一个漏洞报告中指明的一个漏洞,如果有CVE名称,你就可以快速地在任何其它CVE兼容的数据库中找到相应修补的信息,解决安全问题。

可以在https://cve.mitre.org/网站根据漏洞的CVE编号搜索该漏洞的介绍。

也可以在中文社区http://www.scap.org.cn/上搜索关于漏洞的介绍

5.0DAY漏洞和0DAY攻击

在计算机领域中,零日漏洞或零时差漏洞(英语:Zero-dayexploit)通常是指还没有补丁的安全漏洞,而零日攻击或零时差攻击(英语:Zero-dayattack)则是指利用这种漏洞进行的攻击。提供该漏洞细节或者利用程序的人通常是该漏洞的发现者。零日漏洞的利用程序对网络安全具有巨大威胁,因此零日漏洞不但是黑客的最爱,掌握多少零日漏洞也成为评价黑客技术水平的一个重要参数。
零日漏洞及其利用代码不仅对犯罪黑客而言,具有极高的利用价值,一些国家间谍和网军部队,例如美国国家安全局和美国网战司令部也非常重视这些信息[1]。据路透社报告称美国政府是零日漏洞黑市的最大买家

信息收集

[ 信息收集之CMS指纹识别 ]

1. 指纹识别

1.1了解CMS指纹识别

CMS:快速搭建网站的内容管理系统

Web应用框架:快速二次开发的Web应用框架,例如网站,小程序

1.2 指纹的特性

  • 唯一性
  • 终身不变性
  • 方便性

1.3 指纹识别的方式

2. WAF

专针对Web应用攻击的防护产品

Awesome-WAF项目 :

https://github.com/0xInfection/Awesome-WAF

检测脚本wafw00f :

https://github.com/EnableSecurity/wafw00f

kali下安装wafw00f
    git clone https://github.com/EnableSecurity/wafw00f
    cd wafw00f
    python setup.py install
    

3. CDN

CDN: 内容分发网络

基本思路是 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快,更稳定

改善网络加载时间,减少服务器负载,降低成本,提高网络安全行

CDN检测

kali下安装xcdn
     git clone https://github.com/3xp10it/xcdn

4.常见的寻找真实IP的方法:

5. CDN漏洞案例:

都是通过寻找对方未绑定CDN站点进行突破,从而找到真实站点。

补充

在线知识

在线工具

公开漏洞

漏洞数据库

googlehack语法

intext:关键字
搜索网页正文中含有这些关键字的网页。

intitle:关键字
搜索网页标题中含有这些关键字的网页。

cache:关键字
搜索含有关键字内容的cache。

define:关键字
搜索关键字的定义。

filetype:文件名.后缀名
搜索特定的文件。

info:关键字
搜索指定站点的一些基本信息。

inurl:关键字
搜索含有关键字的URL地址。

(示例:"inurl:php?id=" 意为 搜索网站url中包括了"php?id="关键字的网站,寻找可能含有sql注入的网页)

(注:"inurl:"后不能接空格,应直接接关键词)

(inurl在搜索资源的功能上十分的强大,目前filetype:用法google无法使用)

(示例:"inurl:"say something" mp3" 可搜索到say something的mp3文件)

例:inurl:.edu.cn

link:关键字
查找与关键字做了链接的URL地址。

site:域名
返回域名中所有的URL地址。

related:URL
搜索与指定URL相关的页面。

目录扫描脚本dirsearch

python dirsearch.py -u 网址 -e php

-u 指定网址

-e 指定网站语言

-w 指定字典

-r 递归目录(跑出目录后,继续跑目录下面的目录)

注意扫描/.index.php.swp, index.php~ 等备份文件

扫描的记录会生成到文件中

根据需要扩充字典,

注意以下文件

www.zip 网站备份源码

readme.md

robots.txt

.swp

.swo

.swn

子域名爆破工具layer

指纹识别

wappalyzer,火狐插件

git 泄露

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           githack 注意要在python2下环境运行
p GitHacker.py http://XXXXXXXXXXX/.git/

sql注入基础

mysql

sql的注释

使用#

  • 有时发现执行的sql语句中没有#
  • 原因是url中#号是用来指导浏览器动作的(例如锚点),对服务器端完全无用。
    所以,HTTP请求中不包括#
  • 将#号改成url的编码%23就可以了

使用--和使用--+

  • 这里发现+号在语句中变成了空格。
    用来和后面的单引号分隔开,将后面的语句注释。
  • 了解原理后便知道了--无法使用的原因,是因为--与后面的单引号连接在一起,无法形成有效的mysql语句。
  • 在mysql中使用这个语句分析原因,输入后回车显示分号没有闭合
  • 所以在注入时我们除了使用--+外,也可以使用--'来完成sql注入语句
http://p2.qhimg.com/t0179a5120e122c8876.png
img

MySQL 创建数据表

创建MySQL数据表需要以下信息:

  • 表名
  • 表字段名
  • 定义每个表字段

语法

以下为创建MySQL数据表的SQL通用语法:

CREATE TABLE table_name (column_name column_type);

以下例子中我们将在 RUNOOB 数据库中创建数据表runoob_tbl:

CREATE TABLE IF NOT EXISTS `runoob_tbl`(
   `runoob_id` INT UNSIGNED AUTO_INCREMENT,
   `runoob_title` VARCHAR(100) NOT NULL,
   `runoob_author` VARCHAR(40) NOT NULL,
   `submission_date` DATE,
   PRIMARY KEY ( `runoob_id` )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

实例解析:

  • 如果你不想字段为 NULL 可以设置字段的属性为 NOT NULL, 在操作数据库时如果输入该字段的数据为NULL ,就会报错。
  • AUTO_INCREMENT定义列为自增的属性,一般用于主键,数值会自动加1。
  • PRIMARY KEY关键字用于定义列为主键。 您可以使用多列来定义主键,列间以逗号分隔。
  • ENGINE 设置存储引擎,CHARSET 设置编码

MySQL 查询数据

MySQL 数据库使用SQL SELECT语句来查询数据。

你可以通过 mysql> 命令提示窗口中在数据库中查询数据,或者通过PHP脚本来查询数据。

select语法

以下为在MySQL数据库中查询数据通用的 SELECT 语法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号(,)分割,并使用WHERE语句来设定查询条件。
  • SELECT 命令可以读取一条或者多条记录。
  • 你可以使用星号(*)来代替其他字段,SELECT语句会返回表的所有字段数据
  • 你可以使用 WHERE 语句来包含任何条件。
  • 你可以使用 LIMIT 属性来设定返回的记录数。
  • 你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。

select * from runoob_tbl;例如*返回数据表runoob_tbl的所有记录

我们知道从 MySQL 表中使用 SQL SELECT 语句来读取数据。

如需有条件地从表中选取数据,可将 WHERE 子句添加到 SELECT 语句中。

以下是 SQL SELECT 语句使用 WHERE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 查询语句中你可以使用一个或者多个表,表之间使用逗号, 分割,并使用WHERE语句来设定查询条件。
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • WHERE 子句也可以运用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 子句类似于程序语言中的 if 条件,根据 MySQL 表中的字段值来读取指定的数据。

以下为操作符列表,可用于 WHERE 子句中。

MySQL 的 WHERE 子句的字符串比较是不区分大小写的。 你可以使用 BINARY 关键字来设定 WHERE 子句的字符串比较是区分大小写的。

LIKE 子句

我们知道在 MySQL 中使用 SQL SELECT 命令来读取数据, 同时我们可以在 SELECT 语句中使用 WHERE 子句来获取指定的记录。

WHERE 子句中可以使用等号 = 来设定获取数据的条件,如 "runoob_author = 'RUNOOB.COM'"。

但是有时候我们需要获取 runoob_author 字段含有 "COM" 字符的所有记录,这时我们就需要在 WHERE 子句中使用 SQL LIKE 子句。

SQL LIKE 子句中使用百分号 %字符来表示任意字符,类似于UNIX或正则表达式中的星号 *。

如果没有使用百分号 %, LIKE 子句与等号 = 的效果是一样的。

以下是 SQL SELECT 语句使用 LIKE 子句从数据表中读取数据的通用语法:

SELECT field1, field2,...fieldN FROM table_nameWHERE field1 LIKE condition1 [AND [OR]] filed2 = 'somevalue'
  • 你可以在 WHERE 子句中指定任何条件。
  • 你可以在 WHERE 子句中使用LIKE子句。
  • 你可以使用LIKE子句代替等号 =。
  • LIKE 通常与 % 一同使用,类似于一个元字符的搜索。
  • 你可以使用 AND 或者 OR 指定一个或多个条件。
  • 你可以在 DELETE 或 UPDATE 命令中使用 WHERE...LIKE 子句来指定条件。

union子句

UNION 语句:用于将不同表中相同列中查询的数据展示出来;(不包括重复数据)

UNION ALL 语句:用于将不同表中相同列中查询的数据展示出来;(包括重复数据)

使用形式如下:

SELECT 列名称 FROM 表名称 UNION SELECT 列名称 FROM 表名称 ORDER BY 列名称;SELECT 列名称 FROM 表名称 UNION ALL SELECT 列名称 FROM 表名称 ORDER BY 列名称;

ORDER BY 子句

以下是 SQL SELECT 语句使用 ORDER BY 子句将查询数据排序后再返回数据:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...ORDER BY field1 [ASC [DESC][默认 ASC]], [field2...] [ASC [DESC][默认 ASC]]
  • 你可以使用任何字段来作为排序的条件,从而返回排序后的查询结果。
  • 你可以设定多个字段来排序。
  • 你可以使用 ASC 或 DESC 关键字来设置查询结果是按升序或降序排列。 默认情况下,它是按升序排列。
  • 你可以添加 WHERE...LIKE 子句来设置条件。

其他sql函数

一、万能密码

原验证登陆语句:

SELECT * FROM admin WHERE Username= '".$username."' AND Password= '".md5($password)."'

输入 1′ or 1=1 or ‘1’=’1#万能密码语句变为:

SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG'

逻辑运算的优先顺序是NOT>OR>AND

因为1=1恒为真所以并且注释掉了后面的语句,导致密码无论是啥都可以登录

二、数字型注入

可以对传入表达式进行计算 来判断是否为数字型注入

后端语句为

$res=mysqli_query($conn,"select title,content from wp_news where id=".$_GET['id'])

构造?id=1 union select user,pwd from wp_user limit 1,1limit 是指取查询结果第一条记录的后一条记录,或者使用id=-1

爆库名

mysql的数据库information_schema,他是系统数据库,安装完就有,记录是当前数据库的数据库,表,列,
用户权限等信息, 常用的几个表

SCHEMATA表:储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。

TABLES表:储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表

COLUMNS表:提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,列的注释等。是show columns from schemaname.tablename的结果取之此表。
?id=-1'union select 1,group_concat(schema_name),3 from information_schema.schemata--+

1.通过information_schema爆表名

select 1返回1

id=-1 union select 1,group_concat(table_name)from information_schema.tables where table_schema=database()

2.爆字段

id=-1 union select 1,group_conact(column_name)from information_schema.columns where table_name='wp_user'

3.爆用户密码

?id=1 union select user,pwd from wp_user limit 1,1

三、字符型注入

后端语句get输入处若被包裹了单引号或者双引号

判断方法利用mysql的强制类型转化例如id=1a转化为id=1有页面回显则说明为字符型注入

则构造方法为id=1'--+ 或者 id=1'# 加号在url中会被编码为空格

接下来的操作就与数字型操作一样

四、无回显的注入

布尔盲注(页面的回显有两种情况时)

布尔盲注通过页面的回显来判断0或者1

例如a为被猜测的数据id=1’and 'a'<'n'

用二分法来缩小范围,就能够很快猜出字符

多字符的情况

利用,substring mid substr 函数等来截取数据的中的一位再用单字符的清况来继续判断

例如?id=1'and mid((select concat(user,0x7e,pwd) from wp_user,1,1))=a来猜测用户名和密码

时间盲注(页面无回显)

报错注入

常见的利用函数有:exp()、floor()+rand()、updatexml()、extractvalue()

如:select * from users where username=$username (and | or) updatexml(1,concat(0x7e,(select user()),0x7e),1)

' or updatexml(1,concat('~',database()),1) #

实战环节利用安装sqli-lab修炼

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 原文:https://blog.csdn.net/ligupeng7929/article/details/794...
    MaskStar阅读 1,051评论 0 1
  • Mysql 的存储引擎,myisam和innodb的区别。 答: 1.MyISAM 是非事务的存储引擎,适合用于频...
    yufw阅读 976评论 0 1
  • Web安全篇之SQL注入攻击 在网上找了一篇关于sql注入的解释文章,还有很多技术,走马观花吧 文章来源:http...
    hao0_0阅读 1,586评论 0 0
  • 首发地址:我的个人博客 前言 本文章产生的缘由是因为专业老师,让我给本专业的同学讲一哈SQL注入和XSS入门,也就...
    简言之_阅读 1,165评论 0 7
  • 前言 本开发规范基于《阿里巴巴Java开发手册终极版》修改,并集成我们自己的项目开发规范,整合而成。 为表示对阿里...
    4ea0af17fd67阅读 5,623评论 0 5