從零到一的ctfer

取自NU1L戰(zhàn)隊的《從零到一的ctfer成長之路》

web安全的相關(guān)概念

1.POC

POC,Proof ofConcept,中文意思是“觀點證明”。這個短語會在漏洞報告中使用,漏洞報告中的POC則是一段說明或者一個攻擊的樣例,使得讀者能夠確認這個漏洞是真實存在的。
2.EXP

EXP,Exploit,中文意思是“漏洞利用”。意思是一段對漏洞如何利用的詳細說明或者一個演示的漏洞攻擊代碼,可以使得讀者完全了解漏洞的機理以及利用的方法。
3.VUL

VUL,Vulnerability的縮寫,泛指漏洞。

4.payload(有效攻擊負載)是包含在你用于一次漏洞利用(exploit)中的ShellCode中的主要功能代碼

5.shellcode(可提權(quán)代碼) 對于一個漏洞來說,ShellCode就是一個用于某個漏洞的二進制代碼框架,有了這個框架你可以在這個ShellCode中包含你需要的Payload來做一些事情

6.CVE漏洞編號

CVE 的英文全稱是“Common Vulnerabilities & Exposures”公共漏洞和暴露,例如CVE-2015-0057、CVE-1999-0001等等。CVE就好像是一個字典表,為廣泛認同的信息安全漏洞或者已經(jīng)暴露出來的弱點給出一個公共的名稱。如果在一個漏洞報告中指明的一個漏洞,如果有CVE名稱,你就可以快速地在任何其它CVE兼容的數(shù)據(jù)庫中找到相應(yīng)修補的信息,解決安全問題。

可以在https://cve.mitre.org/網(wǎng)站根據(jù)漏洞的CVE編號搜索該漏洞的介紹。

也可以在中文社區(qū)http://www.scap.org.cn/上搜索關(guān)于漏洞的介紹

5.0DAY漏洞和0DAY攻擊

在計算機領(lǐng)域中,零日漏洞或零時差漏洞(英語:Zero-dayexploit)通常是指還沒有補丁的安全漏洞,而零日攻擊或零時差攻擊(英語:Zero-dayattack)則是指利用這種漏洞進行的攻擊。提供該漏洞細節(jié)或者利用程序的人通常是該漏洞的發(fā)現(xiàn)者。零日漏洞的利用程序?qū)W(wǎng)絡(luò)安全具有巨大威脅,因此零日漏洞不但是黑客的最愛,掌握多少零日漏洞也成為評價黑客技術(shù)水平的一個重要參數(shù)。
零日漏洞及其利用代碼不僅對犯罪黑客而言,具有極高的利用價值,一些國家間諜和網(wǎng)軍部隊,例如美國國家安全局和美國網(wǎng)戰(zhàn)司令部也非常重視這些信息[1]。據(jù)路透社報告稱美國政府是零日漏洞黑市的最大買家

信息收集

[ 信息收集之CMS指紋識別 ]

1. 指紋識別

1.1了解CMS指紋識別

CMS:快速搭建網(wǎng)站的內(nèi)容管理系統(tǒng)

Web應(yīng)用框架:快速二次開發(fā)的Web應(yīng)用框架,例如網(wǎng)站,小程序

1.2 指紋的特性

  • 唯一性
  • 終身不變性
  • 方便性

1.3 指紋識別的方式

2. WAF

專針對Web應(yīng)用攻擊的防護產(chǎn)品

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: 內(nèi)容分發(fā)網(wǎng)絡(luò)

基本思路是 盡可能避開互聯(lián)網(wǎng)上有可能影響數(shù)據(jù)傳輸速度和穩(wěn)定性的瓶頸和環(huán)節(jié),使內(nèi)容傳輸?shù)母?,更穩(wěn)定

改善網(wǎng)絡(luò)加載時間,減少服務(wù)器負載,降低成本,提高網(wǎng)絡(luò)安全行

CDN檢測

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

4.常見的尋找真實IP的方法:

5. CDN漏洞案例:

都是通過尋找對方未綁定CDN站點進行突破,從而找到真實站點。

補充

在線知識

在線工具

公開漏洞

漏洞數(shù)據(jù)庫

googlehack語法

intext:關(guān)鍵字
搜索網(wǎng)頁正文中含有這些關(guān)鍵字的網(wǎng)頁。

intitle:關(guān)鍵字
搜索網(wǎng)頁標(biāo)題中含有這些關(guān)鍵字的網(wǎng)頁。

cache:關(guān)鍵字
搜索含有關(guān)鍵字內(nèi)容的cache。

define:關(guān)鍵字
搜索關(guān)鍵字的定義。

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

info:關(guān)鍵字
搜索指定站點的一些基本信息。

inurl:關(guān)鍵字
搜索含有關(guān)鍵字的URL地址。

(示例:"inurl:php?id=" 意為 搜索網(wǎng)站url中包括了"php?id="關(guān)鍵字的網(wǎng)站,尋找可能含有sql注入的網(wǎng)頁)

(注:"inurl:"后不能接空格,應(yīng)直接接關(guān)鍵詞)

(inurl在搜索資源的功能上十分的強大,目前filetype:用法google無法使用)

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

例:inurl:.edu.cn

link:關(guān)鍵字
查找與關(guān)鍵字做了鏈接的URL地址。

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

related:URL
搜索與指定URL相關(guān)的頁面。

目錄掃描腳本dirsearch

python dirsearch.py -u 網(wǎng)址 -e php

-u 指定網(wǎng)址

-e 指定網(wǎng)站語言

-w 指定字典

-r 遞歸目錄(跑出目錄后,繼續(xù)跑目錄下面的目錄)

注意掃描/.index.php.swp, index.php~ 等備份文件

掃描的記錄會生成到文件中

根據(jù)需要擴充字典,

注意以下文件

www.zip 網(wǎng)站備份源碼

readme.md

robots.txt

.swp

.swo

.swn

子域名爆破工具layer

指紋識別

wappalyzer,火狐插件

git 泄露

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           githack 注意要在python2下環(huán)境運行
p GitHacker.py http://XXXXXXXXXXX/.git/

sql注入基礎(chǔ)

mysql

sql的注釋

使用#

  • 有時發(fā)現(xiàn)執(zhí)行的sql語句中沒有#
  • 原因是url中#號是用來指導(dǎo)瀏覽器動作的(例如錨點),對服務(wù)器端完全無用。
    所以,HTTP請求中不包括#
  • 將#號改成url的編碼%23就可以了

使用--和使用--+

  • 這里發(fā)現(xiàn)+號在語句中變成了空格。
    用來和后面的單引號分隔開,將后面的語句注釋。
  • 了解原理后便知道了--無法使用的原因,是因為--與后面的單引號連接在一起,無法形成有效的mysql語句。
  • 在mysql中使用這個語句分析原因,輸入后回車顯示分號沒有閉合
  • 所以在注入時我們除了使用--+外,也可以使用--'來完成sql注入語句
http://p2.qhimg.com/t0179a5120e122c8876.png
img

MySQL 創(chuàng)建數(shù)據(jù)表

創(chuàng)建MySQL數(shù)據(jù)表需要以下信息:

  • 表名
  • 表字段名
  • 定義每個表字段

語法

以下為創(chuàng)建MySQL數(shù)據(jù)表的SQL通用語法:

CREATE TABLE table_name (column_name column_type);

以下例子中我們將在 RUNOOB 數(shù)據(jù)庫中創(chuàng)建數(shù)據(jù)表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 可以設(shè)置字段的屬性為 NOT NULL, 在操作數(shù)據(jù)庫時如果輸入該字段的數(shù)據(jù)為NULL ,就會報錯。
  • AUTO_INCREMENT定義列為自增的屬性,一般用于主鍵,數(shù)值會自動加1。
  • PRIMARY KEY關(guān)鍵字用于定義列為主鍵。 您可以使用多列來定義主鍵,列間以逗號分隔。
  • ENGINE 設(shè)置存儲引擎,CHARSET 設(shè)置編碼

MySQL 查詢數(shù)據(jù)

MySQL 數(shù)據(jù)庫使用SQL SELECT語句來查詢數(shù)據(jù)。

你可以通過 mysql> 命令提示窗口中在數(shù)據(jù)庫中查詢數(shù)據(jù),或者通過PHP腳本來查詢數(shù)據(jù)。

select語法

以下為在MySQL數(shù)據(jù)庫中查詢數(shù)據(jù)通用的 SELECT 語法:

SELECT column_name,column_name
FROM table_name
[WHERE Clause]
[LIMIT N][ OFFSET M]
  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號(,)分割,并使用WHERE語句來設(shè)定查詢條件。
  • SELECT 命令可以讀取一條或者多條記錄。
  • 你可以使用星號(*)來代替其他字段,SELECT語句會返回表的所有字段數(shù)據(jù)
  • 你可以使用 WHERE 語句來包含任何條件。
  • 你可以使用 LIMIT 屬性來設(shè)定返回的記錄數(shù)。
  • 你可以通過OFFSET指定SELECT語句開始查詢的數(shù)據(jù)偏移量。默認情況下偏移量為0。

select * from runoob_tbl;例如*返回數(shù)據(jù)表runoob_tbl的所有記錄

我們知道從 MySQL 表中使用 SQL SELECT 語句來讀取數(shù)據(jù)。

如需有條件地從表中選取數(shù)據(jù),可將 WHERE 子句添加到 SELECT 語句中。

以下是 SQL SELECT 語句使用 WHERE 子句從數(shù)據(jù)表中讀取數(shù)據(jù)的通用語法:

SELECT field1, field2,...fieldN FROM table_name1, table_name2...
[WHERE condition1 [AND [OR]] condition2.....
  • 查詢語句中你可以使用一個或者多個表,表之間使用逗號, 分割,并使用WHERE語句來設(shè)定查詢條件。
  • 你可以在 WHERE 子句中指定任何條件。
  • 你可以使用 AND 或者 OR 指定一個或多個條件。
  • WHERE 子句也可以運用于 SQL 的 DELETE 或者 UPDATE 命令。
  • WHERE 子句類似于程序語言中的 if 條件,根據(jù) MySQL 表中的字段值來讀取指定的數(shù)據(jù)。

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

MySQL 的 WHERE 子句的字符串比較是不區(qū)分大小寫的。 你可以使用 BINARY 關(guān)鍵字來設(shè)定 WHERE 子句的字符串比較是區(qū)分大小寫的。

LIKE 子句

我們知道在 MySQL 中使用 SQL SELECT 命令來讀取數(shù)據(jù), 同時我們可以在 SELECT 語句中使用 WHERE 子句來獲取指定的記錄。

WHERE 子句中可以使用等號 = 來設(shè)定獲取數(shù)據(jù)的條件,如 "runoob_author = 'RUNOOB.COM'"。

但是有時候我們需要獲取 runoob_author 字段含有 "COM" 字符的所有記錄,這時我們就需要在 WHERE 子句中使用 SQL LIKE 子句。

SQL LIKE 子句中使用百分號 %字符來表示任意字符,類似于UNIX或正則表達式中的星號 *。

如果沒有使用百分號 %, LIKE 子句與等號 = 的效果是一樣的。

以下是 SQL SELECT 語句使用 LIKE 子句從數(shù)據(jù)表中讀取數(shù)據(jù)的通用語法:

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 語句:用于將不同表中相同列中查詢的數(shù)據(jù)展示出來;(不包括重復(fù)數(shù)據(jù))

UNION ALL 語句:用于將不同表中相同列中查詢的數(shù)據(jù)展示出來;(包括重復(fù)數(shù)據(jù))

使用形式如下:

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

ORDER BY 子句

以下是 SQL SELECT 語句使用 ORDER BY 子句將查詢數(shù)據(jù)排序后再返回數(shù)據(jù):

SELECT field1, field2,...fieldN FROM table_name1, table_name2...ORDER BY field1 [ASC [DESC][默認 ASC]], [field2...] [ASC [DESC][默認 ASC]]
  • 你可以使用任何字段來作為排序的條件,從而返回排序后的查詢結(jié)果。
  • 你可以設(shè)定多個字段來排序。
  • 你可以使用 ASC 或 DESC 關(guān)鍵字來設(shè)置查詢結(jié)果是按升序或降序排列。 默認情況下,它是按升序排列。
  • 你可以添加 WHERE...LIKE 子句來設(shè)置條件。

其他sql函數(shù)

一、萬能密碼

原驗證登陸語句:

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

輸入 1′ or 1=1 or ‘1’=’1#萬能密碼語句變?yōu)?

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

邏輯運算的優(yōu)先順序是NOT>OR>AND

因為1=1恒為真所以并且注釋掉了后面的語句,導(dǎo)致密碼無論是啥都可以登錄

二、數(shù)字型注入

可以對傳入表達式進行計算 來判斷是否為數(shù)字型注入

后端語句為

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

構(gòu)造?id=1 union select user,pwd from wp_user limit 1,1limit 是指取查詢結(jié)果第一條記錄的后一條記錄,或者使用id=-1

爆庫名

mysql的數(shù)據(jù)庫information_schema,他是系統(tǒng)數(shù)據(jù)庫,安裝完就有,記錄是當(dāng)前數(shù)據(jù)庫的數(shù)據(jù)庫,表,列,
用戶權(quán)限等信息, 常用的幾個表

SCHEMATA表:儲存mysql所有數(shù)據(jù)庫的基本信息,包括數(shù)據(jù)庫名,編碼類型路徑等,show databases的結(jié)果取之此表。

TABLES表:儲存mysql中的表信息,(當(dāng)然也有數(shù)據(jù)庫名這一列,這樣才能找到哪個數(shù)據(jù)庫有哪些表嘛)包括這個表是基本表還是系統(tǒng)表,數(shù)據(jù)庫的引擎是什么,表有多少行,創(chuàng)建時間,最后更新時間等。show tables from schemaname的結(jié)果取之此表

COLUMNS表:提供了表中的列信息,(當(dāng)然也有數(shù)據(jù)庫名和表名稱這兩列)詳細表述了某張表的所有列以及每個列的信息,包括該列是那個表中的第幾列,列的數(shù)據(jù)類型,列的編碼類型,列的權(quán)限,列的注釋等。是show columns from schemaname.tablename的結(jié)果取之此表。
?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的強制類型轉(zhuǎn)化例如id=1a轉(zhuǎn)化為id=1有頁面回顯則說明為字符型注入

則構(gòu)造方法為id=1'--+ 或者 id=1'# 加號在url中會被編碼為空格

接下來的操作就與數(shù)字型操作一樣

四、無回顯的注入

布爾盲注(頁面的回顯有兩種情況時)

布爾盲注通過頁面的回顯來判斷0或者1

例如a為被猜測的數(shù)據(jù)id=1’and 'a'<'n'

用二分法來縮小范圍,就能夠很快猜出字符

多字符的情況

利用,substring mid substr 函數(shù)等來截取數(shù)據(jù)的中的一位再用單字符的清況來繼續(xù)判斷

例如?id=1'and mid((select concat(user,0x7e,pwd) from wp_user,1,1))=a來猜測用戶名和密碼

時間盲注(頁面無回顯)

報錯注入

常見的利用函數(shù)有: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) #

實戰(zhàn)環(huán)節(jié)利用安裝sqli-lab修煉

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文:https://blog.csdn.net/ligupeng7929/article/details/794...
    MaskStar閱讀 1,122評論 0 1
  • Mysql 的存儲引擎,myisam和innodb的區(qū)別。 答: 1.MyISAM 是非事務(wù)的存儲引擎,適合用于頻...
    yufw閱讀 1,415評論 0 1
  • Web安全篇之SQL注入攻擊 在網(wǎng)上找了一篇關(guān)于sql注入的解釋文章,還有很多技術(shù),走馬觀花吧 文章來源:http...
    hao0_0閱讀 1,692評論 0 0
  • 首發(fā)地址:我的個人博客 前言 本文章產(chǎn)生的緣由是因為專業(yè)老師,讓我給本專業(yè)的同學(xué)講一哈SQL注入和XSS入門,也就...
    簡言之_閱讀 1,218評論 0 7
  • 前言 本開發(fā)規(guī)范基于《阿里巴巴Java開發(fā)手冊終極版》修改,并集成我們自己的項目開發(fā)規(guī)范,整合而成。 為表示對阿里...
    4ea0af17fd67閱讀 5,751評論 0 5

友情鏈接更多精彩內(nèi)容