iscc_2018 web题解

一切都是套路

开头比较客气,试了.bak .swp .svn都没有出来,结果发现是.txt,还是自己想复杂了
在这里插入图片描述

典型的变量覆盖漏洞,不用想了,直接先将 f l a g 的 值 赋 给 flag的值赋给 flag_200变量,然后利用die($_200)将flag打印出来。
在这里插入图片描述

你能绕过吗

在这里插入图片描述
id那里是只允许输入int吧我估计。。。什么十六进制或者其他的字母都认不出来,可能我水平不够想不到其他注入了。
我的做题习惯就是读不到源码就直接上php://filter/read=convert.base64-encode/resource=****
然后这题扫目录有发现config.php,但是怎么改都扫不出来,就有点放弃了,没想到最后会是index,改一下php的大小写,就很快出来
最后解码
在这里插入图片描述

Web02 100

那个发包的时候加一个client-ip:127.0.0.1就可以了
Great! ISCC{iscc_059eeb8c0c33eb62}

请ping我的ip 看你能Ping通吗?

这道题和ping ip倒是没有多大关系,主要是命令注入漏洞
在这里插入图片描述
因为看不到源代码,一开始只能试。
这样发现没反应,肯定不是直接在代码里面用shell_exec($cmd)之类的,做过DVWA的都知道,命令注入漏洞一般是已经在代码里面写了ping命令,然后只要给Ip变量赋值就可以直接执行命令了,所以试试给ip这个变量赋值发现真的可以。

然后就是尝试连接多条命令了,试了;、||、&&都不行,就试了一下%0a,linux不像Windows,每一行打完敲回车实际上是只有/n,而windows则是/r/n,所以换行符%0a一样可以在linux里面做分隔符分,分隔多个命令,先尝试cat源代码
在这里插入图片描述
果然一堆被过滤的符号,但是知道了%0a可以用,这个源代码也形同虚设了,接着探寻有没有可以nc的版本

发现有一个nc.openbsd
在这里插入图片描述
可惜不能连接。
算了直接扫目录,扫了/usr /bin /Document 什么的,扫到了/home 出来了一个flag
在这里插入图片描述
直接cat
在这里插入图片描述

Please give me username and password!

我发现这次出题人很爱用txt做备份文件…
一看index.php.txt就是源码
在这里插入图片描述
不好意思,虽然php是世界上最好的语言,可惜这个代码用了和is_numeric还有strcasecmp这种弱判断,肯定可以绕过了。
首先
符号只能判断数值是否相等,strcasecmp遇到数组会返回NULL,null=0,可以满足条件,is_numeric可以判断十进制,也可以判断十六进制,比999大的但是长度在4位以内的只能换个进制去想,1000或者1000以上的都可以用长度为3的字符串表示,1000=3e8,所以这道题两个地方构造绕过就可以了。
最后的URL为:
http://118.190.152.202:8017/?username[]=1&password=3e8
在这里插入图片描述

php是世界上最好的语言

一打开就是一段源码:
在这里插入图片描述

红色箭头位置是要求md5值求出来为0
如果md5开头是0e的字符串,因为0e在比较的时候会将其视作为科学计数法,所以无论0e后面是什么,0的多少次方还是0。由于在php里面是弱语句,而md5()这里的东西算出来如果用和0比较,所以可以通过==0的比较
例如:
QNKCDZO的md5为:
0e830400451993494058024219903391
又因为username和password不能为空,为空会跳转,所以username随便填,password填QNKCDZO,出现一个click here
在这里插入图片描述
打开发现是另一段源码:
在这里插入图片描述
看到eval函数很开心,很早以前研究过这个,这个函数由于能够把括号内的字符串当做php的代码来执行,所以在安全方面考虑是不应该使用这个函数的。
发现$ 为 定 义 可 变 变 量 , 而 v a r d u m p 会 打 印 出 变 量 的 类 型 和 内 容 , 为定义可变变量,而var_dump会打印出变量的类型和内容, vardumpGLOBALS 是PHP预定义的超级全局变量,就是说只要在这个PHP脚本中定义的变量都是$GLOBALS超级全局变量中的一个元素。
所以就考虑把这个可变变量设置为GLOBALS,然后让var_dump这个函数把所有的GLOBALS都打印出来
于是构造payload: http://118.190.152.202:8005/no_md5.php?a=GLOBALS,果然得到flag。
在这里插入图片描述

SQL注入的艺术

用sqlmap熟的同志应该很快吧这题
sqlmap -u"http://118.190.152.202:8015/index.php?id=1�’" --dbms Mysql -D baji ---------
补上手注的过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Only admin can see flag

这道题的开头还算比较客气,查看网页源代码发现
在这里插入图片描述
就直接看index.txt,结果发现是一大堆源码

<?php include 'sqlwaf.php'; define("SECRET_KEY", "................"); define("METHOD", "aes-128-cbc"); session_start(); function get_random_iv(){ $iv=''; for($i=0;$i<16;$i++){ $iv.=chr(rand(1,255)); } return $iv; } ...... (太长了,不贴了) 看到sqlwaf.php直接放弃所有注入攻击或者跨站,肯定上了waf,不能打的。 看了第一个define就知道这个是CBC反转攻击。 源代码是用CBC加密了编码后的cookies,然后最后做了很多交互,使得最后的session[username]可以等于admin,然后显示flag,如果中间解密或者解码的步骤出错,就不会显示,如果直接post username也会因为没有正确解密cookie而没法被认证为admin。但是这道题给了可以操作cookies的机会,即使post的username不为admin,也可以通过改变我们的cookies使得最后session[username]=admin 具体分析如下: 有两种判断(对应if(isset($_POST['username']) && isset($_POST['password'])) 和 else)。 第一种:对输入的username进行了判断,如果是admin就说不允许登录,不是admin就说只有admin才能看到flag,这种判断方式,在login() 中赋值了$_SESSION["username"] ,又在show_homepage() 中使用了这个值来判断,我们没办法在这一过程中修改$_SESSION["username"],从而也就是没办法拿到flag。 还有另外一种是判断有没有 $_SESSION["username"] ,有的话,就在check_login() 函数中读取cookie值,然后做处理,给$_SESSION["username"] 赋值,最终给show_homepage() 使用。在这个过程中,我们可以操作cookie的值,使最终赋值给$_SESSION["username"] 的值是admin,这样就可以绕过在show_homepage() 函数中,通过验证,拿到flag了。 那我们要做的事情就是修改两个cookie 值,让他们在经过解码,解密之后,可以得到admin,而不是我们最开始输入的admiN 。 cbc字节反转攻击,就是借助了cbc内部的模式,修改某一组密文的某个字节,导致在下一明文当中具有相同的偏移量的字节发生变化。这道题中的明文是(16个一组): 自己写一个php把16个一组的序列跑出来 <?php $username = (string)$_POST['username']; $password = (string)$_POST['password']; $info = array('username'=>$username,'password'=>$password); $plain = serialize($info); echo $plain; ?>

最后可以得到
在这里插入图片描述
a:2:{s:8:“userna
me”;s:5:“admiN”;
s:8:“password”;s
:4:“aaaa”;}

我们想改变第二组中的N,那就要改变第一组中相同偏移量r
在这里插入图片描述
先获取到用admiN账号登录时的cookies
在这里插入图片描述
iv=UbDOgpUtDcQ0opz2igOhuA%3D%3D;
cipher=y3XfpFjkb0fAGGGc1KxGIjK124eYt7Hy7CDVImZwYdKjSoKwe%2BcbWIXXQkdH3foD8Y6v6Zlg%2FwRr7H%2FYEm4JxA%3D%3D

修改cipher的脚本原理为:
#cipher[13] ^ 解密(cipher[13 + 16]) = ‘N’ 这是正常情况下的解密过程
#cipher[13] ^ ‘N’ ^ ‘n’ ^ 解密(cipher[13 + 16]) = ‘N’ ^ ‘N’ ^ ‘n’
脚本如下
代入修改前的iv和cipher
在这里插入图片描述
结果为
在这里插入图片描述
跑出来的就是修改后的cipher,用这个cipher替换原来的
在这里插入图片描述
发现报错,实际上是进入了源代码的这里
在这里插入图片描述
所以得到的应该是一个不能解码的假名文:
VLRMeqS4crnn1WmCXtgWYm1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjU6ImFkbWluIjt9
表明翻转成功。

所以我们进行修改iv,进行解密:
在这里插入图片描述
然后得到修改后的iv向量:
在这里插入图片描述
替换原来的iv
就得到flag了

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值