如何使用 Jsoup 将 "Security : low" 作为 cookie 参数发送到 DVWA?

How to send "Security : low" to DVWA as cookie parameter using Jsoup?

我正在尝试使用带有手动插入 cookie 的 jsoup 发送请求,目的是检测 SQL 注入漏洞。 问题似乎是只有一个 cookie 有效,我不明白为什么。 我首先手动验证自己并获取 cookie。示例:

PHPSESSID : b74302c3c6af62d23047a450a40cbf5a
security : high

获得 cookie 后,我使用相同的 PHPSESSID 但 安全性:。目的是强制发出 SQL 注入漏洞信号的 "You have an error in your SQL syntax" 响应。问题是 PHPSESSID 接收良好(因为我检索了 dvwa/vulnerabilities/sqli 页面而不是登录页面,因此它在身份验证后将 PHPSESSID 识别为有效)但 "security : low" 似乎不起作用。我找不到问题。

用于初始连接的 jsoup 代码如下所示,以便我可以解析页面上的表单。我手动提供饼干。

Connection  connection = Jsoup.connect(urlDTO.getUrl())
                        .userAgent(StringConstants.USER_AGENT)
                        .cookies(cookies)//Map<String,String>
                        .referrer(StringConstants.REFERRER);

Document htmlDocument = connection.get();

为了发送表格,我使用了这个代码:

Connection  connection = Jsoup.connect(formDTO.getUrl())
                        .userAgent(StringConstants.USER_AGENT)
                        .cookies(cookies)
                        .data(listToMap(formDTO.getInputList()))// id = ' , Submit = Submit
                        .method(getMethod(formDTO.getMethod()))
                        .referrer(StringConstants.REFERRER);

Connection.Response res = connection.execute();
Document doc = res.parse();

有人知道我做错了什么吗?

经过多次调试,我找到了问题的根源和奇怪的行为。 cookies/headers/url没有问题,问题出在.method().method() 的默认值为 Method.GET。但是由于我正在发送动态请求,所以我也必须动态构建它。为此,我正在解析表单以获取方法,然后在连接构造中添加所需的类型。

if (method.equals("post")) {
            return Method.POST;
        }
if (method.equals("get")) {
            return Method.GET;
        }
return Method.POST;

这一直有效到现在,令人惊讶的是,当发送错误的方法时,它仍然发送了一个几乎有效的响应,所以我忽略了它。

这是解决方法。

if (method.toLowerCase().equals("post")) {
            return Method.POST;
        }
if (method.toLowerCase().equals("get")) {
            return Method.GET;
        }
return Method.GET;

这是我的错误,没有传达 Jsoup 问题,但由于我忽略了它,其他人可能也会忽略它,所以这里提醒一下。