南郵oj【web】
一 簽到題
原始碼獲取flag。
二 md5 collision
php弱型別匹配,百度0e開頭的MD5,get獲得flag。
三 簽到2
字串長度限制,f12修改輸入即可獲得flag。
四 這題不是WEB
這題真不是web,把圖下下來用記事本開啟獲得flag。
五 層層遞進
這道題很操蛋,作者把S O 0 o 所有的組合試了一遍吧!
看原始碼,拼命地切換so這樣的目錄【並不是同一個!】最後切到404.php,看到藏在script標籤裡的豎!起!來!的flag!凸(艹皿
六 AAencode
goole javascript aaencode,解碼就行。或者放在控制檯上彈窗。
七 單身二十年
重定向,直接抓包看就行了。(還有一中方法,在原始碼上訪問/search_key.php,因為直接看原始碼不會執行重定向)
八 php decode
放在線上編譯器上執行一下(要把eval改成echo,一開始還以為php版本不對。。)
九 檔案包含
goole了一下檔案包含漏洞用法1.包含目標機其他檔案 2.遠端包含本地木馬 3.遠端包含本地wget一個shell
但檔案包含在ctf上怎麼取flag?卡了很久,看了大佬的wp :以下url用filter讀index.php的原始碼的base64,然後解碼(不是太明白
http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
十 單身一百年也沒用
這個flag不在原始碼,在原始碼訪問index.php也沒用,直接抓包看返回頭有flag。
十一 download~!
這題做不了。
十二 COOKIE
抓包改包,考的是登入憑證COOKIE
十三 MYSQL
robot.txt發現提示,需要intval($_GET[id])==1024 但 $_GET[id]!=1024,開始想到弱匹配怎麼都想不到(弱匹配怎麼可能滿足第二個條件?)就關注intval()函式,浮點形會被忽略小數點之後的數,所以a=1024.1就行。intval()函式還會忽略字母之後的值,所以a=1024e1也可行,第二個條件1024*10*1!=1024
十四 GBK Injection
寬位元組注入,前段時間學習到只要吧%df也加到url中就可以用sqlmap進行注入,那就直接用sqlmap跑就好了
python sqlmap.py -u"http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1%df'",然後一步步跑出flag(跑了一個表才告訴我是第四個表。。)
十五 /x00
%00截斷,百度了一下下ereg函式還真是可以%00截斷,那截斷再加字串就行了(url中#要編碼為%23否則會被識別為錨)
十六 bypass again
都說了又是弱型別,那就是吧,get兩個函式之間用&分隔。
十七 變數覆蓋
百度了一下:通常將可以用自定義的引數值替換原有變數值的情況稱為變數覆蓋漏洞。
經常導致變數覆蓋漏洞場景有:$$,extract(),parse_str(),import_request_variables()使用不當
有原始碼,這道題直接post兩個變數為相同數值即可(不能一個一個post,因為後臺並不會儲存你的資料)
另外的難點的變數覆蓋題目解析--連結
十八 PHP是世界上最好的語言
這個也做不了,但好像在哪做過??
十九 偽裝者
偽造ip的話,加個X-Forwarded-For: 127.0.0.1就行。可這題試了很久也不行~
二十 Header
md,南郵的伺服器也不是什麼好東西。
二十一 上傳繞過
這題想了很久,還以為是後臺陣列匹配,截斷也想過,就是弄不出來。看了網上wp說的在十六進位制截斷提醒了我。
但網上說的都不明不白地。
首先提示就是兩次的報錯。第一次上傳php:
第二次上傳gif:
我們可以看出上傳gif字尾通過了第一次上傳php時的條件,又被第二個條件過濾了。
我們仔細看看第二個條件,那裡出現了/uploads/... 在抓包時我們也能發現這個路徑,自然地我們推測,第二個條件是不是匹配路徑那裡的字尾而不是filename那裡的字尾?
通過實驗得出結論,第二個條件為把filename拼入/uploads/路徑後面再取字尾進行匹配.php。
那假如我們在/uploads/路徑處攜程.php字尾,然後在最後面進行截斷,這樣filename就接不進來了!filename就可以匹配條件一的.gif,匹配條件二時由於拼接被截斷了,匹配的自然也就是我們自己設定的.php。
二十二 SQL注入1
以為是post注入,直接用sqlmap跑,結果跑出了上題的答案。。。
這題直接用user=admin然後閉合並用#註釋調後面的就行了,並不是檢驗你注入庫的內容。
二十三 pass check
這道題學到了:post資料並不是在網頁資料包下面隨便加個資料就可以的。
一開始抓包一直在資料包下面接pass=,總是提到paa未指定~後來到hackbar上post了一下,發現post的資料包還是多了很多頭的
這道題是利用strcmp報錯返回0的特性,傳入pass為陣列達到報錯的目的。
二十四 起名字真難
這道題原始碼開始一直都看不懂,哪個條件是說輸入要==54975581388了??看了半天才發現後面的return是==,顯示問題一直看成一個等號。。。。cao!
還是不明白,比較數字怎麼能做到沒有數字,還一定要輸入字串?看了wp才知道這個54975581388的十六進位制是0xccccccccc,沒有數字。。。。腦洞不夠打啊啊啊
二十五 密碼重置
抓包,改三個地方,兩個為base64後的ctfuser改成base64後的admin,一個為ctfuser改成admin。
二十六 php反序列化
做不了
二十七 SQL Injection
這次不抓包了..乖乖繞過...原始碼出後臺。本題中轉義的引號並沒有什麼意思,只是給你提醒一下
dalao所言:遇到帶有分號的sql查詢,第一個想到就是逃脫單引號。可以生成一個單引號,可以省略一個單引號。
這題沒有遮蔽反斜槓,就可以用反斜槓來省略一個單引號
注意:此處的註釋符#仍然要用url編碼,否則會被當成錨。
二十八 綜合題
開啟就是一個jsfuck,decode之後是一個目錄,開啟說tip在腦袋。
檢視返回頭髮現提示 history of bash,百度了一下都是linux命令,歷史記錄什麼的,然後就沒想法了。
通過大佬wp得知:在Unix中 , 會生成一個 .bash_history 的檔案 , 記錄了使用者的操作歷史
訪問一下發現一個.zip檔案,下載下來得flag
二十九 SQL注入2
這道題這種程式碼應該是沒辦法在原語句上把密碼註釋去了。想到老方法,單引號過濾然後再查(題目也提示了union聯合查詢)
可是又突然想到......這樣直接丟到sqlmap不就行啦~,丟到sqlmap。。是個時間忙注跑了挺久的。。然後還tm又是那個庫!
最後user=' union select md5(1)#&pass=1 ,由於第一個select執行失敗,返回第二個md5(1),再匹配第二個原始碼中md5的1.
三十 綜合題2
首先,這道題的後臺是掛了的,主要看思路
這道題真的挺難的,一開始以為是改User-Agent,一直找不到該改什麼;然後發現?file=sm.txt可以讀取幾個網站的原始碼,但看了這些個原始碼也沒什麼思路。
dalao思路:第一步:通過查詢sql注入拿賬號密碼。第二步:找到後臺頁面登入傳shell連shell找flag。
首先在檔案回傳的about.php中有後臺地址;passencode.php中有一個加密規則;在上傳結果頁面so.php有waf過濾規則(可以用sqlmap的tamper或者寫個指令碼)(這裡掛了)
注入得出賬號admin,密碼1020117099010701140117011001160117(根據加密規則,三個數字一個0,三個數字為ascii,0為空格)解密出來密碼為fuckruntu。
進入後臺得到一個已經傳上去的shell(xlcteam.php),然後可以看原始碼,然後連上去就行了(post:www=preg_replace&wtf=print_r(scandir('.')))(具體連線原理烏雲文章已經看不到了。)
最後flag的地址:
三十一 密碼重置2
檢視原始碼得管理員郵箱,然後還有個提示是有.swp遺留,可是我怎麼也找不到~~
後來才知道不是index.php的.swp,而是登入後介面login的(太粗心了!!)
訪問swp格式:/.submit.php.swp,得到token的判斷條件,很簡單嘛十個0,得flag。
三十二 file_get_contents
理解:由於include是讀流的,後臺只要include了某個檔案,那麼前臺有檔案包含漏洞時,就可以用php://filter等php偽協議對該檔案進行讀,寫等操作。
這題因為file是一個檔案而不是字串,不能直接file=meizijiu,file_get_contents()函式讀不到。而是需要用file=php://input,然後在post資料中寫入meizijiu。
三十三 變數覆蓋
前面說過幾種情況要注意變數覆蓋,這裡剛好符合$$key=$value,直接在url中傳?name=meizijiu233就行了。
三十四 HateIT
太難,再看
三十五 Anonymous
還是太菜了,wp也看不懂~~