程式邏輯問題 實驗吧

2021-08-07 15:33:37 字數 1733 閱讀 2155

題目提示是繞過,本題考點:sql語句注入

初了解(可略):

mysql_fetch_array() 中可選的第二個引數 result_type 是乙個常量,可以接受以下值:mysql_assoc,mysql_num 和 mysql_both。本特性是 php 3.0.7 起新加的。

本引數的預設值是 mysql_both。如果用了 mysql_both,將得到乙個同時包含關聯和數字索引的陣列。用 mysql_assoc 只得到關聯索引(如同 mysql_fetch_assoc() 那樣),

用 mysql_num 只得到數字索引(如同 mysql_fetch_row() 那樣)。它僅僅返回關聯陣列。

mysql_connect — 開啟乙個到 mysql 伺服器的連線

strcasecmp($pass, $row[pw])二進位制安全比較字串(不區分大小寫)。本題要求也就是pass==row[pw]

分析本題:

一、漏洞點$sql = "select pw from php where user='$user'"; 因為前面是post所以就是鑰匙式注入 

跟'程式設計師的問題'不同,這裡使用者和密碼分開判了,所以注釋掉pw不可行,只要讓row[pw]的值與pass經過md5之後的值相等即可 而$pass經過md5之後的值是我們可以通過正常輸入控制的 

同時,row[pw]的值是從$sql提取出來的  目標就一句話:只要我們能夠修改$sql的值,此題解決。再次審視注入點:$sql = "select pw from php where user='$user'";

在這裡我們可以利用sql語句,直接給$sql返回乙個值。

也就是說,不需要訪問題裡的資料庫,只要我們修改了$sql的值,此題解決。

二、剩下的就是猜使用者名稱了,試了試admin,不對,然後又試了預設username 成了,防止發生短路,確保後面union執行。

解釋: 1.

最前面的單引號:閉合原文的where user=' 2.

and 0=1:為了使前面的表示式返回值為空. 3.

接著我們使用union select md5(2),直接把md5值作為返回值retuen給$sql,這樣在查詢的時候$query就會有值. 4.

最後的#用來注釋掉後面沒用的東西

程式邏輯問題 實驗吧

今天有點時間就多寫幾篇解題思路吧,希望能夠幫助到那些需要幫助的人,所有的wp都是以一題一篇的形式寫出 主要是為了能夠讓讀者更好的閱讀以及查詢,希望你們不要責怪哦!共勉!永遠愛你們的 新寶寶 難度 中 參與人數 8729人 get flag 2738人 答題人數 2840人 解題通過率 96 繞過 解...

實驗吧 程式邏輯問題

右鍵檢視原始碼 進入後看到 根據原始碼可以看到兩處特別需要重視的地方。很明顯1處sql語句存在注入漏洞,但是密碼欄不能通過一般的注入來繞過,但是可以發現,只要滿足了 row pw strcasecmp pass,row pw 就可以拿到flag,也就是說,我們輸入的 pass與從資料庫取出來的pw一...

實驗吧 WEB 程式邏輯問題

直接檢視網頁源 welcome to xue head noticeb use of undefined constant user assumed user in c h43a1w3 phpstudy www web 5 index.phpb on line 9b noticeb undefine...