#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