攻防世界web进阶 CAT

题目描述和此题关系不大,刚开始尝试输入www.baidu.com时,并没有返回任何的结果,可能是没有进行域名解析。后来尝试输入**127.0.0.1**,ping通了。那么,就利用管道符尝试一下,能否遍历出服务器当前目录下的文件,返回Invalid URL,依旧是没有获得什么有用信息。

看到域名有%7C这样的url编码,所以就尝试了一下是否能用宽字节(大于等于%80)这样的编码进行注入,果然发现了报错。把报错的<title>放到百度搜索,发现原来这是django的典型报错(从报错信息中,也能看出是django)。对于报错原因,自己分析了一下,可能是因为服务器在收到像%80这样的宽字节时,无法解析而报错。

据说,在比赛的时候放出了这么一条hint:RTFM of PHP CURL===>>read the fuck manul of PHP CURL???

1
2
3
4
5
6
7
CURL是一个利用URL语法在命令行方式下工作的文件传输工具。curl是一个利用URL语法在命令行方式下工作的文件传输工具。

它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传,

上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器, 通过http代理服务器上传文件到FTP服务器等等,功能十分强大。

原来php默认并不进行此项功能的扩展,但还是有的,只是没有让它生效罢了。打开PHP安装目录,搜索以下三个文件 ssleay32.dll、libeay32.dll和 php_curl.dll,

上面的方法,只能传输字符串,但是使用这样的语句file=@FILE_PATH,就可直接调用CURL传输文件:

是怎么看出用这个路径地址的呢,django的settings.py(配置文件)一般存在于你创建的文件目录下的同名目录。然后通过配置文件的报错,我们找到数据库的信息,database.sqlite3,还是利用CURL传输文件,最后通过查看数据库文件的报错得到flag。

这题也反思出一个安全问题,之所以会有如此多的报错,还是开发人员的不严谨导致,settings.py中的Debug模式开启时,如果代码出现了bug,浏览器和控制台就会打印报错,帮助开发者更快的找到错误,在开发完毕的时候就需要关闭Debug模式(Debug=false),避免出现源文件的泄露。

Author: De-m0n
Link: http://De-m0n.github.io/2019/12/17/CAT/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
  • 支付寶
Catalog