noxCTF web writeup

Reference

What is your reference again?
http://chal.noxale.com:5000

打开页面发现:


检查网络请求发现访问了http://chal.noxale.com:5000/check_from_google
将HTTP的Referer头改为www.google.com 得到base64编码的字符串:


解密后得到flag。

MyFileUploader

This is my new file uploader server. I bet you can't hack it!
http://chal.noxale.com:8079

随便拖一个文件上传,得到:


提示文件名需包含.jpg/.png/.gif。于是我们上传一个jpg文件,文件被上传至http://chal.noxale.com:8079/uploads/目录。上传.png.php时,php后缀会被自动抹去。
直接访问该目录,发现可列目录且存在名为Don't open的文件夹,打开发现htaccess:


于是构造名为a.png.cybr3的一句话:


发现shell可以成功被执行。在当前目录下找到flag:

Dictionary of obscure sorrows

There are a lot of obscure sorrows in our world. Your job is not to find those that are plain in sight; You need to seek further, look deeper. Find the word that can not be written. The most obscure sorrow of them all.
http://54.152.220.222/

打开网页发现里面有很多元素可以点,点开的url形如http://54.152.220.222/word.php?page=Lalalalia。看到这个url首先想到php文件包含。通过filter伪协议读取文件无果。

在page参数中随意输入字符串,得到Query returned empty

不添加page参数访问该网页,得到Missing RDN inside ObjectClass(document)

通过谷歌以及题目网页标题,结合报错可确定后台运行着名为LDAP的协议。
继续谷歌相关资料:
owasp
doc
进一步找到何为RDN

document对象中有一下RDN:

逐个尝试对这些对象进行注入:

GET /word.php?page=*)(cn=*    ⇒ Query returned empty
GET /word.php?page=*)(description=* ⇒ Normal response
GET /word.php?page=*)(seeAlso=*  ⇒ Query returned empty
GET /word.php?page=*)(l=*   ⇒ Query returned empty
GET /word.php?page=*)(o=*   ⇒ Query returned empty
GET /word.php?page=*)(ou=*  ⇒ Query returned empty
GET /word.php?page=*)(documentTitle=*  ⇒ Query returned empty
GET /word.php?page=*)(documentVersion=*  ⇒ Query returned empty
GET /word.php?page=*)(documentAuthor=*  ⇒ Query returned empty
GET /word.php?page=*)(documentAuthor=*  ⇒ Query returned empty
GET /word.php?page=*)(documentPublisher=* ⇒ Normal response

得到两个normal response。由于我们知道flag的格式为noxCTF{},故我们分别使用如下payload:

http://54.152.220.222/word.php?page=*)(description=*nox*
http://54.152.220.222/word.php?page=*)(documentPublisher=*nox*

后者返回Query returned empty,而前者返回的html页面中包含flag:

hiddenDOM

I decided to create a tool that searches for hidden elements inside a web pages. Few days ago someone told me that my website is not so /secure/... Can you check it yourself ?
http://13.59.2.198:5588

打开后首先发现主页有一段混淆过的xss代码:

var _0x3bc3=["\x6D\x61\x69\x6E\x5F\x66\x6F\x72\x6D","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x69\x6E\x70\x75\x74","\x63\x72\x65\x61\x74\x65\x45\x6C\x65\x6D\x65\x6E\x74","\x6E\x61\x6D\x65","\x65\x78\x70\x72\x65\x73\x73\x69\x6F\x6E","\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65","\x74\x79\x70\x65","\x74\x65\x78\x74","\x70\x6C\x61\x63\x65\x68\x6F\x6C\x64\x65\x72","\x2F\x3C\x5B\x5E\x3C\x3E\x5D\x7B\x31\x2C\x7D\x68\x69\x64\x64\x65\x6E\x5B\x5E\x3C\x3E\x5D\x7B\x31\x2C\x7D\x3E\x2F"];var _frss=document[_0x3bc3[1]](_0x3bc3[0]);var _xEger=document[_0x3bc3[3]](_0x3bc3[2]);_xEger[_0x3bc3[6]](_0x3bc3[4],_0x3bc3[5]);_xEger[_0x3bc3[6]](_0x3bc3[7],_0x3bc3[8]);_xEger[_0x3bc3[6]](_0x3bc3[9],_0x3bc3[10])

首先格式化代码:

var _0x3bc3 = ["main_form", "getElementById", "input", "createElement", "name", "expression", "setAttribute", "type", "text", "placeholder", "/<[^<>]{1,}hidden[^<>]{1,}>/"];
var _frss = document[_0x3bc3[1]](_0x3bc3[0]);
var _xEger = document[_0x3bc3[3]](_0x3bc3[2]);
_xEger[_0x3bc3[6]](_0x3bc3[4], _0x3bc3[5]);
_xEger[_0x3bc3[6]](_0x3bc3[7], _0x3bc3[8]);
_xEger[_0x3bc3[6]](_0x3bc3[9], _0x3bc3[10])

发现是一个不难解密的混淆,手工恢复一下:

var _frss = document["getElementById"]("main_form"); /* <form id="main_form" action="index.php" style="position:sticky;"> */
var _xEger = document["createElement"]("input"); /* <input> */
_xEger["setAttribute"]("name", "expression"); /* <input name="expression"> */
_xEger["setAttribute"]("type", "text"); /* <input name="expression" type="text"> */
_xEger["setAttribute"]("placeholder", "/<[^<>]{1,}hidden[^<>]{1,}>/"); /* <input name="expression" placeholder="/<[^<>]{1,}hidden[^<>]{1,}>/" type="text"> */

解密完以后我们发现这段代码用于生成一个新的表单字段expression

<form id="main_form" action="index.php" style="position:sticky;">
<input name="expression" placeholder="/<[^<>]{1,}hidden[^<>]{1,}>/" type="text">

解密完这个js后继续回过头看网站。网站中的一个输入框提示Find hidden elements (URL)。输入http://chal.noxale.com:5588/后得到如下结果:

结合上面的expression,猜测此功能是访问一个网页并找到其中含有hidden字符串的元素。我们通过127.0.0.1检测ssrf:

发现结果与刚才的结果一样。于是,我们尝试根据提示使用file协议访问/var/www/html/flag.txt

发现登录框还在,但是没有内容。这意味着flag.txt中没有包含hidden的元素。根据flag的格式,我们为我们的请求添加expression参数并设置其值为/nox.*/,得到flag:

后记

这个比赛最重要的就是让我知道了有一个叫做LDAP的东西可以注入。这似乎是个挺久远的漏洞了但是竟然没听说过,还输需要补充基础知识Orz
比赛中还有一道题PSRF没搞出来,比赛时有三个队伍做出来,坐等国外dalao的wp。

点击收藏 | 0 关注 | 1
  • 动动手指,沙发就是你的了!
登录 后跟帖