CHHHCHHOH 's BLOG

西湖论剑2024

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路由的时候一样,绕过是否登录的判断,但是登录过应该就不用../了,没去测
弄一个弹计算器的插件

上传

自己搭的环境真的不行,算了。放弃了。

添加新评论