Pikachu靶场记录
0x01 暴力破解
基于表单的暴力破解
没什么好说的,burpsuite找个字典直接爆破完事。
验证码绕过(on server):
刷新页面的时候,会向服务器的验证码接口发送请求,返回的是验证码图片和正确的验证码。
这里有两种思路,一个是采用爬虫不停请求最新的验证码,然后爆破提交就是了,太讨巧。比较重要的是另一种思路:tips提示的验证码不会失效,利用Repeater模块可以验证。
阅读源码可以发现请求服务器验证码接口后,服务器会把新的正确的验证码写在$_SESSION['vcode']
里,但是验证后不会及时把当前的验证码清空,而是依赖用户重新刷新页面,再次请求验证码接口后对$_SESSION['vcode']
覆写。
验证码绕过(on client):
验证码是js代码生成的,判断也是在前端判断。用burpsuite抓到一个登录的包,前端的验证码形同虚设可以随意绕过爆破。
token防爆破
这里有一个很有趣的bug,php5.2环境下token防爆破会失效,SESSION数组中如果关键字与其他变量同名,他们会共用同一片地址空间。这一特性来源于php.ini下的register_globals配置项,默认是开启的。在5.3被废止,5.4被移除。
0x02 XSS注入
反射型(GET&POST)
服务器直接把用户输入的变量拼接到返回的页面中,如果变量包含了js代码,就会被浏览器解析执行。
存储型
相较于反射型,多了一个存储的过程。用户输入->存储到数据库->读取数据库内容->输出到页面上。
DOM型xss
用户输入的变量被前端的js代码处理,修改了dom元素,如果输入变量中带有js代码,就会被浏览器解析执行。这个过程可以不经过服务器。
感觉有些鸡肋?
XSS之盲打
尽可能地于一切可能的地方提交XSS语句,只要后台管理员看到某一条语句,此语句就能被执行。可以在留言板上留下获取cookie的代码,只要管理员在后台看到,就能获取管理员的cookie。
XSS之过滤
一定要使用<script>
标签的话:
-
大小写——
-
2.拼凑法——<scri
XSS之htmlspecialchars
htmlspecialchars(string,flags,character-set,double_encode)
ENT_COMPAT - 仅编码双引号(默认)。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。ps:$test = htmlspecialchars($name, ENT_QUOTES);
htmlspeacialchars()
默认不编码单引号,可以尝试闭合单引号绕过
payload:' onclick='alert(xss)'
XSS之href输出
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3x5UETPl-1648970767882)(https://raw.githubusercontent.com/DrDenkiBran/Image/main/img/2022-03-27-20-14-49-image.png)]
payload:javascript:alert(1)
XSS之JS
这里讲输入动态的生成到了js中,形成xss
javascript里面是不会对tag和字符实体进行解释的,所以需要进行js转义
讲这个例子主要是为了让你明白,输出点在js中的xss问题,应该怎么修?
这里如果进行html的实体编码,虽然可以解决XSS的问题,但是实体编码后的内容,在JS里面不会进行翻译,这样会导致前端的功能无法使用。
所以在JS的输出点应该使用\对特殊字符进行转义
htmlspecialchars($str,ENT_QUOTES)
payload='x'</script><script>alert('xss');</script>
如果对输入点没任何处理:
结果:
0x03 CSRF(跨站请求伪造)
CSRF(get)
当前用户为vince,不知道kobe账户密码的情况下尝试诱骗对方修改kobe的个人信息
伪造的链接:
http://localhost/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=18626545453&add=chain&email=vince%40pikachu.com&submit=submit
kobe点击后,信息被修改
CSRF(POST)
换汤不换药。本质还是利用受害人的身份验证,向服务器发送伪造的请求。这次换一个链接,用户访问后向服务器发送修改个人信息的POST请求即可。这里的恶意链接对应的页面需要我们自己伪造。
CSRF(token)
这里展示token是如何防范csrf攻击的。通过一个临时的身份牌照,对每一次的敏感操作都做身份验证,只要生成token的算法足够复杂,就可以完全杜绝攻击者伪造的请求。
0x04 SQL注入
留个坑
0x05 RCE(远程命令/代码执行)
这部分我觉得靶场处理的不是特别好,因为太依赖php的动态特性了,显得RCE问题太过于简单。