WebGoat代码审计其1-登录注册

Posted by Mr.Be1ieVe on Tuesday, May 25, 2021

IDEA配置

下载idea之后, webgoat要求

* Java 15
* Maven > 3.2.1
* Your favorite IDE
* Git, or Git support in your IDE

但是调试的话, 只安装java即可

安装好后先配置Project SDK。点下图位置, 找Project Structre, 然后Project SDK选择自己的java15位置

然后就是Run configuration, 点击下图箭头位置,然后Edit Configuration,选择Spring Boot,然后填Main classUse classpath of module

如果出现Run按钮灰色, 可能是在配置/下载包, 如果都好了但还是灰色, 建议尝试重启idea(倒

登录

webgoat-container/src/main/java/org/owasp/webgoat/WebSecurityConfig.java 中,放着安全相关的配置文件

身份验证没有用框架给的

后面调试的时候发现获取到了username和passwd之后,还是进入了框架的代码进行判断是否匹配

command + 左键 就可以跟随跳转直到webgoat-container/src/main/java/org/owasp/webgoat/users/UserService.java

跳回按Ctrl + alt + 左方向键

其中existsByUsernamesavefindByUsername都是UserRepository类的

这个接口继承自JpaRepository

Jpa是一种可以让开发者在使用过程中不使用SQL语句的一种方法,通过ORM框架将数据库中的字段和我们的类的属性进行一个关系映射 – 天下大木头

作用就是根据username 查询并返回一个WebGoatUser类型的对象

WebGoatUser类其实就是进行数据库和类的映射

数据库中有username, password 和role.

回到先前的UserService.loadUserByUsername, 打断点后web登录,就可以看到这里返回了查询的账户密码

调试时提醒执行的是这种命令 select webgoatuse0_.username as username1_6_, webgoatuse0_.password as password2_6_, webgoatuse0_.role as role3_6_ from container.web_goat_user webgoatuse0_ where webgoatuse0_.username=? 进行了预处理

注册

数据包发往这个地址

Ctrl + Shift + FCommand + Shift + F全局搜索, 就可以看到了

这个@PostMapping, 是Spring boot的一个Controller, 功能是有声明处理这个请求的路由. 更详细可以看Spring @PostMapping Example - @GetMapping Example

第一行代码

将表单转成UserFrom类型的, UserForm如下,限定了长度.

public class UserForm {

    @NotNull
    @Size(min=6, max=40)
    private String username;
    @NotNull
    @Size(min=6, max=10)
    private String password;
    @NotNull
    @Size(min=6, max=10)
    private String matchingPassword;
    @NotNull
    private String agree;
}

然后判断了用户名是否,密码和确认密码是否相同. 都正确就不抛出任何异常.

中间的bindingResult.hasErrors(),如果使用相同的用户名,会在这里报错然后退出.

然后添加用户

先查询是否存在,然后将用户名密码保存入库. 最后如果不存在就保存到Tracker库中.

这里我感觉,查询也应该查询的是Tracker库中吧. 能走到这里肯定都是User库中用户名不存在的.

参考链接

Java代码审计02: 登录注册模块初审计(未完待续) - 木头的小屋

「真诚赞赏,手留余香」

Mr.Be1ieVe's Treasure

真诚赞赏,手留余香

使用微信扫描二维码完成支付