5月月赛总结

WriteUp

web1是一道正则匹配绕过的…web2是一个sql注入题,web3大概也是sql注入吧。

Web1

源码贴出来:

<?php
error_reporting(0);
if(!isset($_GET['act']) || !isset($_GET['p'])){
    highlight_file(__FILE__);
    exit();
}
if(trim($_GET['act']) === "" || trim($_GET['p']) === ""){
    die('no null!');
}
$act = $_GET['act'];
$act = addslashes($act);
$p = $_GET['p'];
$p = addslashes($p);
if(preg_match('/[A-Za-z0-9(){};<>`]/i',$p) == 1){
    die('waf');
}
if(preg_match('/[{};<>`]/i',$act) == 1){
    die('waf');
}
if(preg_match('/[A-Za-z0-9(){};]+\(/i',$act) == 1){
    die('hacker, your act has some problems!');
}
echo $p.$act;
echo $_;
eval($p.$act.';');

理解了大半天,最后还是把正则表达式给理解错了…心塞。

[] 是定义匹配的字符范围。比如[a-zA-Z0-9]表示相应位置的字符要匹配英文字符和数字。

p参数的限制是不能输入任何出现在[]之间的字符,单独输入字母、数字、括号等都是会被匹配到的。

act参数的限制首先是不允许输入{};<>中的任何一个字符。再其次,要求[]中的任意字符不能直接接(,刚开始理解为压根不能出现(

最终的payload为:
?p=$_&act=GET[1]()&1=phpinfo

当时做题的时候对正则表达式会一直匹配,直到结束理解不太深刻吧。

Web2

这是一道原题。suctf2018 mutilsql
做的时候可以通过盲注拿到数据库user()的值为suctf@host…当然也是运气好,恰好测试了这个字段,然后就去找原题,很顺利地找到,直接用了poc…就getshell,拿到flag了。

题目的问题是:
后台在显示用户的信息的时候,会在数据库中进行一个查询操作,这里存在一个二次注入。后台的sql语句应该是:
select * from xxx where username='username'
在注册时候单引号等等应该都被过滤了,但是在再次查询时候过滤不够,导致sql注入。

参考链接:
http://www.bendawang.site/2018/05/28/SUCTF-2018-部分题解/?nsukey=YpkSt2lGloyM%2BlHh3hFfzYV1rPocVKCT7U8JS741FYca0aPXiPDHCI5iOteaUYN6ppfrs8kEPemSrzILdjpuzuP0ZsrWvZMNWbTkT2n3ADh8QjjBp6tpFds8S76Z086KRA6TTSw%2BplpLo5Zf%2BMda9hp%2Ff%2BIfXScg3dDifSKzXIwBoDXBSZes4KCdvRUWRyGXPgB4Wrj5Y1iXc50RnQDpJQ%3D%3D

Web3

没有思路,只知道过滤了一些报错注入会用到的函数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值