WebGoat代码审计其2-sql注入

Posted by Mr.Be1ieVe on Monday, May 31, 2021

Intro

2 select

点击submit后, 查看数据包,发往/SqlInjection/attack2, 表单数据为query: select * from Employees where first_name='Bob'; 别的查询都不会返回数据.

查看代码

设置了TYPE_SCROLL_INSENSITIVE

The constant indicating the type for a ResultSet object that is scrollable but generally not sensitive to changes to the data that underlies the ResultSet. 对于底层数据变换不敏感

CONCUR_READ_ONLY只读.

后面就是查询后,判断department里有没有Marketing, 有就判定答对了.

所以我们输入select 'Marketing' as department from employees; 也可以达到完成(Doge)

3 update

输入update employees set department='Sales' where first_name='Tobi';

/SqlInjection/attack3

几种Statement可以在JDBC - Statements, PreparedStatement and CallableStatement - Tutorialspoint查看一些细节, 总的来说就是用来连接数据库和执行sql的.

statement执行executeupdate后, 如果connection最后不执行commit,对数据的更改不会返回到数据库中.

所以输入update employees set department='Sales'也可以

4 alter

提交更改后,查询是否有phone这个字段,不报错就返回成功

5 GRANT CREATE TABLE TO

执行后, 再去查询是否真的授予了权限

9 string sql注入

正确选择后,发送到/SqlInjection/assignment5a

account: Smith'
operator: or
injection: '1' = '1

这里的query就是最经典的sql注入写法了

10 Numeric SQL injection

/SqlInjection/assignment5b

login_count: 1
userid: 1 or 1=1

?就是PreparedStatement里的用法,会先进行sql预编译, 完成下图的解析和规范, 编译, 优化,然后将语句存在缓存中等待调用.

图自How PreparedStatement in Java prevents SQL Injection? | JavaByPatel: Data structures and algorithms interview questions in Java 下同

当用户数据来的时候,就会直接替换掉? 这里不存在再次编译, 所以也就不会解析用户数据了.

代码会先解析count为数字,然后设置到查询中, 但是这里的userid还是拼接的so.

11

/SqlInjection/attack8

表单数据

name: a
auth_tan: 3SL99A'  or '1'='1

拼接数据, 判断大于单行就算过了

12

也是拼接, 但是可以通过堆叠注入执行额外的sql语句.

通关条件就是(results.getString(2).equals("John")) && (results.getString(3).equals("Smith"))

advanced

3

/SqlInjectionAdvanced/attack6a

拼接参数. 但是会通过正则匹配是否有使用union (?i)(^[^-/*;)]*)(\s*)UNION(.*$)

正则可以在 https://regex101.com 查看详细

要求是使用union和output.toString().contains("dave") && output.toString().contains("passW0rD")

5

/SqlInjectionAdvanced/challenge_Login

一看就知道没戏的,只能去试试注册了 /SqlInjectionAdvanced/challenge

注册也是拼接,下面别的地方也没办法了,只能在这里进行堆叠然后更新tom的密码了.

「真诚赞赏,手留余香」

Mr.Be1ieVe's Treasure

真诚赞赏,手留余香

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