only_sql
solved
给了hint:LOAD DATA
直接开搜
后面看到这篇文章,知道是通过连接恶意服务端读取客户端的文件
自己在vps上用docker起个mysql,然后直接用文章里的payload就可以了load data local infile "/etc/passwd" into table TestTable FIELDS TERMINATED BY '\n';
,不过要自己先在vps的mysql创建一个写读到文件的表
成功读到/etc/passwd,不过/proc/1/cmdline返回都是空,估计是没有权限吧
后面读/var/www/html/query.php发现靶机本地mysql的username和password
连接上之后在secret库里发现flag表,读取得到半个flag
要成为root,根据上网查找发现是udf提权
按照文章里的步骤先收集一些信息
文章里提到了这个工具,直接复制payload
成功加载我们的自定义函数
执行命令得到完整flag
problem
1、最开始还以为是jdbc,后面用docker起个mysql连,post参数的时候看到是query.php,才发现是php环境的
2、顺便说一下起mysql的docker的问题,一定要指定password,不然一启动就exited了,最开始的时候用-d起的根本不知道为什么,后面去掉-d发现报错说没指定mysql的password
3、读文件的时候本来想用这个工具的,但是报错了
后面在工具的issue处发现也有人遇到这个问题,后面也不知道怎么解决
4、写的时候发现没有权限,还以为提不了了
后面发现是路径错了,不是plugin,而是p1ugin
5、最开始看文章里都是dll,所以也写成了dll,但是后面靶机报错说不合理的头部才发现linux环境下应该是.so文件才对
ezerp
open
去找华夏ERPv3.3源码
发现可以读取用户信息,得到admin的password的md5值,解密得到是123456 感觉不如直接弱密码 。
github上还列举了4个sql注入和1个文件上传,文件上传上去也没找到路径,sql改了它的payload好像也没什么回显。
骗人的中等,浪费了我半场比赛的时间
本来想本地启个一样的docker
FROM alpine:3.6
# 添加 jshERP-bin 和 jshERP-web
ADD jshERP-bin/jshERP /home/jshERP/jshERP-boot
RUN chmod 777 -R /home/jshERP/jshERP-boot
ADD dist/dist /home/jshERP/jshERP-web
ADD nginx.conf /tmp/nginx.conf
RUN addgroup -S -g 1000 redis && adduser -S -G redis -u 999 redis
ENV JAVA_HOME=/usr/lib/jvm/java-1.8-openjdk
# 换源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories &&\
apk add --no-cache tzdata bash &&\
ln -sf /bin/bash /bin/sh &&\
ln -sf /usr/share/zoneinfo/${TZ} /etc/localtime &&\
echo ${TZ} > /etc/timezone &&\
apk add --no-cache bash curl nginx openrc mysql mysql-client redis openjdk8-jre &&\
# NGINX
adduser -D -g 'www' www &&\
mkdir /www &&\
chown -R www:www /var/lib/nginx &&\
chown -R www:www /www &&\
mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig &&\
mkdir /run/nginx/ &&\
mv /tmp/nginx.conf /etc/nginx/nginx.conf &&\
# MYSQL
mkdir -p /run/mysqld &&\
chown -R mysql:mysql /run/mysqld &&\
chown -R mysql:mysql /var/lib/mysql &&\
mysql_install_db --user=mysql --ldata=/var/lib/mysql &&\
# OPENRC
sed -i 's/#rc_sys=""/rc_sys="lxc"/g' /etc/rc.conf &&\
echo 'rc_provide="loopback net"' >> /etc/rc.conf &&\
sed -i 's/^#\(rc_logger="YES"\)$/\1/' /etc/rc.conf &&\
sed -i '/tty/d' /etc/inittab &&\
sed -i 's/hostname $opts/# hostname $opts/g' /etc/init.d/hostname &&\
sed -i 's/mount -t tmpfs/# mount -t tmpfs/g' /lib/rc/sh/init.sh &&\
sed -i 's/cgroup_add_service /# cgroup_add_service /g' /lib/rc/sh/openrc-run.sh &&\
echo 'rc_provide="loopback net"' >> /etc/rc.conf &&\
/sbin/openrc &&\
touch /run/openrc/softlevel &&\
# 启动nignx mariadb redis
rc-update add nginx default &&\
rc-update add mariadb default &&\
rc-update add redis default && \
# BASH
touch /root/.bashrc &&\
echo "export PS1='\h:\w\\\$ '" >> /root/.bashrc &&\
echo "alias r='fc -e -'" >> /root/.bashrc &&\
echo "set -o vi" >> /root/.bashrc &&\
# SET MYSQL ROOT PASSWORD
service mariadb start &&\
mysqladmin -u root password "root" &&\
#导入数据库
mysql -u root -proot -e "CREATE DATABASE jsh_erp" &&\
mysql -u root -proot jsh_erp < /home/jshERP/jshERP-boot/docs/jsh_erp.sql &&\
# 设置redis \
chmod 777 /etc/redis.conf &&\
sed -i 's/# requirepass foobared/requirepass 1234abcd/g' /etc/redis.conf &&\
# CLEANUP
rm -rf /var/cache/apk/* &&\
rm -rf /tmp/* &&\
cd /home/jshERP/jshERP-boot
WORKDIR /home/jshERP/jshERP-boot
EXPOSE 3000 9999 6379 3306
CMD ./start.sh
ENTRYPOINT ["/sbin/init"]
#CMD ["nginx", "-g", "daemon off;"]
但是总是没法复现,所以直接暴露数据库的端口,Windows上启个jsherp去连接
应该是可以上传的,但是比赛的时候应该是没上传成功,所以才没路径
上传的时候跟之前访问getAllList路由的时候一样,绕过是否登录的判断,但是登录过应该就不用../了,没去测
弄一个弹计算器的插件
上传
自己搭的环境真的不行,算了。放弃了。