一切都是套路
开头比较客气,试了.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会打印出变量的类型和内容,
为定义可变变量,而vardump会打印出变量的类型和内容,GLOBALS 是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,结果发现是一大堆源码
最后可以得到
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了