1. 程式人生 > >2018“駭極杯”全國大學生網路安全邀請賽暨第四屆上海市大學生網路安全大賽線上賽 writeup

2018“駭極杯”全國大學生網路安全邀請賽暨第四屆上海市大學生網路安全大賽線上賽 writeup

0x00 簽到題
操作內容:

|登陸比賽介面 上去看到簽到題,一般情況下 簽到題是沒有難度的 題目給定一串字元MZWGCZ33GM2TEMRSMQZTALJUGM4WKLJUMFTGELJZGFTDILLBMJSWEYZXGNTGKMBVMN6Q

Base32一閃而過 ,比的就是手速,解碼拿到flag。

FLAG值:

flag{35222d30-439e-4afb-91f4-abebc73fe05c}

0x01 easy_py
操作內容:

|首先檢視二進位制檔案

03f3 0d0a bebc ce5b 6300 0000 0000 0000

000f 0000 0040 0000 0073 b200 0000 7106

0064 2333 7109 0064 0000 6401 0064 0200

這裡的2333很可疑,通過嘗試修改成1000,進行反編譯

 1       0  JUMP_ABSOLUTE         6  'to 6'

           3  LOAD_CONST           16  'right'

           6  JUMP_ABSOLUTE         9  'to 9'

           9  LOAD_CONST            0  ''

          12  LOAD_CONST            1  10

          15  LOAD_CONST            2  7

          18

  LOAD_CONST            3  1

          21  LOAD_CONST            4  29

          24  LOAD_CONST            5  14

          27  LOAD_CONST            2  7

          30  LOAD_CONST            6  22

          33  LOAD_CONST            6  22

          36  LOAD_CONST            7  31

          39  LOAD_CONST            8

  57

          42  LOAD_CONST            9  30

          45  LOAD_CONST           10  9

          48  LOAD_CONST           11  52

   2      51  LOAD_CONST           12  27

          54  BUILD_LIST_15        15

          57  STORE_NAME            0  'cmp'

   3      60  LOAD_NAME             1  'raw_input'

          63  CALL_FUNCTION_0       0

   4      66  STORE_NAME            2  'flag'

          69  LOAD_CONST            0  ''

          72  STORE_NAME            3  'm'

          75  SETUP_LOOP           91  'to 169'

          78  LOAD_NAME             2  'flag'

          81  GET_ITER        

          82  FOR_ITER             83  'to 168'

          85  STORE_NAME            4  'i'

          88  LOAD_NAME             5  'ord'

          91  LOAD_NAME             4  'i'

          94  CALL_FUNCTION_1       1

          97  UNARY_INVERT    

          98  LOAD_CONST           13  102

         101  BINARY_AND      

         102  LOAD_NAME             5  'ord'

         105  LOAD_NAME             4  'i'

         108  CALL_FUNCTION_1       1

         111  LOAD_CONST           18  -103

         114  BINARY_AND      

         115  BINARY_OR       

         116  STORE_NAME            4  'i'

         119  LOAD_NAME             4  'i'

         122  LOAD_NAME             0  'cmp'

         125  LOAD_NAME             3  'm'

         128  BINARY_SUBSCR   

         129  COMPARE_OP            2  '=='

         132  POP_JUMP_IF_FALSE   144  'to 144'

         135  LOAD_NAME             3  'm'

   8     138  UNARY_NEGATIVE  

         139  LOAD_CONST           14  -1

         142  BINARY_ADD      

         143  UNARY_NEGATIVE  

  10     144  STORE_NAME            3  'm'

         147  JUMP_BACK            73  'to 73'

         150  CONTINUE             73  'to 73'

         153  LOAD_CONST           15  'wrong'

         156  PRINT_ITEM      

         157  PRINT_NEWLINE_CONT

         158  LOAD_NAME             6  'exit'

         161  CALL_FUNCTION_0       0

         164  POP_TOP         

         165  JUMP_BACK            73  'to 73'

         168  POP_BLOCK       

       169_0  COME_FROM                '75'

         169  LOAD_CONST           16  'right'

         172  PRINT_ITEM      

         173  PRINT_NEWLINE_CONT

Parse error at or near `LOAD_CONST' instruction at offset 3

得到的是python的位元組碼,通過手動模擬彙編,寫出POC

const = [0, 10, 7, 1, 29, 14, 7, 22, 22, 31, 57, 30, 9, 52, 27]

flag =
""

for i in const:
    flag = flag +
chr((~i) & 0x66 | (-103 & i))

print flag

FLAG值:

flag{happy_xoR}

0x02 web1
操作內容:

開啟網頁什麼都沒有,很自然的開啟控制檯看一下原始碼。

裡面寫著讓我們找robots.txt,所以在url後新增robots.txt

顯示source.php和flag.php

我先開啟flag.php檢查了一下,什麼都沒有。然後開啟source.php

在原始碼裡寫著需要post引數admin,在測試注入的時候發現1有回顯,顯示只有本地才能拿到flag

第一反應是X-Forwarded-For繞過,結果不行,上網找了一排,挨個試了一下,X-Clien-IP,可以繞過。

之後原始碼裡跳出了一張img,分號比較顯眼,試了一下把照片下載下來,結果顯示301,這條路不行。

接著就是想這個分號,測試了一下,可以通過構造url來請求到資源,於是就想到是個ssrf漏洞。

接著構造請求訪問到flag.php,可以在原始碼裡看到註釋起來的flag。

FLAG值:

flag{11d340f0-0740-4229-9ff0-c2fca56f0706}

0x03 web2
操作內容:

存在原始碼洩露

然後使用 vi命令恢復得到

 

可得知是php反序列化 通過變數替換繞過

get 傳參部分:first=doller&a=var=give%26bbb=me%26ccc=flag

get部分有parsestr函式來完成變數覆蓋的操作

然後post部分

come=O%3A4%3A%22come%22%3A2%3A%7Bs%3A12%3A%22%00come%00method%22%3Bs%3A4%3A%22echo%22%3Bs%3A10%3A%22%00come%00args%22%3Ba%3A1%3A%7Bs%3A4%3A%22host%22%3Bs%3A20%3A%22123%26cat%24%7BIFS%7D%2Ffl%22%22ag%22%3B%7D%7D123

FLAG值:

flag{ca8ebda5-ab29-489f-aead-e60a929f65e8 }

0x04 cpp

操作內容:

|匯入IDA進行分析

在0x4011a函式中發現它首先將flag進行了((flag[i] >> 6) | 4*flag[i]) ^ i

處理

然後在401332函式中又進行了如下操作

flag[j] = (flag[j-1]|flag[j]) & ~(flag[j-1]&flag[j])

迴圈三次,等價於

flag[i] = flag[i] ^ flag[i-1]

然後在401332函式中又進行了如下操作

flag[j] = (flag[j-1]|flag[j]) & ~(flag[j-1]&flag[j])

迴圈三次,等價於

flag[i] = flag[i] ^ flag[i-1]

可得到flag

FLAG值:

flag{W0w_y0u_m4st3r_C_p1us_p1us}

0x05 What's_it

操作內容:

|第一步:暴力破解程式碼的金鑰 得到爆破出來的結果是:ozulmt

第二步:檢查函式的演算法 檢查輸入格式,再剪裁輸出,我們利用偽隨機數生成一串字元,將它與剪裁得到的輸入內容進行比較。將生成後的字串dump下來,整理格式,便得到flag

FLAG值:

flag{a197b847-7092-53a4-7c41-bc7d6d52e69d}