日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

江苏工匠杯easyphp

發布時間:2023/12/20 php 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 江苏工匠杯easyphp 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

代碼審計

先看一下代碼

?代碼里有三個變量a,b,c要通過GET方式傳入,并且對a,b,c變量設置了判斷,接下來分別看看怎么達成他們的判斷條件以及其代碼分析

a變量

inval($a)>6000000 要求傳入的a為大于6000000,但后面的strlen()函數限制了a的長度在3以內

此時可以考慮用科學計數法來繞過即a=1e9 ,此時可以使a滿足條件

b變量

b變量這里用到了md5截斷判斷,'8b184b'?===?substr(md5($b),-6,6)

即將b變量進行md5加密,并用substr截取加密后的后6位,截取的結果要為'8b184b'

這個時候需要用代碼來爆破一下

from multiprocessing.dummy import Pool as tp import hashlibknownMd5 = '8b184b'def md5(text):return hashlib.md5(str(text).encode('utf-8')).hexdigest()def findCode(code):key = code.split(':')start = int(key[0])end = int(key[1])for code in range(start, end):if md5(code)[-6:] == knownMd5:print codebreak list=[] for i in range(3):list.append(str(10000000*i) + ':' + str(10000000*(i+1))) pool = tp() pool.map(findCode, list) pool.close() pool.join()

我這里爆破的結果是53724,也許還有其他結果沒爆破出來

此處代碼借鑒了MD5截斷比較驗證 - Ye'sBlog - 博客園 (cnblogs.com)

c變量

?

代碼將傳入的c變量進行了json格式的轉換,將json轉換為php,并再次轉換為數組

那么c傳入的值便要是json格式,同時里面包含了m,n兩個key,m鍵對應的值要不為數字且大于2022,此時包含一個知識點,php中當字符與數字進行比較時,字符部分會轉為0,即傳入

"m":"9999a",比較時會變成9999

n鍵對應的值為數組,數組里有兩個值,并且數組的第一個值也為數組

那么n傳入的格式應為 "n":[[XXX],XXX],再看下面的代碼

array_search("DGGJ",?$c["n"]),這里是搜索n中是否有"DGGJ",有則返回Ture并進行下一步

與弱相等類似即該函數進行匹配時如果是字符串與數字,字符串會轉為0,那么讓"n":[[XXX],0]即可

foreach循環部分意思是n中有"DGGJ"就會輸出no...,意思是n中不能包含"DGGJ"

"n":[[666],0] 同樣可以滿足

最終c={"m":"9999a","n":[[666],0]}

最后傳入 a=1e9&b=53724&c={"m":"9999a","n":[[6],0]}即可

總結

以上是生活随笔為你收集整理的江苏工匠杯easyphp的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。