Web渗透练习技巧N则(一)

  • A+
所属分类:WEB安全

简介

对于我们的生活来说,web的重要性不言而喻,因为这个看起来简单的几个页面与我们的生活的联系越来越紧密,我们有更多的个人信息由其承载往来于服务器和我们的电脑之间,正因为如此,web的安全也变得越来越重要,越来越不能被我们忽视。作为一个网络安全的工作者/爱好者,研究web的安全性也变得越来越重要。

那么,接下来的几篇文章,我将陆续给大家介(ban)绍(yun)一些国外的大牛的web渗透的奇技淫巧,当然这其中肯定也会包括一些基本的但是比较容易被我们忽视的点,希望对研究web或者对web有兴趣的同学有点帮助。

前言

练习过程中需要的源文件可以在这里下载

链接:http://pan.baidu.com/s/1i3Dt797密码:17fn

环境可能用到的软件有(除了环境软件外,其他软件用到后会有另外的简介):

XAMPP(Apache)
MySQL
Hydra(win)
John theRipper等

因为内容比较多,一篇文章写完可能有点多,所以本系列分为几篇文章,文章中所需要的。闲话不多说,开搬!

练习一:机密文件探秘

从过去甚至一直到今天,通过隐藏的方式来保护我们的机密文件仍然是一种比较主流的方式。其实这也就意味着除了一般意义上的不让大家知道隐藏地址之外没有加上任何的防护措施,只要我们能找到这个隐藏的地点,也便很容易就可以访问到这些“机密”的数据。

对于一些网站来说,防护的措施一般就是不在主页或者其他子页面上包含任何有关机密页面的地址,以防止被蜘蛛很快捉到从而失去机密性。比如很多网站隐藏自身的登录页面或者一些不对外开放的svn页面或者git页面等等。其实我们可以通过查看网站的robots.txt文件来查看主站的禁止被爬的内容,说不定里面就包含了什么不可告人的秘密。

现在,大家就可以上传一些文件到DeepDataHiding,然后通过这种方式尝试找一下了。

(ps:练习一确实有点水…大家可以耐心慢慢看)

练习二:字典在手,天下我有

对于一般的渗透来说,没有了思路之后往往就只剩暴力这一条路了。所以,除了一身好运气之外,有一套高质量的字典就显的尤为重要。因为字典这个东西因人而异,我就不上传我自己的字典了,这里我给大家提供一个字典生成的不错的命令行工具——JohntheRipper。

工具的地址:http://www.openwall.com/john/ 

Git地址:https://github.com/magnumripper/JohnTheRipper 

JTR本来是一款密码破解工具,但是这里作者并没有按照其原本的功能来使用它,而是利用这个强大的工具生成字典文件。

这里给出简单的生成介绍,以下是生成命令

john-mmx–incremental=<mode> –stdout > filename

如果你是kali用户,这里的john-mmx请直接使用john替换,并且无需安装,kali是自带JTR工具的。<mode>可以指定All(包含所有字符),Digit(纯数字),Lanman(字母,数字和一些特殊字符),Alpha(仅字母)。

关于该工具其他的用途(破解),大家可以网上搜一下,或者直接看git的使用说明,如果有需要,我们可以单出一篇文章介绍这款不错的工具。

练习三:善用搜索引擎

这里说的还是GoogleHacking,不过这次说的内容是用户名和密码。对于我们需要的用户名和密码,如果自己生成的字典没用,我们倒不如试试用搜索引擎试一下,我们可以用filetype指定搜索类型,比如这里我搜索filetype:lstpassword,结果如下

当然,我们这里可以根据不同的情况指定不同的关键词,你可能会有意想不到的收获;)

练习四:干掉HTTP认证(HTTPAuth)

在这次的练习中,我们将用到Hydra和我们已经获取到的用户名密码字典文件。

这里还是简单说一下Hydra:

-L <usrlistpath> 指定user字典地址
-l <user> 指定单个user
-P <passlstpath> 指定passwd列表地址
-p <password> 指定单个password

接下来,我们需要指定host地址,这里当然是127.0.0.1,然后使用http-get或者http-post指定连接模式,然后是指定用户名和密码地址,最后跟上你访问需要密码的路径,如果没有这里可以指定根目录。整条命令如下所示:

hydra.exe-L D:/WebsiteHacking/FormCracking/usrnames.txt -P D:/WebsiteHacking/FormCracking/passwords.txtlocalhost http-get /HTTPSecurity/

当然,前提是我们需要先配置一下这个站点让其需要认证。我们需要使用htpasswd.exe在命令行下创建一个密码(具体方式请自行Google)。这里还需要编辑一下.htaccess文件

AuthTypeBasic
AuthName"Admin Area"
AuthUserFilepathauthorized.htpasswd
Requireuser …

你可以指定一个用户名访问一个页面,同时也可以指定多个不同的用户名访问不同页面的权限,来不断练习这个基础的认证方式。

练习五:干掉POST认证

本次练习所需要的用户名密码字典都在FormCracking文件夹里,因为是测试练习,所以我们默认的密码尽量使用简单一点的。

这里仍然是使用Hydra:

hydra –Lpath/FormCracking/usrnames.txt -P path/FormCracking/passwords.txt 127.0.0.1http-post-form “/FormCracking/index.php:username=^USER^&passwd=^PASS^:Oops”

与上一个练习不同的是,这条命令指定了一些需要提交用户名密码的字段,这些字段名称主要来自于我们测试网页中需要输入用户名密码的输入栏的属性

另外一点不同是,命令中跟在地址后面的参数与地址之间是需要用冒号(:)隔开的,除此之外,因为我们需要区别密码正确错误的时候的不同的响应,这里我们指定”Oops”作为当我们登录失败的关键字。当然,这里我们仍然需要指定^USER^和^PASS^字段以使得我们的字典数据可以填充到请求中。

这里说一下,关于暴力的工具有很多,其中优秀的很多,例如轻量级的Hackbar插件,基于java的Burpsuite等等,但是我们这里力求找一些不同的思路和方法,所以请理性看待。:)

练习六:修改字段

接下来的练习是在ParameterTampering文件夹中进行的。

我们会发现在这个文件夹中有三个php文件,这次练习有两个目标,都是要求是在不查看三个php源代码的前提下完成的。

第一个是要求是用浏览器打开login.php然后不需要顾及任何用户名密码正确登录从而正确跳转到member.php页面。

关于这个练习我们给出一点提示:修改页面的字段。

关于这个问题,一开始可能很多人觉得很奇怪,觉得不可能会有页面犯这么蠢的错误,把如此重要的数据直接放在前端只加一个<inputtype=hide>就算了,但是事实是,确实有人这么干了。举个例子,在很久很久以前,一个古老的第三方网站在输入金额然后要向PalPay跳转的时候就将这个重要的数据加了hide然后放在了页面中,然后你想付多少钱就可以改成多少钱,据说没有人改成比原价高的数据付钱。有图为证:

第二个要求是通过修改Referer属性来直接登录member2.php,这里我们可以使用firefox的一个插件,TamperData,当然也可以使用神器Burpsuite,随大家喜欢。虽然可能只是一个小小的头字段,但是一直到今天,仍有一些小的登录后台是通过这种方式来接受认证的,这一点,我们还是需要记住,说不定哪天就用到了呢。

练习七:暴力锁定账户

如果我们有一个如下的账户锁定机制(基于PHP/MySQL):

//Connecting to the MySQL database
mysql_connect("localhost","root", "") or die(mysql_error());
 mysql_select_db("userdb") ordie(mysql_error());
//Loading the current number of attempts that the user have used
$attempts= mysql_fetch_array(mysql_query("SELECT attempts FROM users WHERE username= '" . $_POST['username'] . "'"))[0];
 
//If thelogin credentials are incorrect – add 1 to attempts variable
else if($_POST['pass'] != $info['password']) {
        $attempts +=1;
        echo "This is your " .$attempts . " attempt!";
 
//Stopthe rest of the code from executing if the user have attempted to login withincorrect details at least three times
if($attempts > 2) {
    die("</pre>
<h1>Thisaccount is locked. Contact the administrator [email protected]</h1>
<pre>");
        }
 
//Update the attempts column of the particular user in the database
 
mysql_query("UPDATEusers SET attempts=" . $attempts . " WHERE username = '" .$_POST['username'] .  "'");

如果上面的代码就是我们的登录机制,而我们的登录又是依赖于一个WordPress或者Joomla的一个插件,那么就可能存在恶意的人通过多次输入错误密码来锁定他想要锁定的账户。这样肯定不是我们想要的。

一个解决的措施是锁定登录的IP地址同时仅仅锁定该账户一段时间而不是永久锁定。

这里提供一个解决方式(基于PHP/MySQL)如下:

//folderAccountLockout2
//Inject SQL code
CREATETABLE users(
IDMEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
usernameVARCHAR( 60 ) ,
passwordVARCHAR(60 ) ,
attemptsTINYINT,
timeTINYINT)

我们如果这个时候再向数据库增加一个账户,那么就可能会是这个样子(因为代码放不开,样式稍加了调整):

$insert= "INSERT INTO users (username, password, attempts, time)
 VALUES ('".$_POST['username']."','".$_POST['pass']."', '" . "0'"  . " , '-1'" . ")";  
                                                            //attempts   
                                                                           //time whenlockout was set

我们使用数字-1来声明账户未被锁定,代码可以如下所示:

if($attempts > 2) {
// Ifthere no lockout, create one and notify when the account is going to be active
if($info["time"] == "-1" ) {
   $expectedRelease  = date("H") + 1;
mysql_query("UPDATEusers SET time=" . date("H") . " WHERE username = '" .$_POST['username'] .  "'");
    die("</pre>
<h1>Thisaccount is locked. Contact the administrator at [email protected]"
.". It is going to be active at: ". $expectedRelease . " o'clock</h1>
<pre>
");
                }
//Otherwise, remove lockout
    else if ($info["time"] != -1&& date("H") > intval($info["time"])) {
    mysql_query("UPDATE users SETtime='-1' WHERE username = '" . $_POST['username'] .  "'");
        $attempts = 0;
      }
else {
//If theaccount already has locked out and one hour has not passed, just say it islocked and quit
      die("</pre>
<h1>Thisaccount is locked. Contact the administrator [email protected]</h1>
<pre>
");
        }

这是一个简单的账户错误三次之后的锁定机制,当然该锁定也只是锁定一个小时,过了一个小时也就自动解锁了。这段代码也可以在改练习的文件夹中找到。

总结

这篇文章介绍了很多特别基础也特别简单但是容易被我们忽略的点,最后一个练习也是重点在于提出解决措施,因为这篇文章也是作者开题第一篇,所以思路上也不是特别清晰,不过总的来说对于一个初学者还是大有裨益的。因为来这里看文章的人各个层次的都有,所以权衡再三,这篇文章我还是搬了过来。希望能对有些人有所帮助。

文章的练习是由浅入深的,大家可以期待接下来的文章了,等不及的同学也可以过去直接看英文原版:http://resources.infosecinstitute.com/category/hacking-2/ 

未完待续…

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: