Natas25 Writeup(目录遍历、头部注入)
Natas25:
打开页面,是一段引文以及可以选择语言的下拉list。查看源码,发现关键代码:
function setLanguage(){ //选择语言
/* language setup */
if(array_key_exists("lang",$_REQUEST)) //如果请求提交的参数中存在lang
if(safeinclude("language/" . $_REQUEST["lang"] )) //检查输入
return 1;
safeinclude("language/en");
} function safeinclude($filename){ //检查输入参数
// check for directory traversal 检查目录遍历
//strstr() 函数搜索字符串在另一字符串中是否存在,如果是,返回该字符串及剩余部分,否则返回 FALSE。
//str_replace($search,$replace,$subject):将$subject中的$search 都被$replace替换
//下面代码的意思是,如果filename中含有"../",表明受到了目录遍历攻击,则将filename中的"../"替换为"",以防止目录遍历
if(strstr($filename,"../")){
logRequest("Directory traversal attempt! fixing request.");
$filename=str_replace("../","",$filename);
} // dont let ppl steal our passwords 文件访问控制
//下面代码的意思是,如果filename中含有"natas_webpass",表明用户试图访问非法文件,则退出程序
if(strstr($filename,"natas_webpass")){
logRequest("Illegal file access detected! Aborting!");
exit(-1);
}
// add more checks... if (file_exists($filename)) { //检测目录是否存在
include($filename);
return 1;
}
return 0;
} function logRequest($message){ //请求日志
$log="[". date("d.m.Y H::i:s",time()) ."]"; //时间日期
$log=$log . " " . $_SERVER['HTTP_USER_AGENT']; //加http_user_agent
$log=$log . " \"" . $message ."\"\n"; //加上message
$fd=fopen("/var/www/natas/natas25/logs/natas25_" . session_id() .".log","a");
fwrite($fd,$log); //将日志信息写入文件
fclose($fd);
}
首先要将注入点分析清楚:一共有三个注入点
.$_REQUEST["lang"] 即get/post注入
.$_SERVER['HTTP_USER_AGENT'] http头部信息注入
.session_id() cookie注入
23条注入存在于logRequest函数中,能够发生的前提是safeinclude函数检测到了非法输入,而且必须是“../”这种非法输入,若是“natas_webpass”这种的话会直接exit(-1)。
这里第一条过滤非法输入语句(将"../"替换为"",以防止目录遍历)存在漏洞,因为if是一次性把所有符合的替换掉,构造复合的参数即可绕过,例如:....//或者..././。这里可以绕过的根本原因就在于没有使用while语句,没有想到过滤一次后依然存在../,所以过滤应该持续检测直到非法字符不再出现。
第1条直接注入比较困难,原因在于即使用..././绕过了第一条检测,第二条检测也很难直接将"natas_webpass"目录下的密码给include进来,所以应该思考利用第2或3条注入,2或3两个注入必须触发“../”检测,随后logRequest($message)将信息写入/var/www/natas/natas25/logs/natas25_session_id().log。
很容易得到新思路,将能够显示密码的php语句写入到session_id().log之中,随后在safeinclude中将其include进来,可以考虑$_SERVER['HTTP_USER_AGENT'] 注入,在header中写入php语句(以下任选一句):
<?php include("/etc/natas_webpass/natas26")?>
<?php echo file_get_contents("/etc/natas_webpass/natas26")?>
<?php passthru("cat /etc/natas_webpass/natas26")?>
<?php readfile("/etc/natas_webpass/natas26")?>
这样做以后,只要触发第一条过滤机制,密码就会在.log被include进来时显示,考虑如何既触发../又能够将.log包含进来:GET: lang=..././..././..././..././..././var/www/natas/natas25/logs/natas25_session_id().log即可
流程:GET输入触发第一次过滤,开始记录日志,headers中http-agent的php执行语句被记录到/var/www/natas/natas25/logs/natas25_session_id().log。同时输入被过滤为../../../../../var/www/natas/natas25/logs/natas25_session_id().log。file_exists()检测正确,将其include进来,触发php语句,显示flag。
有两个地方需要注入,即get/post 和 headers。
flag:oGgWAJ7zcGT28vYazGo4rkhOPDhBu34T
总结:
1.过滤机制一定要达到在任何情况下确定不包含非法字符(考虑周全)。
2.对用户的输入(不一定是真的“输入”,只要是用户传过来的信息)都要做防注入或过滤处理。
3.做题的思路很重要,一是要注意过滤机制是否不够严格,而是碰壁后应该全局思考所有的注入点,只要是自己能篡改的信息都要思考能否注入,而且可能是多个注入点联合使用。
参考:
https://www.cnblogs.com/ichunqiu/p/9554885.html
https://www.cnblogs.com/liqiuhao/p/6883356.html
Natas25 Writeup(目录遍历、头部注入)的更多相关文章
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- [cyber security][php]pfSense目录遍历漏洞分析
0×00 导言 pfSense是一个基于FreeBSD,专为防火墙和路由器功能定制的开源版本. 在本文中,我们将向大家介绍在pfSense的2.1.3以及更低版本中的CVE-2014-4690漏洞:对 ...
- 小白日记37:kali渗透测试之Web渗透-手动漏洞挖掘(三)-目录遍历、文件包含
手动漏洞挖掘 漏洞类型 #Directory traversal 目录遍历[本台机器操作系统上文件进行读取] 使用者可以通过浏览器/URL地址或者参数变量内容,可以读取web根目录[默认为:/var/ ...
- 文件包含上传漏洞&目录遍历命令执行漏洞
文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create_function() array_map() arr ...
- 跨平台的目录遍历实现方法(windows和linux已经测试)
dirent.h是gcc下的一个头文件,在windows中是没有的.这个文件中封装了几个对目录进行操作函数: static DIR *opendir (const char *dirname);sta ...
- paip.c++ qt 目录遍历以及文件操作
paip.c++ qt 目录遍历以及文件操作 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/a ...
- Kali学习笔记31:目录遍历漏洞、文件包含漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 目录遍历漏洞: 应用程序如果有操作文件的功能,限制不严 ...
- 【代码审计】大米CMS_V5.5.3 目录遍历漏洞分析
0x00 环境准备 大米CMS官网:http://www.damicms.com 网站源码版本:大米CMS_V5.5.3试用版(更新时间:2017-04-15) 程序源码下载:http://www ...
- HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)
参考文献: http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地 ...
随机推荐
- PHP 错误与异常的日志记录
提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到 ...
- 吴裕雄--python编程:CGI编程
什么是CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户 ...
- RESTFUL Level&HATEOAS
1.什么是RESTful? REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化." Roy Thomas Fie ...
- 模型压缩之Channel Pruning
论文地址 channel pruning是指给定一个CNN模型,去掉卷积层的某几个输入channel以及相应的卷积核, 并最小化裁剪channel后与原始输出的误差. 可以分两步来解决: channe ...
- HEALER
项目介绍: 专注是一款时间管理应用,可以帮你管理时间,制定计划,让你保持专注,从快节奏的当下抽离,进入另一个平和安静的时空,以获得更好的工作和学习效率. 主模块(专注):设置分类.专注时长.简介,点击 ...
- angularJS进阶阶段(4)
angularJS进阶阶段(4) 编译器/$compile 编译器$compile是一个AngularJS的内置服务,它负责遍历DOM树来查找匹配指令, 并调用指令的实现代码进行处理. HTML编译包 ...
- 5.7之sql_model
问题发生背景 今天在部署项目的时候发现,测试后台接口,直接报 500,仔细一看原来是操作数据库的时候报错了,在本地测试的时候是没遇到类似的问题,数据库的版本是一样的,后面查找资料,说是 MySQL 5 ...
- 《Java 8实战》读书笔记系列——第三部分:高效Java 8编程(四):使用新的日期时间API
https://www.lilu.org.cn/https://www.lilu.org.cn/ 第十二章:新的日期时间API 在Java 8之前,我们常用的日期时间API是java.util.Dat ...
- JSON parse error: Cannot deserialize value of type `java.util.Date` from String
DateTimePicker + @DateTimeFormat("yyyy-MM-dd HH:mm:ss")日期格式转换异常 最近在做的一个项目使用的日期格式是yyyy-MM-d ...
- 关于C++类中的三兄弟(pretect、private、public)
1.public修饰的成员变量 在程序的任何地方都可以被访问,就是公共变量的意思,不需要通过成员函数就可以由类的实例直接访问 2.private修饰的成员变量 只有类内可直接访问,私有的,类的实例要通 ...