我正在尝试使用带有手动插入的cookie的jsoup发送请求,以便检测SQL注入漏洞。 问题是只有一个cookie有效,我不明白为什么。 我首先手动验证自己并获取cookie。例如:
PHPSESSID : b74302c3c6af62d23047a450a40cbf5a
security : high
我收到cookies后,我使用相同的PHPSESSID发送我的请求(从浏览器http://localhost:8090/dvwa/vulnerabilities/sqli/?id=&提交=提交#)看起来像这样;但安全性:低 即可。目的是强制你的SQL语法中出现错误"响应,表明SQL注入漏洞。问题是PHPSESSID收到良好(因为我检索dvwa / vulnerabilities / sqli页面而不是登录页面,因此它在认证后将PHPSESSID识别为有效)但是" security:low"好像不行。我无法找到问题。
初始连接的jsoup代码,以便我可以解析页面上的表单,如下所示。我手动提供cookie。
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();
有谁知道我做错了什么?
答案 0 :(得分:1)
经过多次调试后,我资助了问题的根源和奇怪的行为。 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问题,但由于我忽略了其他人可能也是如此,这是一个提醒。