[61dctf]babyphp
以前做过。按理说应该有git泄露的..这次死活找不到:)
更新:平台给了hint说题目已经修复了,找到了:)
通过git泄露出来的index.php源码如下:
其中assert
是个危险函数,其原型为
如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。
payload1:
payload2
得到flag:
其实这是CSAW2016原题..
[61dctf]inject
|
|
访问:http://web.jarvisoj.com:32794/index.php~,得到源代码:
[61dctf]admin
扫到robots.txt发现Disallow: /admin_s3cr3t.php
。
访问并用burp抓包,如下:
在cookie字段加上admin=1
,得到flag:
WEB?
有一个check功能,输入错误的密码会提示“Wrong Password!!”,查看源代码,有个app.js。将该js文件格式化后在里面查找字符串“Wrong Password!!”,如下:
可以看到有个checkpass(e)函数,定位到该函数处。
|
|
定位到 checkpassREACTHOTLOADER 处:
发现是一个线性方程组。
得到flag:
PHPINFO
题目入口:http://web.jarvisoj.com:32784/
题目源码:
session.serialize_handler
容易想到wooyun上的文章《PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患》。通过phpinfo页面,我们知道php.ini中默认session.serialize_handler为php_serialize,而index.php中将其设置为php。这就导致了seesion的反序列化问题。
由phpinfo()页面知,session.upload_progress.enabled为On。当一个上传在处理中,同时POST一个与INI中设置的session.upload_progress.name同名变量时,当PHP检测到这种POST请求时,它会在$_SESSION中添加一组数据。所以可以通过Session Upload Progress来设置session。可以看看这里:有趣的php反序列化总结
先把下面代码保存为test.html。
接下来考虑序列化的问题。
payloay1:将xxxxx替换为print_r(scandir(dirname(__FILE__)));
,得到序列化结果:
为防止转义,在引号前加上\
。利用前面的html页面随便上传一个东西,抓包,把filename改为如下:
注意,前面有一个|
,这是session的格式。
接下来就是去读取 Here_1s_7he_fl4g_buT_You_Cannot_see.php
由phpinfo可知当前的路径为/opt/lampp/htdocs/
将xxx处改为:
之后步骤如前,将filename改为:
得到flag:
api调用
在《小试XML实体注入攻击》中已经提过。
抓包改包,将Content-Type
改为application/xml
,然后post数据如下:
得到flag:
Easy Gallery
随手测试一下功能,比如点开submit,或者view页面,他们的链接如下:
随便改个参数:
结果报错:
所以这里应该有文件包含漏洞。结合submit的图片上传功能,可以猜想我们上传一个图片马,然后再去包含它。用edjpgcom制作图片,插入的一句话为:
若是直接用<?php … ?>,会失败,应该是服务器端做了过滤。上传后得到id。之后通过view功能得到图片的地址为
利用文件包含功能,加上%00截断绕过,访问:
得到flag:
Simple Injection
盲注。用户名处存在注入。根据是用户名错误
还是密码错误
来进行判断。过滤了空格,and,or。
- 过滤空格,可以用tab键绕过 %09
- 过滤or,可以用
||
来替代
附上exp:
密码进行md5解密:
最后flag:
Chopper
题目地址:http://web.jarvisoj.com:32782/
题目描述:小明入侵了一台web服务器并上传了一句话木马,但是,管理员修补了漏洞,更改了权限。更重要的是:他忘记了木马的密码!你能帮助他夺回控制权限吗?
查看源代码,图片的插入方式比较奇怪,如下:
点击管理员登陆
查看源代码得到提示:
结合前面图片的插入方式,我们构造下面链接访问:
通过扫描器知admin目录下有robots.txt,内容如下:
其中trojan.php.txt的内容是:
上述代码保存为php页面运行一下,得到Warning:
所以,webshell密码为360。
最后flag:
RE?
题目如下
下载下来后文件名为udf.so.XXXXX
,用mysql导入一下。具体过程如下。
将udf文件放到/usr/lib/mysql/plugin/
文件夹中:
登陆mysql后,加载help_me函数:
利用help_me函数:
利用udf再创建一个getflag函数。
得到flag:
IN A mess
题目地址:http://web.jarvisoj.com:32780/index.php?id=1
访问并查看源代码,发现提示:
访问index.phps,得到源码:
php弱类型绕过。当$a
为php://input,$data
可以通过php://input来接受post数据。$id
传一个字符进去,会被转换为0。对$b
,要求长度大于5,其次要求满足eregi
的要求和首字母不为4。可以设置$b
为%00111111
,这样,substr()会发生截断,在匹配时时进行eregi(“111”,”1114”)满足,同时%00对strlen不会发生截断。
访问:
发现链接自动补全,如下:
猜测是注入。注入过程如下:
字段数为3。
|
|
得到数据库名:test
|
|
得到表名:content
|
|
得到字段名:id,context,title
|
|
得到flag:
神盾局的秘密
打开页面后查看源代码,发现插入图片的位置处是base64加密结果。
将index.php
经base64加密后得到aW5kZXgucGhw
尝试访问:
得到index.php源码:
看到里面有个shield.php
,尝试用前面的套路去读取:
用以下脚本生成序列化串O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";}
:
访问
查看源代码,得到flag:
顺便附上showimg.php的源码:
Login
随便填一个密码。抓包得到提示:
要注入下列sql语句:
关键在md5($pass,true)
,若$pass
的值为ffifdyop,则经过md5转换后的值再经过php转为字符串后会变成'or'6蒥欓!r,b
,6的后面是一堆乱七八糟的字符,姑且记为xx吧。则最后的sql查询语句为:
成功闭合前面的单引号。填入password,得到flag:
更多内容可见:SQL injection with raw MD5 hashes
LOCALHOST
直接改X-Forwarded-For为127.0.0.1。得到flag:
PORT 51
用vps来请求,不然经过路由后可能请求端口就变了。在vps上:
flag: