新銀報到,多多指教,如有錯誤,多謝指出
extract變量覆蓋
第一次遇到extract()函數,百度一波含義(回到家后google被ban了):
這樣就簡單了,直接構造payload:?shiyan=&flag,得到flag.
strcmp比較字符串
做的時候這道題目崩了,不過既然提到了strcmp,那么一定會用到數組繞過,隨便丟了一個a[]進去,flag出來了???
urldecode二次編碼繞過
百度一波相關函數:
????????eregi()函數在一個字符串搜索指定的模式的字符串。搜索不區分大小寫。
? ? 這樣題目就簡單了:
? ? ? ? 第一關:id不能等于hackerDJ
????????第二關:$_GET[id] = urldecode($_GET[id]);
? ? ? ? 第三關 :if($_GET[id] == "hackerDJ")
? ? 這道題很豐富了我的見識,讓我感覺到一直以來我對GET函數了解的還不是很深刻。
? ? 剛開始我做這道題的時候,直接將id賦值為hackerDJ的一次url編碼,然后撲街了好久,最后多虧了題目的提示二次編碼繞過將id賦值為hackerDJ的二次url編碼,才得到flag,之后我又對題目進行了分析:
好題,好題。
md5()函數
這道題就是使username!=password? ? &&? ? md5(username)===md5(password)
這樣就很簡單了,直接將240610708和QNKCDZO分別對上述賦值即可。
另外一種比較簡單的方法就是md5()方法無法處理數組,直接構造payload:? ?
? ? username[]=1&password[]=2即可
數組返回NULL繞過
遇到 了熟悉的ereg函數,直接用%00截斷。
還有熟悉的strpos函數,直接用數組截斷。
構造如下payload:http://120.24.86.145:9009/19.php?password[]=%00
sha()函數比較繞過
比較長的一道題目,emmmmm。
需要對name和password進行賦值,而且需要他們的值不等,但是sha1的值相等。
sha1()函數無法處理數組,直接構造如下payload:
? ??????http://120.24.86.145:9009/7.php?name[]=1&password[]=2
md5加密相等繞過
這道題上面已經說過了,兩個md5加密相等的值為240610708和QNKCDZO,這里需要將a賦值為240610708直接得到flag,payload:
? ??http://120.24.86.145:9009/13.php?a=240610708
十六進制與數字比較
又是一道老長老長的題目,瀏覽一遍程序,最后需要number==temp是才可以輸出flag ,然后我們可以對password賦值,根據題目提示,直接將password賦值為number的十六進制,然后flag出來了??(0x表示16進制)
payload:http://120.24.86.145:9009/20.php?password=0xdeadc0de
ereg正則%00截斷
題目需要對password賦值
? ? 關卡1:if (ereg ("^[a-zA-Z0-9]+$", $_GET['password']) === FALSE)? ? ?? ? %00截斷
? ? 關卡2:strlen($_GET['password']) < 8 && $_GET['password'] > 9999999
? ? ? ? ? ? ?可以用數組繞過,并且這里為&&,前面可以用數組截斷(True),后面數組中有字母以及%,無法解析(true)。
? ? 關卡3:strpos ($_GET['password'], '-') !== FALSE)? ? ?也可以用數組繞過
? ? 最終我的payload:
? ??????????????http://120.24.86.145:9009/5.php?password[]=1%00
strpos數組繞過
對ctf進行賦值
? ? 關卡1:if (@ereg ("^[1-9]+$", $_GET['ctf']) === FALSE)? ? 用%00截斷
? ? 關卡2:else if (strpos ($_GET['ctf'], '#biubiubiu') !== FALSE) 用數組截斷
? ? 最終我的payload:
? ??????????????http://120.24.86.145:9009/15.php?ctf[]=1%00