背景
偶遇一從事電商的朋友犀填,閑談?wù)f到了他的電商網(wǎng)站史飞,他不理解自己的網(wǎng)站是如何被破解的牵舱,問我能否幫忙看看他的網(wǎng)站存在哪些安全漏洞喧务,說實(shí)話當(dāng)時(shí)偶并沒有研究過網(wǎng)站破解及安全防護(hù)赖歌,也是一時(shí)興起抱著學(xué)習(xí)的態(tài)度答應(yīng)了朋友。
目標(biāo):
尋找網(wǎng)站漏洞獲取后臺(tái)數(shù)據(jù)功茴,提供修復(fù)建議
工具及手段:
google庐冯、UE、Sqlyog坎穿、SQL注入
方式方法:
1展父、了解目標(biāo)網(wǎng)站
訪問朋友網(wǎng)站,通過網(wǎng)站風(fēng)格玲昧、網(wǎng)頁后綴栖茉、版權(quán)信息等判斷網(wǎng)站為基于開源EC-SHOP進(jìn)行簡(jiǎn)單整合后部署的,開發(fā)語言php孵延,版本號(hào)v2.5.0吕漂。
2、搜索資料
通過google搜索ec-shop介紹及其漏洞尘应,下載ec-shop程序惶凝,網(wǎng)上公布了很多ec-shop的漏洞,主要利用SQL注入的方式犬钢。
搜索到user.php頁面存在注入漏洞苍鲜,//xxx.com/user.php?act=order_query&order_sn=21,其中order_sn并沒有對(duì)字符進(jìn)行檢查,可以通過構(gòu)造特殊字符如:user.php?act=order_query&order_sn=',其中構(gòu)造的參數(shù)為英文單引號(hào)玷犹,頁面會(huì)返回sql錯(cuò)誤提示混滔。
3、搭建測(cè)試環(huán)境
工欲善其事必先利其器,我們不能上來就拿朋友的網(wǎng)站開火遍坟,還是自己搭建一個(gè)學(xué)習(xí)學(xué)習(xí)拳亿,當(dāng)然如果需要的話,還可能要讀一下源代碼愿伴,以便找到更好的構(gòu)造方法肺魁。
在網(wǎng)上下載到ecshop的程序,結(jié)合安裝部署說明在本地搭建ec-shop測(cè)試環(huán)境隔节。
4鹅经、利用漏洞進(jìn)行安全測(cè)試
使用在google上搜索到的常用漏洞進(jìn)行試驗(yàn),
訪問//localhost/user.php?act=order_query&order_sn='怎诫,返回的頁面讓我和小伙伴都驚呆了瘾晃。截圖如下
這個(gè)頁面告訴我們單引號(hào)被當(dāng)作sql語句直接執(zhí)行了,而且系統(tǒng)很豪爽的把sql的出錯(cuò)信息完整的告訴了大家幻妓,通過這個(gè)返回頁面我們可以知道后臺(tái)的表名稱保留了ecshop的默認(rèn)表蹦误。
系統(tǒng)執(zhí)行的SQL語句為SELECT order_id, order_status, shipping_status, pay_status, shipping_time, shipping_id, invoice_no, user_id FROM `ecs_order_info` WHERE order_sn = ''' LIMIT 1 ),請(qǐng)注意我們輸入的字符串會(huì)直接放入WHERE order_sn = ''的雙引號(hào)內(nèi)肉津。熟悉SQL的同學(xué)們可以充分發(fā)揮你們的想象力了强胰,提示下使用union(別小看這些平時(shí)不太起眼的詞呀)。
這個(gè)漏洞相當(dāng)于告訴大家妹沙,我給你們一個(gè)入口偶洋,可以執(zhí)行sql語句,而且還可以把結(jié)果返回給你顯示距糖,太恐怖了玄窝,如果sql溝通得當(dāng),我們可以得到后臺(tái)數(shù)據(jù)庫中任何想要的信息悍引。
既然這么多信息都能拿到恩脂,那什么最重要呢,其實(shí)我們只要拿到那個(gè)最重要的趣斤,其他的都很有更好的辦法獲得东亦,聰明的朋友也許想到了,那就是獲取管理員密碼唬渗,你想想管理員密碼都能拿到了典阵,直接進(jìn)入后臺(tái)管理界面,通過正常的頁面就能得到其他任何信息了镊逝。
那么怎么獲得管理員密碼信息呢壮啊?是不是覺得激動(dòng)人心的時(shí)刻到了,事實(shí)上從發(fā)現(xiàn)漏洞撑蒜,到漏洞發(fā)揮價(jià)值是一個(gè)煎熬也是令人激動(dòng)的過程歹啼。
首先通過本地環(huán)境的數(shù)據(jù)庫知道管理員信息存放在表ecs_admin_user表中玄渗,主要字段名user_name,password,那么獲取用戶名密碼的簡(jiǎn)單sql為select username,password from ecs_admin_user;
考慮union的語法需要前后的字段數(shù)量狸眼、類型要一致才可藤树,SELECT order_id, order_status, shipping_status, pay_status, shipping_time, shipping_id, invoice_no, user_id FROM `ecs_order_info` WHERE order_sn = '' LIMIT 1 ),我們可構(gòu)造union select 1,2,3,4,5,6,concat(user_name,0x7c,password),8 fromecs_admin_user,其中0x7c為構(gòu)造一個(gè)分隔符拓萌,便于區(qū)分用戶名密碼岁钓,那我們把整個(gè)sql連接起來在數(shù)據(jù)庫中執(zhí)行查詢,看是否能得到想要的結(jié)果微王,至于在如何在數(shù)據(jù)庫中執(zhí)行查詢驗(yàn)證我就不再這里贅述了屡限,經(jīng)過驗(yàn)證sql語句正確可以執(zhí)行。
第二步炕倘,我們將這個(gè)sql放到url中钧大,//localhost/user.php?act=order_query&order_sn='union select 1,2,3,4,5,6,concat(user_name,0x7c,password),8 fromecs_admin_user,看結(jié)果,是不是很失望罩旋,并沒有返回我們想要的結(jié)果啊央,通過查看錯(cuò)誤提示,發(fā)現(xiàn)sql語法有錯(cuò)誤涨醋,url中可以看到在union之前我們添加一個(gè)單引號(hào)瓜饥,而網(wǎng)站在構(gòu)造后臺(tái)sql時(shí)會(huì)在order_sn的值兩邊都添加單引號(hào),這樣最后構(gòu)造的sql是語法不正確的东帅,怎么解決呢? 還得感謝sql提供的好東東 /* 球拦,這個(gè)特殊語句用于注釋后面的內(nèi)容靠闭,我們把它加在我們構(gòu)造的字符之后,就可以把不需要的內(nèi)容屏蔽了坎炼,從而得到一個(gè)可執(zhí)行的sql語句了愧膀。
第三步,再試//localhost/user.php?act=order_query&order_sn='union select 1,2,3,4,5,6,concat(user_name,0x7c,password),8 fromecs_admin_user/*谣光,怎么樣檩淋?是不是很激動(dòng)呢!
第四步萄金,激動(dòng)之后定睛一看蟀悦,不對(duì)呀,密碼怎們是那么長(zhǎng)一串字符呢氧敢,嘿嘿日戈,我悄悄的告訴你,那是用md5做加密的孙乖,是不是有些灰心了浙炼,折騰了半天怎們拿到的密碼還不能用呢份氧,別灰心,要有耐心弯屈,要抱著水來土掩兵來將擋的精神蜗帜,不折不撓,碰到攔路的要嗎直接干掉要嗎想辦法繞過资厉。至于md5密碼如何使用網(wǎng)上有很多辦法厅缺,本文中就不描述了,當(dāng)然如果有必要的話酌住,我會(huì)單獨(dú)寫文件介紹店归。
再給大家贈(zèng)送一個(gè)附加信息,上述方法只會(huì)取數(shù)據(jù)庫中的第一個(gè)管理員密碼酪我,如果想獲取其他行的管理員密碼消痛,也有應(yīng)辦法,在sql后 增加limit語句 from ecs_admin_user limit 0,1/*都哭,limit的語法大家可上網(wǎng)查找秩伞。
第五步,通過管理員賬號(hào)密碼登錄后臺(tái)欺矫,成功I葱隆!穆趴!后臺(tái)數(shù)據(jù)都暴露與我的眼前脸爱!
第六步,既然都準(zhǔn)備好了未妹,就要真刀實(shí)槍的上陣了簿废,訪問朋友網(wǎng)站,開火络它,一切順利族檬,登錄后臺(tái)成功。告知朋友已經(jīng)過測(cè)試化戳,其網(wǎng)站存在漏洞单料。當(dāng)我把管理員的密碼告訴他時(shí),他震驚了点楼。
第七步扫尖,我們的目的不是攻擊網(wǎng)站,是幫朋友提供解決辦法提高網(wǎng)站安全性掠廓,不能忘記目的呀藏斩,要不就走上歪路了,呵呵却盘。其實(shí)辦法也很簡(jiǎn)單狰域,如果會(huì)改代碼的話增加sql校驗(yàn)即可媳拴。
當(dāng)然朋友是小白,這種方法他肯定不會(huì)了兆览,我就告訴他最笨的辦法屈溉,其實(shí)ecshop已經(jīng)公布了補(bǔ)丁,只是這哥們太懶沒有升級(jí)抬探,到ecshop下載補(bǔ)丁包升級(jí)網(wǎng)站程序子巾,解決此問題。
以上sql注入語句不是本人原創(chuàng)小压,都是網(wǎng)上搜集到方法线梗,我只是原封不動(dòng)的利用或者略覺修改利用。
學(xué)習(xí)過程中遇到什么問題或者想獲取學(xué)習(xí)資源的話怠益,歡迎加入技術(shù)愛好者交流群373107565仪搔,我們一起學(xué)技術(shù)!