最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 16:29:59
文檔

通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22

通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎(chǔ)挑戰(zhàn)之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類(lèi)也是比較多了,這次的是post型注入一般
推薦度:
導(dǎo)讀通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎(chǔ)挑戰(zhàn)之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類(lèi)也是比較多了,這次的是post型注入一般

原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎(chǔ)挑戰(zhàn)之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類(lèi)也是比較多了,這次的是post型注入一般都是登陸繞過(guò),當(dāng)然也是可

原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152

上一次就講了基礎(chǔ)挑戰(zhàn)之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類(lèi)也是比較多了,這次的是post型注入一般都是登陸繞過(guò),當(dāng)然也是可以獲取數(shù)據(jù)庫(kù)的信息,具體看下面的實(shí)驗(yàn)吧。

一些基礎(chǔ)的知識(shí)上一篇基礎(chǔ)挑戰(zhàn)之less1-10http://blog.csdn.net/u012763794/article/details/51207833會(huì)有,這里不會(huì)講以前講過(guò)了知識(shí)了,還有盲注的python腳步哦,有需要的鏈接去看看

工具

還是火狐+hackbar插件


看看要post提交的字段吧,uname和passwd(這個(gè)在username右邊的編輯框右鍵查看元素即可看到)



less11 POST - Error Based - Single quotes- String (基于錯(cuò)誤的POST型單引號(hào)字符型注入)


判斷方法,上篇說(shuō)過(guò)了,直接來(lái)個(gè)單引號(hào),報(bào)錯(cuò)


我們把 整個(gè)被單引號(hào)引著的復(fù)制下來(lái)

把左端和右端的單引號(hào)去掉,就變成下面的

test' LIMIT 0,1 test右邊有個(gè)單引號(hào),這里怎么跟get的報(bào)錯(cuò)不一樣了(get的單引號(hào)報(bào)錯(cuò),test后面有兩個(gè)單引號(hào)),不管了,post就當(dāng)這樣了。

那么判斷是單引號(hào)注入了


直接來(lái)個(gè)永真的,加注釋?zhuān)顷懗晒?/p>


當(dāng)然除了用注釋還可以閉合單引號(hào),當(dāng)這里有個(gè)問(wèn)題探討,看下圖


為什么登陸失敗呢,我們看看最終這個(gè)sql語(yǔ)句,

首先and的優(yōu)先級(jí)高于or 【就是and先運(yùn)算】

那么 '1'='1' and password='test' 先運(yùn)算,因?yàn)閡sers表里面的password字段沒(méi)有一個(gè)數(shù)據(jù)時(shí)test,右邊是false,那么整個(gè)表達(dá)式就是false

為了方便理解,看下面三張圖,第一張為users表,第二張可以看到結(jié)果是0(這個(gè)就是false了,看低三張圖)



既然右邊是false

那么語(yǔ)句就變成 SELECT username, password FROM users WHERE username='test' or false

username='test' 沒(méi)有這一行數(shù)據(jù)吧,右邊是false,or也救不了你了偷笑


所以我們要怎么辦呢,uname這里不行,我們嘗試passwd咯,發(fā)現(xiàn)是可以的


下面文字解釋一下吧,有了上面的基礎(chǔ),應(yīng)該就比較容易理解了

首先and先運(yùn)算

username='test' and password='test' 返回false(0)

'1'='1' 肯定是true(1)了

最終語(yǔ)句等價(jià)于

SELECT username, password FROM users WHERE 0 or 1;

那么就肯定可以繞過(guò)登陸了


那么總結(jié)一下:一般第一個(gè)登陸字段(一般是用戶名)就用注釋?zhuān)诙€(gè)登陸字段(一般就密碼)用閉合和注釋都是可以的


此外,我們這里還可以通過(guò)盲注獲取數(shù)據(jù)庫(kù)信息


這個(gè)當(dāng)然也是寫(xiě)個(gè)腳步來(lái)跑啦


有空我改造之前的那一篇的python腳本,盲注一下這里


less 12 POST - Error Based - Double quotes- String-with twist (基于錯(cuò)誤的雙引號(hào)POST型字符型變形的注入)


先用什么單引號(hào)雙引號(hào)看看,報(bào)錯(cuò)就看出它有沒(méi)有用引號(hào),或者加了其他東西


那么這里明顯看出用)將變量括著,那么直接繞過(guò)



less 13 POST - Double Injection - Single quotes- String -twist (POST單引號(hào)變形雙注入)


單引號(hào)看出有),直接永真+閉合



less 14 POST - Double Injection - Single quotes- String -twist (POST單引號(hào)變形雙注入)


這個(gè)跟上一課的名稱(chēng)一樣吧,但其實(shí)這是雙引號(hào)的 單引號(hào)沒(méi)報(bào)錯(cuò),雙引號(hào)就報(bào)錯(cuò)了,這個(gè)比上面兩個(gè)簡(jiǎn)單


less 15 POST - Blind- Boolian/time Based - Single quotes (基于bool型/時(shí)間延遲單引號(hào)POST型盲注)


這里輸入單引號(hào),雙引號(hào)就不會(huì)報(bào)錯(cuò)了,我們只能加上永真用假或者時(shí)間延遲函數(shù)了 確定單引號(hào)盲注

盲注這種事情當(dāng)然編程實(shí)現(xiàn)才好了



less 16 POST - Blind- Boolian/Time Based - Double quotes (基于bool型/時(shí)間延遲的雙引號(hào)POST型盲注)


這次就用時(shí)間延遲的吧 uname=a&passwd=a") or 1=1# ,判斷為雙引號(hào)變形

測(cè)試: uname=a&passwd=a") or if(length(database())=7,1,sleep(5)) #
uname=a&passwd=a") or if(length(database())=8,1,sleep(5)) #



less 17 POST - Update Query- Error Based - String (基于錯(cuò)誤的更新查詢(xún)POST注入)

注意:下面的注入,一不小心可能把數(shù)據(jù)庫(kù)的user表的密碼表給清空了

這個(gè)應(yīng)該跟xpath注入有點(diǎn)關(guān)系 xpath教程看這 http://www.w3school.com.cn/xpath/ 還有個(gè)函數(shù) updatexml,這個(gè)函數(shù)搜了很久都不見(jiàn)其介紹,都是直接給個(gè)payload:updatexml(1,concat(0x7e,(version())),0),這函數(shù)什么意思,每個(gè)位置的參數(shù)對(duì)應(yīng)什么,什么都沒(méi)說(shuō),我也是醉了,后來(lái)直接在mysql控制臺(tái)直接help搞掂,瞬間跪了,看了學(xué)東西還是官方的好啊,有解釋有例子,很好


可以看到可以看到 第一個(gè)參數(shù)是 目標(biāo)xml 第二個(gè)參數(shù)是 xpath的表達(dá)式,這個(gè)看w3c那個(gè)xpath教程 第三個(gè)參數(shù)是 要將xpath的表達(dá)式的東西將目標(biāo)xml替換成什么
實(shí)踐了一下上面的例子,你就會(huì)理解
第一個(gè)直接將a結(jié)點(diǎn)的內(nèi)容包括a直接替換為fff
第二個(gè)是因?yàn)榈谝粋€(gè)結(jié)點(diǎn)并沒(méi)有b結(jié)點(diǎn)所以沒(méi)有變化, /就相當(dāng)于linux的根目錄咯
第三個(gè)例子就不管b在哪一層,只要找到就替換

而且發(fā)現(xiàn)只能替換一個(gè)結(jié)點(diǎn)


好了,大家好好理解,我們開(kāi)始注入
這個(gè)我也沒(méi)怎么接觸,先看看代碼
首先有個(gè)過(guò)濾函數(shù), check_input
check_input首先判斷不為空,就截取前15個(gè)字符,
當(dāng)magic_quotes_gpc=On的時(shí)候,函數(shù)get_magic_quotes_gpc()就會(huì)返回1
當(dāng)magic_quotes_gpc=Off的時(shí)候,函數(shù)get_magic_quotes_gpc()就會(huì)返回0
magic_quotes_gpc函數(shù)在php中的作用是判斷解析用戶提示的數(shù)據(jù),如包括有:post、get、cookie過(guò)來(lái)的數(shù)據(jù)增加轉(zhuǎn)義字符“\”,以確保這些數(shù)據(jù)不會(huì)引起程序,特別是數(shù)據(jù)庫(kù)語(yǔ)句因?yàn)樘厥庾址鸬奈廴径霈F(xiàn)致命的錯(cuò)誤 若開(kāi)了就將轉(zhuǎn)義符去掉
ctype_digit判斷是不是數(shù)字,是數(shù)字就返回true,否則返回false
是字符就用mysql_real_escape_string過(guò)濾,其實(shí)基本就是轉(zhuǎn)義(轉(zhuǎn)義 SQL 語(yǔ)句中使用的字符串中的特殊字符,并考慮到連接的當(dāng)前字符集),這樣就把寬字節(jié)cut了 是數(shù)字也要用intval轉(zhuǎn)化成int,因?yàn)閭鬟^(guò)來(lái)的是字符型數(shù)字
function check_input($value){
	if(!empty($value)){
	// truncation (see comments)
	$value = substr($value,0,15);
	}
	// Stripslashes if magic quotes enabled
	if (get_magic_quotes_gpc()){
	$value = stripslashes($value);
	}
	// Quote if not a number
	if (!ctype_digit($value)){
	$value = "'" . mysql_real_escape_string($value) . "'";
	}
	else{
	$value = intval($value);
	}
	return $value;
}

可以看到只對(duì)uname過(guò)濾,那么我們從password入手咯


首先通過(guò)用戶名查詢(xún)出用戶名和密碼,再更新那個(gè)用戶的密碼 首先要繞過(guò)通過(guò)用戶名查詢(xún)出用戶名和密碼,這個(gè)我們只能猜吧,比如admin,root,test什么的,這個(gè)可以用字典 在這里我們就當(dāng)知道是admin了,直接用admin就考慮下一步
我們看看payload,updatexml的第一個(gè)參數(shù)和第三個(gè)參數(shù)隨便一個(gè)數(shù)字就行


其實(shí)不要1= 也是可以的,我們要的是執(zhí)行updatexml執(zhí)行的時(shí)候報(bào)錯(cuò)

關(guān)鍵在第二個(gè)參數(shù)的理解,為什么要這樣 我們可以看到第二個(gè)參數(shù)直接version()那個(gè)版本信息顯示不全, 我們?cè)趘ersion兩邊加個(gè)左右括號(hào)(十六進(jìn)制分別是0x28,0x29)看看, 可以看到多了右邊的括號(hào) 我們?cè)僭趦蛇吋觽€(gè)+(0x2b)號(hào)看看,我們看到已經(jīng)完整顯示出來(lái)了

當(dāng)然再加一個(gè)也是可以的



甚至只有前面連接也是可以

還有很多,就不列舉了 通過(guò)實(shí)驗(yàn),報(bào)錯(cuò)的時(shí)候只會(huì)顯示后面的一部分,但是我們?cè)谇懊嫣砑拥淖址?,那么除了第一個(gè)字符,整個(gè)字符都顯示出來(lái)了,要從根本理解,可能看xpath的報(bào)錯(cuò)輸出函數(shù)?
下面開(kāi)始真正的注入過(guò)程吧
獲取當(dāng)前數(shù)據(jù)庫(kù)

用戶

數(shù)據(jù)表, 用用limit控制第幾個(gè)表就行,一次只能出一行數(shù)據(jù)哦,多行是不能把信息爆出來(lái)的 當(dāng)然那個(gè)數(shù)據(jù)庫(kù)那里,單引號(hào)沒(méi)過(guò)濾用單引號(hào)括著security也行

看看users表有什么列

依次查出有id, username,password
接下來(lái)就搞數(shù)據(jù)了,發(fā)現(xiàn)不能不能先select出同一表中的某些值,再u(mài)pdate這個(gè)表(在同一語(yǔ)句中)

我們?cè)偌右粚觭elect行不行呢,還要給里面那層給個(gè)別名哦

那就起個(gè)hack名咯,在整個(gè)select語(yǔ)句后面加就行,終于搞出來(lái)了,挺艱難的


less 18 POST - Header Injection - Uagent field - Error based (基于錯(cuò)誤的用戶代理,頭部POST注入)


這里對(duì)用戶名和密碼都加了過(guò)濾
當(dāng)這個(gè)怎么判斷存在uagent頭存在注入呢,是因?yàn)樗@取了我們的ip,猜它應(yīng)該也獲取了uagent?當(dāng)然不靠普,這個(gè)靠模糊測(cè)試吧(其實(shí)就是靠發(fā)單引號(hào)啊什么的用程序去測(cè)試返回結(jié)果),還有請(qǐng)使用xxx瀏覽器訪問(wèn)的,有可能獲取了uagent,但也可能只是前端的js來(lái)處理
那么用什么工具手注呢,burp的repeater非常方便,用火狐的某些插件應(yīng)該也可以如live http headers,tamper data,下面我用live http headers插件
首先這里要輸入正確的賬號(hào)和密碼才能繞過(guò)賬號(hào)密碼判斷,進(jìn)入處理uagent部分,這里跟我們現(xiàn)實(shí)中的注冊(cè)登錄再注入是比較貼合,這里我們輸入正確的賬號(hào)密碼就輸出我們的uagent

跟上節(jié)一樣, 獲取數(shù)據(jù)庫(kù)

這次我們就不獲取users表了,獲取emails表吧,更改limit的偏移即可獲取全部


less 19 POST - Header Injection - Referer field - Error based (基于頭部的Referer POST報(bào)錯(cuò)注入)


當(dāng)然這里用updatexml也是可以的


這里介紹另一個(gè)報(bào)錯(cuò)函數(shù)extractvalue

更詳細(xì)自己去看看,第一個(gè)參數(shù)也是個(gè)xml,第二個(gè)參數(shù)就是xpath的表達(dá)式,這個(gè)函數(shù)是獲取xml中某個(gè)節(jié)點(diǎn)的值



看看例子,可以看到與updatexml一次只能更新一個(gè)節(jié)點(diǎn)不同,extractvalue可以一次獲取多個(gè)節(jié)點(diǎn)的值,并以空格分隔


接下來(lái)開(kāi)始注入吧(主要這里的是extractvalue函數(shù)只要兩個(gè)參數(shù)哦,updatexml是3個(gè))


其實(shí)思路都是差不多
這里直接上最后結(jié)果





less 20 POST - Cookie injections - Uagent field - Error based (基于錯(cuò)誤的cookie頭部POST注入)

看了下代碼
首先判斷有無(wú)cookie,沒(méi)有的話,查詢(xún)出來(lái)再設(shè)置cookie

若cookie存在,又分兩種情況, 第一種情況,你登陸過(guò),cookie還有效,你沒(méi)按刪除cookie的按鈕,那么他就輸出各種信息,包括刪除cookie的按鈕
if(!isset($_POST['submit'])){	
	$cookee = $_COOKIE['uname'];
	$format = 'D d M Y - H:i:s';
	$timestamp = time() + 3600;
	echo "
"; echo '


'; echo ''; echo "

"; echo '
'; echo "YOUR USER AGENT IS : ".$_SERVER['HTTP_USER_AGENT']; echo "
"; echo ''; echo "YOUR IP ADDRESS IS : ".$_SERVER['REMOTE_ADDR']; echo "
"; echo ''; echo "DELETE YOUR COOKIE OR WAIT FOR IT TO EXPIRE
"; echo ''; echo "YOUR COOKIE : uname = $cookee and expires: " . date($format, $timestamp); echo "
"; $sql="SELECT * FROM users WHERE username='$cookee' LIMIT 0,1"; $result=mysql_query($sql); if (!$result){ die('Issue with your mysql: ' . mysql_error()); } $row = mysql_fetch_array($result); if($row){ echo ''; echo 'Your Login name:'. $row['username']; echo "
"; echo ''; echo 'Your Password:' .$row['password']; echo "
"; echo "
"; echo 'Your ID:' .$row['id']; }else{ echo "

"; echo '


'; echo ''; echo "

"; //echo ''; } echo '

'; echo ''; echo '
'; }

第二種情況,你按了刪除cookie的按鈕



后臺(tái)就把cookie的時(shí)間設(shè)置為過(guò)期的時(shí)間,那么cookie就被刪除了

那么我們的目標(biāo)登陸完后對(duì)cookie的注入,核心代碼在下圖


首先判斷方法什么的都是通用的,我就不啰嗦了

3列返回正確,所以u(píng)sers表有三列


直接上最后獲取到的email信息吧




less 21 Cookie Injection- Error Based- complex - string ( 基于錯(cuò)誤的復(fù)雜的字符型Cookie注入)


這里是base64 ,單引號(hào)+括號(hào),其實(shí)跟20差不多啊






less 22 Cookie Injection- Error Based- Double Quotes - string (基于錯(cuò)誤的雙引號(hào)字符型Cookie注入)

這個(gè)跟less20,21差不多,這里是雙引號(hào),還要base64編碼了的,有強(qiáng)大的hackbar怕什么,




http://blog.csdn.net/u012763794/article/details/51361152

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22

通過(guò)sqli-labs學(xué)習(xí)sql注入基礎(chǔ)挑戰(zhàn)之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎(chǔ)挑戰(zhàn)之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類(lèi)也是比較多了,這次的是post型注入一般
推薦度:
標(biāo)簽: 學(xué)習(xí) 22 sql
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

Top