• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    通過sqli-labs學習sql注入基礎挑戰之less11-22

    來源:懂視網 責編:小采 時間:2020-11-09 16:29:59
    文檔

    通過sqli-labs學習sql注入基礎挑戰之less11-22

    通過sqli-labs學習sql注入基礎挑戰之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎挑戰之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類也是比較多了,這次的是post型注入一般
    推薦度:
    導讀通過sqli-labs學習sql注入基礎挑戰之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎挑戰之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類也是比較多了,這次的是post型注入一般

    原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎挑戰之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類也是比較多了,這次的是post型注入一般都是登陸繞過,當然也是可

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

    上一次就講了基礎挑戰之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類也是比較多了,這次的是post型注入一般都是登陸繞過,當然也是可以獲取數據庫的信息,具體看下面的實驗吧。

    一些基礎的知識上一篇基礎挑戰之less1-10http://blog.csdn.net/u012763794/article/details/51207833會有,這里不會講以前講過了知識了,還有盲注的python腳步哦,有需要的鏈接去看看

    工具

    還是火狐+hackbar插件


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



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


    判斷方法,上篇說過了,直接來個單引號,報錯


    我們把 整個被單引號引著的復制下來

    把左端和右端的單引號去掉,就變成下面的

    test' LIMIT 0,1 test右邊有個單引號,這里怎么跟get的報錯不一樣了(get的單引號報錯,test后面有兩個單引號),不管了,post就當這樣了。

    那么判斷是單引號注入了


    直接來個永真的,加注釋,登陸成功


    當然除了用注釋還可以閉合單引號,當這里有個問題探討,看下圖


    為什么登陸失敗呢,我們看看最終這個sql語句,

    首先and的優先級高于or 【就是and先運算】

    那么 '1'='1' and password='test' 先運算,因為users表里面的password字段沒有一個數據時test,右邊是false,那么整個表達式就是false

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



    既然右邊是false

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

    username='test' 沒有這一行數據吧,右邊是false,or也救不了你了偷笑


    所以我們要怎么辦呢,uname這里不行,我們嘗試passwd咯,發現是可以的


    下面文字解釋一下吧,有了上面的基礎,應該就比較容易理解了

    首先and先運算

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

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

    最終語句等價于

    SELECT username, password FROM users WHERE 0 or 1;

    那么就肯定可以繞過登陸了


    那么總結一下:一般第一個登陸字段(一般是用戶名)就用注釋,第二個登陸字段(一般就密碼)用閉合和注釋都是可以的


    此外,我們這里還可以通過盲注獲取數據庫信息


    這個當然也是寫個腳步來跑啦


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


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


    先用什么單引號雙引號看看,報錯就看出它有沒有用引號,或者加了其他東西


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



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


    單引號看出有),直接永真+閉合



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


    這個跟上一課的名稱一樣吧,但其實這是雙引號的 單引號沒報錯,雙引號就報錯了,這個比上面兩個簡單


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


    這里輸入單引號,雙引號就不會報錯了,我們只能加上永真用假或者時間延遲函數了 確定單引號盲注

    盲注這種事情當然編程實現才好了



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


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

    測試: 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 (基于錯誤的更新查詢POST注入)

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

    這個應該跟xpath注入有點關系 xpath教程看這 http://www.w3school.com.cn/xpath/ 還有個函數 updatexml,這個函數搜了很久都不見其介紹,都是直接給個payload:updatexml(1,concat(0x7e,(version())),0),這函數什么意思,每個位置的參數對應什么,什么都沒說,我也是醉了,后來直接在mysql控制臺直接help搞掂,瞬間跪了,看了學東西還是官方的好啊,有解釋有例子,很好


    可以看到可以看到 第一個參數是 目標xml 第二個參數是 xpath的表達式,這個看w3c那個xpath教程 第三個參數是 要將xpath的表達式的東西將目標xml替換成什么
    實踐了一下上面的例子,你就會理解
    第一個直接將a結點的內容包括a直接替換為fff
    第二個是因為第一個結點并沒有b結點所以沒有變化, /就相當于linux的根目錄咯
    第三個例子就不管b在哪一層,只要找到就替換

    而且發現只能替換一個結點


    好了,大家好好理解,我們開始注入
    這個我也沒怎么接觸,先看看代碼
    首先有個過濾函數, check_input
    check_input首先判斷不為空,就截取前15個字符,
    當magic_quotes_gpc=On的時候,函數get_magic_quotes_gpc()就會返回1
    當magic_quotes_gpc=Off的時候,函數get_magic_quotes_gpc()就會返回0
    magic_quotes_gpc函數在php中的作用是判斷解析用戶提示的數據,如包括有:post、get、cookie過來的數據增加轉義字符“\”,以確保這些數據不會引起程序,特別是數據庫語句因為特殊字符引起的污染而出現致命的錯誤 若開了就將轉義符去掉
    ctype_digit判斷是不是數字,是數字就返回true,否則返回false
    是字符就用mysql_real_escape_string過濾,其實基本就是轉義(轉義 SQL 語句中使用的字符串中的特殊字符,并考慮到連接的當前字符集),這樣就把寬字節cut了 是數字也要用intval轉化成int,因為傳過來的是字符型數字
    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;
    }

    可以看到只對uname過濾,那么我們從password入手咯


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


    其實不要1= 也是可以的,我們要的是執行updatexml執行的時候報錯

    關鍵在第二個參數的理解,為什么要這樣 我們可以看到第二個參數直接version()那個版本信息顯示不全, 我們在version兩邊加個左右括號(十六進制分別是0x28,0x29)看看, 可以看到多了右邊的括號 我們再在兩邊加個+(0x2b)號看看,我們看到已經完整顯示出來了

    當然再加一個也是可以的



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

    還有很多,就不列舉了 通過實驗,報錯的時候只會顯示后面的一部分,但是我們在前面添加的字符,那么除了第一個字符,整個字符都顯示出來了,要從根本理解,可能看xpath的報錯輸出函數?
    下面開始真正的注入過程吧
    獲取當前數據庫

    用戶

    數據表, 用用limit控制第幾個表就行,一次只能出一行數據哦,多行是不能把信息爆出來的 當然那個數據庫那里,單引號沒過濾用單引號括著security也行

    看看users表有什么列

    依次查出有id, username,password
    接下來就搞數據了,發現不能不能先select出同一表中的某些值,再update這個表(在同一語句中)

    我們再加一層select行不行呢,還要給里面那層給個別名哦

    那就起個hack名咯,在整個select語句后面加就行,終于搞出來了,挺艱難的


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


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

    跟上節一樣, 獲取數據庫

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


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


    當然這里用updatexml也是可以的


    這里介紹另一個報錯函數extractvalue

    更詳細自己去看看,第一個參數也是個xml,第二個參數就是xpath的表達式,這個函數是獲取xml中某個節點的值



    看看例子,可以看到與updatexml一次只能更新一個節點不同,extractvalue可以一次獲取多個節點的值,并以空格分隔


    接下來開始注入吧(主要這里的是extractvalue函數只要兩個參數哦,updatexml是3個)


    其實思路都是差不多
    這里直接上最后結果





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

    看了下代碼
    首先判斷有無cookie,沒有的話,查詢出來再設置cookie

    若cookie存在,又分兩種情況, 第一種情況,你登陸過,cookie還有效,你沒按刪除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的按鈕



    后臺就把cookie的時間設置為過期的時間,那么cookie就被刪除了

    那么我們的目標登陸完后對cookie的注入,核心代碼在下圖


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

    3列返回正確,所以users表有三列


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




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


    這里是base64 ,單引號+括號,其實跟20差不多啊






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

    這個跟less20,21差不多,這里是雙引號,還要base64編碼了的,有強大的hackbar怕什么,




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

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    通過sqli-labs學習sql注入基礎挑戰之less11-22

    通過sqli-labs學習sql注入基礎挑戰之less11-22:原文鏈接:http://blog.csdn.net/u012763794/article/details/51361152 上一次就講了基礎挑戰之less1-10:http://blog.csdn.net/u012763794/article/details/51207833,都是get型的,包含的種類也是比較多了,這次的是post型注入一般
    推薦度:
    標簽: 學習 22 sql
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    Top
    主站蜘蛛池模板: 在线观看亚洲精品福利片| 麻豆国产在线精品国偷产拍| 亚洲精品国产综合久久一线| 久久精品中文字幕久久| 无码国产精品一区二区免费式芒果| 国产精品免费视频观看拍拍| 国产综合精品一区二区三区| 亚洲精品美女久久久久99小说| 国产精品爱搞视频网站 | 国产亚洲色婷婷久久99精品| 日韩精品欧美亚洲| 精品久久久久久无码人妻蜜桃 | 亚洲国产一二三精品无码| 精品一区二区三区免费视频| 四虎在线精品视频一二区| MM1313亚洲国产精品| 久久久无码精品亚洲日韩蜜臀浪潮| 亚洲国产精品成人AV无码久久综合影院| 国产精品免费看久久久香蕉| 国产99精品一区二区三区免费| 久久r热这里有精品视频| 国产成人精品免费午夜app| 精品人无码一区二区三区| 人人妻人人澡人人爽人人精品 | 国产精品VA在线观看无码不卡| 国产精品无码一区二区在线 | 国产成人精品日本亚洲| 欧美jizzhd精品欧美| 亚洲综合精品香蕉久久网| 亚洲精品国自产拍在线观看| 日本Aⅴ大伊香蕉精品视频| 久久久这里有精品中文字幕| 久久久久久亚洲精品不卡| 蜜桃麻豆www久久国产精品 | 国产成人精品日本亚洲18图| 国产亚洲一区二区精品| 久久青草国产精品一区| 99久久精品国产一区二区| 国产精品污WWW一区二区三区 | 久久久久亚洲精品中文字幕| 欧美精品一区二区三区免费|