第七季极客大挑战writeup和swup web400

php is fun

源码审计,感觉我还是比较喜欢做审计的题目,不用脑筋~~

代码就是可以将http://127.0.0.1/开头的网页内容写入任意文件中。当然没有过滤后缀,可以选择上传php文件。

容易想到path变量我们是可控的,可以将shell写到path变量中。然后,再次访问之,便可写入shell。

Payload为:

注意,file变量里面都是要进行二次编码的(访问了两次web接口)。glob函数列目录,已经成了套路~~

lol web

同样是一个审计题目:

  • 存在文件任意下载漏洞:

URL为:

这样可以下载到源码

  • 审计代码,发现存在注入:

api.php文件,这句话存在错误:

根据运算符优先级,上面的语句等同于:

所以只需$img_num为整数即可。$img_first参数处存在注入。

  • 写入shell

payload:

查看目录得到flag:

Only number never lies to you

这个题目让我学到了ini后门技术。看了看前段时间的xdctf writeup,用到了这个。

首先,根据提示,爆破目录:

得到了一个相当于私有目录。进去发现是一个上传页面,试了试ini后缀,bingo。顺便说一下还有一个上传题目是要求上传phtml,试了半天。

  • 首先上传一个webshell_script12345.ini文件,里面有我们的shell内容。
  • 然后上传.user.ini文件

内容如下:

  • 最后访问upload_file.php,即可getshell。

连上蚁剑,得到flag:

皓宝宝的留言板

过滤了许多关键字,用字符串拼接绕过,payload为:

127.0.0.x

这个题目真是溜,x-forwarded-for:127.0.0.x伪造,用burpsuite爆破x即可。搞了半天,最后在结果中搜索flag,得到~~~

Social Engineering

一开始到社工库里面找,找了一些信息~ 未果~ 是我想的太复杂了,去贴吧发现一个肖力吧。里面有qq,访问空间。在留言板上发现一句话flag是域名注册人的电话号码。whois得到flag~~

pentest(web500)

今年又出了个WordPress,但是感觉没有去年的题目精彩~给出了提示,graityforms插件漏洞。于是,顺利上传shell。

连上蚁剑,要想办法突破open_basedirdisable_functions

可以小小总结下:

绕过open_basedir

列目录: 用https://www.leavesongs.com/PHP/php-bypass-open-basedir-list-directory.html

读写文件,只能是php自身的exp了。在exploit里面搜寻。

绕过disable_functions

  • 使用mail函数: shellshock漏洞和LD_PRELOAD环境变量。
  • 黑名单遗漏,使用遗漏的php执行命令函数。
  • ImageMagick组件漏洞。

phpinfo看了后,发现禁用了mail函数,gg。遗漏了一个pcntl_exec函数,但是没开--enable-pcntl再次gg。

最终翻到个可用的绕过open_basedir的Payload:https://www.exploit-db.com/exploits/10557/。成功获取flag。

由于这个是需要软链接的,我无法删除这个flag文件。和出题人交流,说可以命令执行。我瞅了半天没看出来,作罢~ 等官方wp出来,看看有啥新思路。

内网渗透,木有代理成功,搁置了。

swpuctf web400

隔壁发现一个swpuctf,去看了看web题目,难度还是不错的。只不过我偏爱审计题,于是做了做这道。其余的题目,服务器环境似乎不太好,老是崩,就没做了。题目质量还是不错滴。

看看这个有意思的审计题。

提示说有源码,御剑扫了下,发现/web/web.zip。开始了审计过程。

变量覆盖漏洞

首先看看common.php文件,下面这段代码,存在明显的变量覆盖问题。

利用思路:

  • 直接覆盖_SESSION。但是防御了。并且防止了注入。

看看有啥可以变量覆盖的利用地方。

sql注入

由于参数进来,都被addslashes过滤了单引号~ 想要注入,必然要结合变量覆盖漏洞了。看看哪里不用单引号~~

看看riji.php处,有个id变量,没用单引号进行查询:

于是,就要想办法让php不给id初始化复制:

md5 hash扩展攻击

api.php明显看到了不一样的代码,hash扩展攻击:

贴心的给出了(=-=)!!字符串,让我们证明自己攻击成功了。

  • checkdata都是我们可控的数据。这符合md5扩展攻击的条件。
  • $usernameadmin
  • salt我们不知道,但知道它的长度为16位。
  • 现在缺少一个md5值。在找回密码的地方,我们可以得到md5($salt)的值。

综合上述条件,我们可以开始扩展攻击了。

攻击过程

  • 先注册一个账号,并且登录
  • hash扩展攻击成功后,将自己之前注册的账号删除。(userid在返回的cookie中)
  • 利用id变量进行注入。

hash扩展攻击,用到了hash_extender工具。那个HashPump工具,不能只给salt的md5值,找了半天其他工具。

payload如下:

成功删除注册用户后,注入得到flag:

这个题目非常不错滴~没有脑洞~~

compose300

有意思的编程题,先解压了几次给的文件。在linux下,用file查看,发现每一层的压缩模式都不一样。有tar,zip,bzip2,gzip。凭着自己以前写过shell,于是有了以下脚本:

再次学习了shell编程。

android RE

出的两个Android逆向都还挺简单的。第一个用ida分析下so文件。有个这段逻辑:

首先比较用户名。syc这个变量的数据,可以在.data中找到。然后比较密码,与table这段数据进行隔一个比较。

写个python,得到结果:

另一个直接用jeb,扣出核心代码(都是java,通俗易懂)。写个java程序,发给出题者就行。发邮件时,发现gmail不能带jar后缀的附件。于是,去掉后缀发送。

Ernie

到了逆向二进制的部分了,最近学pwn,对linux逆向感觉不错,正好有了这个题目。

找入口处,在call ___libc_start_main 上面的函数就是了。

看看逻辑,一开始将输入的key每两位当做十六进制解析成字符:

然后和_6sY2tcY3iY7sem_字符串比较。

因此,写个python算出key:

最后,根据key输入flag,ida逻辑为:

v3为luckynum(6)~~
再用Python,输出flag:

pwn pwn pwn

学以致用,刚好放出一个基础的pwn题目,简单易懂~~

漏洞点

buf变量存在栈溢出:

判断长度时,使用\0作为标示。但复制时,用\x0A(换行符)做标示。于是,产生栈溢出。

漏洞利用

题目中step1,step2,step3三个函数提供了system("/bin/sh"),需要一步步来。 我的方法是:

  • 通过栈溢出,运行step1,回到main;
  • 再次栈溢出,运行step2, 回到main;
  • 再次栈溢出,运行step3, bingo;

str为全局变量,因此可以这么做。最终拼接成system("/bin/sh")

exploit代码为:

最后得到flag:

总结

选取了两个ctf比赛有趣的题目记录了下,学习到了一些知识。极客大挑战不难,可以好好练习下。简单的学到了一些知识,不错~~ 附上几个图。