45

JAVA代码审计03: WebGoat SQL注入靶场审计01

 3 years ago
source link: https://www.wjlshare.xyz/2020/11/06/java代码审计02-webgoat-sql注入靶场审计01/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 前言

之前简单的审计了一下登录和注册,说实话有的逻辑看了好久没有怎么看明白,打算先继续看下去后面水平有所提升了再回来看,所以今天我们就先审计Webgoat SQL注入靶场的前面几节

0x01 SQL Lesson 9

前面都是sql注入的介绍,我们直接来看到lesson9,首先请求一下看一下前端请求后端的接口地址

YVveQzJ.png!mobile

还是像之前一样,全局进行一个搜索,我们首先来看PostMapping那一个代码

mMrIBfQ.png!mobile

看代码发现红框处直接进行了SQL语句的拼接

Vn2iqaz.png!mobile

我们来打个断点分析一下

可以看到我们输入的内容没有经过任何过滤就直接拼接来进去

Q3eQzy.png!mobile

然后我们再跟进一下injectableQuery,其实就是下面一个方法

可以看到我们传入的参数给了accountName,我们再来打一下断点看看一下accountName的数值是什么

IRfyeuj.png!mobile

可以看到我们传入的数据直接可以通过引号闭合sql语句的引号

FbEZfeN.png!mobile

SELECT * FROM user_data WHERE first_name = 'John' and last_name = ' + 'Smith or 1='1 + '

然后就可以看到我们所有的数据都回显出来了

yYZRryy.png!mobile

0x02 SQL Lesson 10

同样的发送请求来定位我们后端的接口 ye6nayR.png!mobile

然后在代码中进行一个定位 ,定位到如下的片段

RzEz2aE.png!mobile

由于大体结构都和之前的差不多所以这里就不多赘述了,我们来看到第56行,发现

"SELECT * From user_data WHERE Login_Count = ? and userid= " + accountName

可以看到Login_Count 后面是 ? 这个一看就发现是对数据进行了一个预编译

然后后面的代码会将Login_Count转换成数字类型如果没有出错才会进行后续的操作

然后再进行sql语句的执行

ai2MRj.png!mobile

所以这里的注入点事后面的accountname,直接进行了一个拼接,所以我们只需要如下payload即可

eQRvymf.png!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK