
URL: No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Vector: '"><svg onload=alert('pytness')>
Reportado: No
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes MenúNo tienes permitido ver enlaces. Registrate o Entra a tu cuentaLleva caida bastante tiempo, desde el año pasado un poco antes de navidades.
Recién ahora después de tanto tiempo me doy cuenta de algo y encima la página al parecer está caída
Podría haber intentado subir una webshell utilizando la técnica de null byte, porque el único problema era que agregaba .jpg a la extensión del archivo.
<?php
if (!isset($_POST['img'])) {
?>
<!DOCTYPE html>
<html>
<head>
<title>Import JS</title>
<style>
html, body {
height: 100%;
width: 100%;
margin: 0px;
padding: 0px;
overflow: hidden;
text-align: -webkit-center;
text-align: -moz-center;
background-color: green;
background: repeating-linear-gradient(90deg, #4B4B4B 0%, #737373 100%);
}
.thumb {
max-width: 100%;
max-height: 100%;
}
.c_container {
width: 800px;
height: 450px;
box-shadow: 0px 2px 5px -2px black;
}
canvas {
}
.interface {
height: 600px;
width: 800px;
margin-top: 50px;
background-color: white;
box-shadow: 0px 2px 10px -2px black;
text-align: left;
}
.button {
margin-top: 10px;
}
</style>
</head>
<body>
<div class="interface">
<div class="c_container" id="img"></div>
<input type="file" style="display: none" id="files"/>
<input type="button" class="button" onclick="document.getElementById('files').click()" value="Get Image">
<br>
<input type="button" class="button" onclick="upload()" value="Upload">
<br />
Url: <span id="url"></span><br />
<input type="button" class="button" onclick="copyLink()" value="Copy Url">
</div>
<script>
var imgData = '';
function fileSelected(evt) {
var files = evt.target.files;
for (var i = 0, f; f = files[i]; i++) {
if (!f.type.match('[.]*\.(png|jpeg|jpg|ico)')) {
alert('Must be a png');
return false;
}
var reader = new FileReader();
reader.onload = (function(theFile) {
return function(e) {
imgData = e.target.result.replace('/x-icon;', '/png;').replace('/jpeg;', '/png;').replace('/jpg;', '/png;').replace('/gif;', '/png;');
document.getElementById('img').innerHTML = '<img class="thumb" src="'+ imgData + '"/>';
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
function rand(min, max) {
return Math.floor(Math.random() * parseInt(max)) + parseInt(min);
}
function copyLink() {
prompt('Crtl + C, Enter', document.getElementById('url').innerHTML);
}
function upload() {
var ajax = new XMLHttpRequest();
ajax.open('POST', "./up.php", true);
ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajax.onreadystatechange = function() {
if (ajax.readyState === 4 && ajax.status == 200) {
document.getElementById('url').innerHTML='http://carta.es/dibujos/' + ajax.responseText + '.png';
}
};
var postData = 'img=' + imgData;
// alert(postData);
ajax.send(postData);
}
document.getElementById('files').addEventListener('change', fileSelected, false);
</script>
</body>
</html>
<?php
} else {
$imgData = $_POST['img'];
$url = 'http://www.carta.es/save.php';
$data = array(
'nombre' => 'Linus Torvalds',
'edad' => rand(1, 99),
'bien' => 'No',
'lista' => 'dscsdv',
'dibujo' => $imgData,
'email' => '[email protected]',
'padre' => 'Linus Torvalds',
);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
echo file_get_contents($url, false, $context);
}
?>
No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Se podrá subir una webshell? Mmmm, naah porque siempre lo guarda en un png. Pero podrías crear una página web que use sus servicios para subir fotos, es decir sirve como un uploader, jaja.
Otro dato es que no tiene ningún tipo de restricción al parecer en lo que respecta al tamaño de la imagen, se podría hacer un script que suba imágenes de 5megas o más grande aún en cada consulta, eso sería mucha maldad.
Creo que también lo podrías usar como spammer o simplemente para molestar porque pide el correo donde supongo que mandan la carta, en ningún momento tiene una captcha para que no se pueda automatizar todo ese proceso con un simple script en sh.
Suficiente por hoy, saludos!
import base64, hashlib
import socket, threading, time, os
class Connection:
def __init__(self, HOST, PORT):
self.HOST = HOST
self.PORT = PORT
self.magicKey = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"
def init(self):
self.socket = socket.socket()
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.socket.bind((self.HOST, self.PORT));
self.socket.listen(1);
self.conn, self.addr = self.socket.accept();
h = self.conn.recv(1024).decode("utf-8")
print(h)
self.conn.send(bytes(self.header(h).encode("utf-8")))
# threading.Thread(target = self.getData).start()
threading.Thread(target = self.getData).start()
def getKey(self, msg):
msg = msg.split("\r\n")
for x in msg:
if x.count("Sec-WebSocket-Key") != 0:
key = x.split(" ")[1]
hash = hashlib.sha1()
hash.update(bytes((key + self.magicKey).encode("utf-8")))
return base64.b64encode(hash.digest()).decode("utf-8")
def header(self, msg):
finalKey = self.getKey(msg)
print(finalKey)
header = "HTTP/1.1 101 Switching Protocols\r\n"
header += "Upgrade: websocket\r\n"
header += "Connection: Upgrade\r\n"
header += "Sec-WebSocket-Accept: " + finalKey + "\r\n"
header += "\r\n"
return header
def getData(self):
while True:
data = self.conn.recv(1024)
print(str(data))
def sendData(self):
# while True:
enviar = bytes("Test \n".encode("utf-8"))
self.conn.sendall(enviar)
connection = Connection("localhost", 7899)
connection.init()
function send(data) {
ws.send(data);
}
var op = document.getElementById("output");
op.innerHTML = '';
ws = new WebSocket('ws://localhost:7899');
ws.onopen = function (evt) {
op.innerHTML += "Open <br>";
send("test")
};
ws.onclose = function (evt) {
op.innerHTML += "Closed <br>";
};
ws.onmessage = function (evt) {
op.innerHTML += "<pre>" + evt.data + "</pre><br>";
};
ws.onerror = function (evt) {
op.innerHTML += "Error <br>";
};
GET / HTTP/1.1
Host: localhost:7899
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: file://
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0.2785.116 Safari/537.36
DNT: 1
Accept-Encoding: gzip, deflate, sdch
Accept-Language: es-ES,es;q=0.8
Sec-WebSocket-Key: rrbq+deqlkTqFTSZ4qEyGQ==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
TAPFySA27bL6vQ7S8bsd4ve14ZY=
b'\x81\x84\x95\x91P\x05\xe1\xf4#q'
import asyncio
import threading
import websockets
async def server(websocket, path):
threading.Thread(target=sendData, args=(websocket, path)).start()
threading.Thread(target=getData, args=(websocket, path)).start()
# await getData(websocket, path)
# await sendData(websocket, path)
async def getData(websocket, path):
await print(websocket.recv())
await asyncio.sleep(0.1)
def sendData(websocket, path):
while True:
websocket.send("data")
asyncio.sleep(0.5)
start_server = websockets.serve(server, 'localhost', 7979)
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()