btslab全攻略——搭建安装和sql注入-程序员宅基地

技术标签: 白帽子  滲透测试学习  sql注入  btslab  

一、介绍

直接引用官方说明

BTS PenTesting Lab is an open source vulnerable web application, created by Cyber Security & Privacy Foundation (www.cysecurity.org). It can be used to learn about many different types of web application vulnerabilities.

Currently, the app contains the following types of vulnerabilities:

SQL Injection
XSS(includes Flash Based xss)
CSRF
Clickjacking
SSRF
File Inclusion
Code Execution
Insecure Direct Object Reference
Unrestricted File Upload vulnerability
Open URL Redirection
Server Side Includes(SSI) Injection and more...

大概意思就是一个易受攻击的web应用,包含常见的例如sql注入,跨站脚本,跨站请求伪造等漏洞,可用于学习和实践。

 

二、环境搭建

1.首先安装好phpstudy,点击启动,并且浏览器访问本地地址查看是否正常工作

2.接着找到php的安装路径,或者直接 右键-网站根目录,将下载并解压好的btslab汉化版放入www文件夹,并且改名btslab

3.修改该目录下的config.php为

<?php

$db_name="bts";
$db_user="root";
$db_password="root";
$db_server="localhost";

?>

(因为phpstudy默认数据库账号密码就是root)

4.访问http://localhost/btslab/setup.php,并且点击Setup,这步是自动安装btslab所要用到的数据库,提示成功后便安装完成了,首页中的管理页面默认账号密码是admin/password

三、sql注入
(需要了解sql语句以及php对数据库的操作,推荐菜鸟教程  http://www.runoob.com/php/php-mysql-intro.html  http://www.runoob.com/sql/sql-tutorial.html  http://www.runoob.com/mysql/mysql-drop-tables.html
百度百科对sql注入的解释:
sql注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。
根据相关技术原理,SQL注入可以分为平台层注入和代码层注入。前者由不安全的数据库配置或数据库平台的漏洞所致;后者主要是由于程序员对输入未进行细致地过滤,从而执行了非法的数据查询。基于此,SQL注入的产生原因通常表现在以下几方面:①不当的类型处理;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤转义字符处理不合适;⑥多个提交处理不当。

进来便看到一篇文章,再看地址栏,典型的get注入。

1.先判断是数字型注入还是文文本型注入

(数字型注入就是这种sql语句select * from posts where postid=1
而文本型就是类似这种select * from posts where postid='1'
两者在利用上的区别就是需不需要闭合引号,显然数字型的不需要,所以通常数字型的sql注入更好利用。)
首先测试两条语句

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 and 1
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 and 0

(浏览器下方的工具是firefox的插件hackbar,挺方便的,推荐大家使用这个)
可以看到第一条成功显示,第二条显示异常,便说明这里的注入点是数字型注入,因为我们没有进行引号的闭合,而第一条显示成功,是因为后台构造的sql语句合法且合理,select * from posts where postid=1 and 1,所以成功查询,但是第二条,由于and 0,所以条件变成了永假,查询不到任何数据,前端自然无显示。

2.通过order by语句判断数据列数

order by根据字面意思就可知是通过什么排序,而后面的可跟一个数字,比如order by 2,意思便是根据数据的第2列排序,我们从order by 1开始测试,发现

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 order by 4 显示正常
http://localhost/btslab/vulnerability/ForumPosts.php?id=1 order by 5 显示异常

测试到5的时候显示Unknown column '5' in 'order clause',说明查到的数据中没有第5列,由此可见当前数据的列数为4。

3.union select查询数据库名,表名,以及列名

首先看看数据的显示点

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,2,3,4

(为什么union slect 1,2,3,4? 因为union联合查找要求列数相同,上面已经判断了列数为4,所以这里需要4个,1234随便写的,还可以这样union select 1,2,now(),'aaa')

我这里就利用2这个点来查数据库名吧,mysql中有个函数database(),可显示当前在使用的数据库,所以

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,database(),3,4

爆出数据库名为bts,当然后面其实可用可不用,因为反正数据库名都可直接用database()这个函数代替。

(再补充个知识点,mysql中有个数据库叫做information_schema,这个里有张表叫做tables,其中的table_name列储存了所有数据库中的所有表名,而table_schema则储存着该表所在的数据库名,group_concat()则可以把多项数据联合成一个字符串)
我们现在要查当前数据库下有哪些表,所以构造sql语句如下

 

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()

查到当前bts数据库下有4张表messages,posts,tdata,users。

我就选择user继续注入吧
(再补充另一个,mysql中有个数据库叫做information_schema,这个里有张表叫做columns,其中的column_name列储存了所有数据库中的所有表的列名,而table_name列则储存着该列所在的表名,table_schema列储存着所在的数据库名)
我们要查当前bts数据库下的users表有哪些列,所以构造语句

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='users' and table_schema=database()

查出bts数据库的users表含有ID,username,email,password,about,privilege,avatar列。

然后爆数据吧,想必大家最关心的是username和password,所以我们从user表查username和password,同时用两个显示点,4和2,于是构造语句

http://localhost/btslab/vulnerability/ForumPosts.php?id=1 union select 1,group_concat(username),3,group_concat(password) from users

账号admin,密码5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8(md5解密后是password)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/whowhowhoisimportant/article/details/109690319

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签