前言
好久没做题,不想吹牛逼了,消停做点题QAQ
Vulnerability: Command Injection
这题不咋难,老Ping题了
输个分号ls试试,没回显即被Ban了,试试别的,例如|或者&&
出了,看看源代码
把分号和和号Ban了
Vulnerability: File Inclusion
文件包含
看看几个文件
只有file2要密码。没啥想法,直接Hackbar自带Payload梭了
出了
解个码
Vulnerability: File Upload
文件上传,限制只能传图片
一句话🐎改成图片后缀,抓包改成php
保险点后面加个空格。此处原理请参照:https://www.cnblogs.com/cainiao-chuanqi/articles/14198190.html
Vulnerability: SQL Injection
抓个包看看
在包里看到id=1,判断闭合方式:
输入1'时:
输入1"时:
输入1和输入2-1时:
数字型,判断字段数:
1 order by 1# 正常
1 order by 2# 正常
1 order by 3# 报错
两个字段,注库名:
id=-1 union select 1,database()
逐句解释:
首先判断字段数,是为了确定后台数据库中存储数据的方式
id | 姓名 | 密码 |
1 | hh | 123456 |
2 | ss | 12345 |
3 | aa | 123 |
如上的表格中字段数为3,即id、姓名、密码
union select 为联合注入语句,要求左右两侧字段数相同,即:
左侧的-1代表的是网站后台数据库,攻击者要确保union select后面的位数要和前面,也就是系统后台数据库相同,这也是攻击者为什么要先判断字段数的原因。
在本题中,下列语句即不合规则的语句:
id=-1 union select 1,2,3
因为左侧的后台数据库中有两字段数,但右侧1,2,3有三个字段数。
那在正常的语句中就可以将正常显示位中的字符替换成想了解的信息,例如想注出数据库的名字
在本题中就可以
id=-1 union select 1,database()
前面的-1作用是避免占据显示位,使攻击者无法看到想要的消息。
举例说明:
假设在选择数字进行查询时,网站只会给攻击者一条查询记录。如果以如下语句传输:
id=1 union select 1,database()
则会导致唯一提供给攻击者的记录被id=1这条查询结果所占据,而后面的数据库名就无法看到。
所以要使用一个网站后台数据库中压根不可能存在的一个ID去查询,例如负数或者一个极大数。
结果如下:
此处我使用的是
id=1 union select 1,database()
可以看到第一个显示位返回值为id=1的查询结果,第二个显示位则是数据库名:DVWA
后续怎么注不想说了。不过本题有一个坑:
查看源代码,发现有设置函数过滤攻击语句
结果就是攻击者在进行下一步攻击时部分字符被Ban
绕过方式就是16进制编码一下:
别忘了用0x声明字符为16进制。
Vulnerability: Reflected Cross Site Scripting (XSS)
反射型XSS直接模板梭就行了
Vulnerability: Stored Cross Site Scripting (XSS)
前端限制输入字符数量,直接改一下或者抓包就好了:
存储型的话模板梭一下
没过去,看看源代码:
解释一下:
strip_tags()
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签,但允许使用标签。
addslashes()
addslashes()函数返回在预定义字符(单引号、双引号、反斜杠、NULL)之前添加反斜杠的字符串。
可以看到,由于对message参数使用了htmlspecialchars函数进行编码,因此无法再通过message参数注入XSS代码,但是对于name参数,只是简单过滤了
双写绕呗:
下机