首先我们看到第一关,这一关其实讲的是万能密码的使用,我们可以看到他的代码
我们看到第12行,他的语句是select * from 'user' where user = '$user' AND password='$pass';
然后我们将我们刚刚输入的账号和密码放到这个语句中看看
Select * from 'user' where user = admin' and 1=1# AND password=' ';
在PHP中#相当于是注释的符号,也就是说#号后面的语句已经被注释掉了,我们现在密码那一行中不管输入什么东西都可以登录成功。这其实也是万能密码的用法。
然后我们在来讲一下关于逻辑运算符的一些知识点吧。
and和or这两个是我们在万能密码中常用的两个逻辑运算符。
and表示:如果两个表达式都为真,则返回true。
or表示:如果任意一个表达式为真,则返回ture。
我们现在将难度调到medium,然后我们在分析一下源代码。
我们看到mysqli_real_escape_string这个函数,这个函数在username和password中都用来一次,他的作用是用来预防sql注入的,他将MySQL中的特殊字符都进行了转义,以此方法来达到预防sql注入的功能。
其实按正常的逻辑来讲的话,更具这一章的名字,暴力破解,我们其实可以是使用burpsuite中的爆破米快进行密码爆破。理论存在,实践开始。
bp抓包因该不用太过于的细讲了,配置一下代理,然后开始抓包
然后我们发送到爆破模块,配置一下爆破字典,然后开始爆破。
得到密码,然后我们就可以登录成功。
这一章是关于命令注入的知识点,源代码是这样的:
我们看到问题,题目要求我们输入ip
发现出现了类似于cmd里面的一些东西,虽然是乱码,但是可以看出是ping通了,然后我们就可以开始构造payload的了:
127.0.0.1 | whoami 查看一下权限,发现现在是管理员权限。
我们切换到medium,查看一下源代码,发现存在过滤
但是并没有过滤| 所以我们还是可以进行命令注入的。
构造payload:
127.0.0.1|whoami
我们看到high:
查看一下源代码,发现过滤了很多的一些符号。
但是如果我们细看的话,|的后面有一个空格号,所以我们其实也是可以利用命令注入的,所以我们可以这样构造payload:
127.0.0.1|whoami
然后可以发现系统当前的权限:
这一章是讲的文件包含漏洞的,这个漏洞如果处理的不好,可能会造成隐私文件泄露。
但是这个漏洞的前提是要打开allow_url_fopen和allow_url_include。
我们看到靶场页面。
将等级切换到low,然后我们查看一下页面的源代码:
发现没有进行过滤,我们只需要传入参数就可以了。
我们打开这三个文件,看看里面有什么内容
发现没有什么重要的东西,我们将url中的参数更改一下,比如我们查看一下他的/etc/passwd文件。
出现了报错,但是他也把他的路径给显示出来了,我们切换到靶机,在靶机的www目录创建一个muma.php文件,但是我们要构造的是相对路径而不是绝对路径,因为在比赛的靶场中,一般是将相对路径爆出来,不会爆绝对路径,然后我们就需要使用../来构造相对路径,“..”是退回到上一个目录
发现查看到了,因为没有进行过滤,所以我们可以查看任何的东西
我们在切换到medium
我们可以看见他将../,..\,http://,https://都转换为了空字符。
我们在尝试使用../../来读取一下我们的php.ini文件
发现读取失败。然后我们尝试双写http://来进行绕过
发现可以得到,然后我们在尝试读一下我们的木马文件
读取成功
难度切换到high:
我们发现也是存在过滤的,我们看到if那一条代码,意思是这样的,如果说我们查看的文件没有file或者include.php这两个字符串就会报错。
我们可以这样绕过,因为我们读取的是php.ini这个配置文件,所以我们可以在page的后面加上file://字段,他也是可以的取到文件的
所以我们就可以这样构造payload。
本章讲的是文件上传漏洞,老规矩,先看源代码:
貌似没有过滤,我们也许是可以直接上传一个php文件给他,然后在通过菜刀来获得他的权限,因为他直接把他文件的位置都给爆出来了。
然后我们在看到medium,查看一下他的源代码。
我们看到$uploaded_type这里,这里应该是一个过滤,只允许我们上传jpeg和png这两种类型的文件,很明显是白名单绕过。
然后我们看到这个题目,更具源代码,我们其实可以上传一个图片码,首先是写一个一句话木马,然后在随便找一张图片,在cmd中使用copy 图片/b+木马 生成的图片名字。
构造完之后我们就可以上传了
因为他是没有太难的过滤的,所以我们可以直接上传一个图片码。
然后我们在将难度设置到high,其实high和上一题是一样的思路,就是上传图片码,然后用菜刀连接。
他的源码也只是对后缀做了一些处理。
如果想对文件上传漏洞更加熟悉的同学,建议去学习一下upload-master这个靶场,里面全是文件上传的漏洞,基本上常见的都在这里面。
这一章我们来到了最习惯也是最熟悉的sql注入。
危害:
1.造成用户的信息泄露。
2.可以对数据库的数据进行增加或删除操作
3.如果网站目录存在写入权限,可以写入网页木马
4.经过提权等步骤,服务器最高权限被攻击者获取。攻击者可以远程控制服务器,安装后门,得以修改或控制操作系统。
没有对我们输入的sql语句做什么过滤,那如果我们按照正常的思路,看看是否可以渗透进去。
首先我们先判断一下他有没有注入,最简单的,在我们传参的后面加上一个',看看会不会报错
发现报错,说明存在注入,然后我们在看看他的字段长度,使用order by
1' and 1=1 order by 2#
通过尝试,我们发现他的字段长度是2,如果我们将2改为3的话就会引起报错。
既然我们现在已经发现他存在两个字段长度,然后我们来查看他两个字段的回显。
我们使用1' and 1=1 union select 1,2#
我们得到回显,然后我们将1的位置更改为database()。
我们得到他的数据库为dvwa,然后我们开始进行爆表。
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'#
我们发现他有guestbook,users这几个表,然后我们来爆破一下表中的字段。
然后我们在进行爆破字段:
1' and 1=1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
现在知道了字段,我们发现有user,password这几个数据,我们查看一些内容
得到账号和密码,其中这些密码需要进行md5解密,就不一一去搞了。
然后我们把难度切换到medlium,查看一下他的源代码。
然后在看到题目,发现是POST传参。
我们的思路是这样的,使用BP抓包,然后进行渗透。我们首先先打开代理,然后我们使用bp抓到的数据包是
发现id参数,然后我们发送到repeater中,在id=1的后面加一个单引号,看看有没有报错,发现报错。
然后我们将order by 的参数改为2,发现可以
然后后面就和刚刚的思路差不读,开始爆破数据库。
我们得到数据库为dvwa,随后我们就可以爆出他的表
发现有guestbook,users两个表,然后是开始爆破字段。
-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
我们发现报错了,这个报错是因为单引号被转义了,变成了\'
所以我们要将表名字的user更改为16进制
7573657273 然后我们加上0x,因为0x是16进制的标识符
得到了他的字段,现在只需要将他的解出来就可以了
然后我们切换到high,查看一下他的源代码,我们发现了他在sql语句后面添加了一个limit 1,这个语句是这样的,他只会显示一行,以此来防止多条数据的显示,我的思路是将后面的limit 1 给注释掉,用一个#因该就可以了
由于前面的打法和low一样。但是这个难度也挺特殊的
首先打开靶场
这个是题目,更具要求,我们点击这个链接,我们会来到一个新的地方
我们尝试输入一个1,看看有没有什么反应。
发现这个页面没有什么特殊的变化,但是刚刚那个页面出现了回显
然后我们更具原来的注入方法进行注入,由于之前已经写过了,所以我们直接跳一下
然后我们得到了他的表,开始爆字段
可能有人会疑惑为什么我要在#号的前面加一个; 是这样的,我们看到源代码
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";
因为我们要过滤掉limit 1 ,所以我们要用注释符将limit 1 注释掉,但是我们发现在limit 1;"的后面还有一个; 但是他被注释掉了,所以如果我们不加;的话,则这个sql语句就是不完整的。
这也就是我们加;的原因。
查看字段的数据
以上就是关于SQL注入的教程
dom型xss差不多是这样的:不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,大部分属于反射型。
反射型呢属于是:交互的数据不存在数据库中,一般都是一次性的。
然后我们看到题目:
emmmm,送分了,直接在url那里更改一下?default=English,我们将English更改为xss的脚本
然后enter,就可以看到我们的js脚本运行成功。
然后我们将难度跳到medium,在看源代码,发现他这次有过滤了
分析代码,如果我们的参数中存在