Peticion sql a phpMyAdmin :S

Iniciado por xustyx, 17 Abril 2013, 01:28 AM

0 Miembros y 1 Visitante están viendo este tema.

xustyx

Buenas a todos !!!

Llevo horas intentando averiguar como poder generar un formulario para hacer una peticion sql a phpmyadmin y estoy acabando de los nervios...

La pregunta es si alguien sabe a que archivo php debo realizar la consulta y que parametros necesito.

He estado con el temperdata realizando peticiones pero NPI de lo que manda ni como lo hace ya que se escapa de mis conocimientos.

Gracias y un saludo

<!-- Modificado 17/04/2013 a las 13:23 -->

Bueno aporto los siguientes datos para ver si alguien lo entiende mejor.

Tenemos el archivo querywindow.php que se encarga de mostrar la pagina para hacer la peticion el codigo del Form es el siguiente:
Código (html4strict) [Seleccionar]

<form method="post" id="sqlqueryform" target="frame_content"
              action="import.php" enctype="multipart/form-data" name="sqlform"
              onsubmit="var save_name = window.opener.parent.frame_content.name;
              window.opener.parent.frame_content.name = save_name + '1366197671';
              this.target = window.opener.parent.frame_content.name;
              return checkSqlQuery(this)">
        <input type="hidden" name="focus_querywindow" value="true" />
<input type="hidden" name="is_js_confirmed" value="0" />
<input type="hidden" name="db" value="information_schema" /><input type="hidden" name="table" value="USER_PRIVILEGES" /><input type="hidden" name="token" value="1da3fdab31690437221d1fe18cfffa59" />
<input type="hidden" name="pos" value="0" />
<input type="hidden" name="goto" value="tbl_sql.php" />
<input type="hidden" name="message_to_show" value="Su consulta se ejecutó con éxito" />
<input type="hidden" name="prev_sql_query" value="" />
<a name="querybox"></a>
<div id="queryboxcontainer">
<fieldset id="querybox">
<legend>Ejecutar la(s) consulta(s) SQL en la base de datos <a href="db_structure.php?db=information_schema&amp;token=1da3fdab31690437221d1fe18cfffa59" target="_self" onclick="this.target=window.opener.frame_content.name">information_schema</a>: <a href="./url.php?url=http%3A%2F%2Fdev.mysql.com%2Fdoc%2Frefman%2F5.5%2Fen%2Fselect.html&amp;token=1da3fdab31690437221d1fe18cfffa59" target="mysql_doc"><img src="themes/dot.gif" title="Documentación" alt="Documentación" class="icon ic_b_help" /></a></legend>
<div id="queryfieldscontainer">
<div id="sqlquerycontainer">
<textarea tabindex="100" name="sql_query" id="sqlquery"  cols="40"  rows="18.75"  dir="ltr" onkeypress="document.sqlform.elements['LockFromUpdate'].checked = true;">SELECT * FROM `USER_PRIVILEGES` WHERE 1</textarea>
<input type="button" value="SELECT *" id="selectall" class="sqlbutton" /><input type="button" value="SELECT" id="select" class="sqlbutton" /><input type="button" value="INSERT" id="insert" class="sqlbutton" /><input type="button" value="UPDATE" id="update" class="sqlbutton" /><input type="button" value="DELETE" id="delete" class="sqlbutton" /><input type="button" value="Limpiar" id="clear" class="sqlbutton" /></div>
<div id="tablefieldscontainer">
<label>Columnas</label>
<select id="tablefields" name="dummy" size="13" multiple="multiple" ondblclick="insertValueQuery()">
<option value="`GRANTEE`" title="">GRANTEE</option>
<option value="`TABLE_CATALOG`" title="">TABLE_CATALOG</option>
<option value="`PRIVILEGE_TYPE`" title="">PRIVILEGE_TYPE</option>
<option value="`IS_GRANTABLE`" title="">IS_GRANTABLE</option>
</select>
<div id="tablefieldinsertbuttoncontainer">
<input type="button" name="insert" value="&lt;&lt;" onclick="insertValueQuery()" title="Insertar" />
</div>
</div>
<div class="clearfloat"></div>
</div>
        <div id="bookmarkoptions">
        <div class="formelement">
        <label for="bkm_label">
            Guardar esta consulta en favoritos:</label>
        <input type="text" name="bkm_label" id="bkm_label" tabindex="110" value="" />
        </div>
        <div class="formelement">
        <input type="checkbox" name="bkm_all_users" tabindex="111" id="id_bkm_all_users"
            value="true" />
        <label for="id_bkm_all_users">
            Permitir que todo usuario pueda acceder a este favorito</label>
        </div>
        <div class="formelement">
        <input type="checkbox" name="bkm_replace" tabindex="112" id="id_bkm_replace"
            value="true" />
        <label for="id_bkm_replace">
            Reemplazar el favorito existente que tenga el mismo nombre</label>
        </div>
        </div>
        <div class="clearfloat"></div>
</fieldset>
</div>
<fieldset id="queryboxfooter" class="tblFooters">
<div class="formelement">
        <script type="text/javascript">
        //<![CDATA[
            document.writeln(' <input type="checkbox" name="LockFromUpdate" checked="checked" tabindex="120" id="checkbox_lock" /> <label for="checkbox_lock">No sobreescribir esta consulta desde fuera de la ventana</label> ');
        //]]>
        </script>
        </div>
<div class="formelement">
<label for="id_sql_delimiter">[ Delimitador</label>
<input type="text" name="sql_delimiter" tabindex="131" size="3" value=";" id="id_sql_delimiter" /> ]
<input type="checkbox" name="show_query" value="1" id="checkbox_show_query" tabindex="132" checked="checked" />
<label for="checkbox_show_query">Mostrar esta consulta otra vez</label>
</div>
<input type="submit" id="button_submit_query" name="SQL" tabindex="200" value="Continuar" />
<div class="clearfloat"></div>
</fieldset>
</form>


Como podeis ver la peticion la realiza a "import.php" y por ejemplo, al hacer "SELECT * FROM `USER_PRIVILEGES` y dar al submit envia el siguiente contenido.
-----------------------------12411563315856\r\nContent-Disposition: form-data; name="focus_querywindow"\r\n\r\ntrue\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="is_js_confirmed"\r\n\r\n0\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="db"\r\n\r\ninformation_schema\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="table"\r\n\r\nUSER_PRIVILEGES\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="token"\r\n\r\n1da3fdab31690437221d1fe18cfffa59\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="pos"\r\n\r\n0\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="goto"\r\n\r\ntbl_sql.php\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="message_to_show"\r\n\r\nSu consulta se ejecutó con éxito\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="prev_sql_query"\r\n\r\n\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="sql_query"\r\n\r\nSELECT * FROM `USER_PRIVILEGES`\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="bkm_label"\r\n\r\n\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="LockFromUpdate"\r\n\r\non\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="sql_delimiter"\r\n\r\n;\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="show_query"\r\n\r\n1\r\n-----------------------------12411563315856\r\nContent-Disposition: form-data; name="SQL"\r\n\r\nContinuar\r\n-----------------------------12411563315856--\r\n

Bueno, os preguntareis por que no creo yo mi propio php para hacer una consulta directa a MySql sin pasar por phpMyAdmin, la respuesta es sencilla, phpMyAdmin no tiene pass y MySql sí. Entonces quiero aprovechar el PMA para realizar la consulta automaticamente  >:D, simplemente por diversion, en general estoy programando en C# un programita que haga una consulta concreta para crear un arcihivo en el servidor, ya me entendeis "into outfile".

Antes de que digais nada, ya e probado de hacer la select manualmente desdel browser y, efectivamente, me genera el archivo (un php que me da una shell  >:D) y bueno queria automatizar un poco esto, y la idea es esa primero probar yo de crear un form como ese pero mucho mas simple para ver que valores son realmente los necesarios y como mandarlos, luego cuando sepa ya eso podre con C# adaptarlo mejor, aunke al usar tokens y puede que cookies me se complique un poco mas la cosa :S

Bueno un saludo y seguire probando en los ratos libres.

#!drvy

#1
CitarBueno, os preguntareis por que no creo yo mi propio php para hacer una consulta directa a MySql sin pasar por phpMyAdmin, la respuesta es sencilla, phpMyAdmin no tiene pass y MySql sí. Entonces quiero aprovechar el PMA para realizar la consulta automaticamente  >:D, simplemente por diversion, en general estoy programando en C# un programita que haga una consulta concreta para crear un arcihivo en el servidor, ya me entendeis "into outfile".

En realidad phpMyAdmin si tiene pass. Pero automatiza un poco el proceso. Si MySql tiene pass y phpMyAdmin no la sabe, te dará error. Recuerda que phpmyadmin no es mas que una interfaz gráfica para manejar la bd. Sigue necesitando conectarse al cliente de mysql.

Respecto a que archivo hacer la query...

import.php. Te dejo un EJEMPLO DE LO QUE SE ENVIA:
Código (http,17) [Seleccionar]
http://localhost/modules/phpmyadmin3522x130215055021/import.php

POST /modules/phpmyadmin3522x130215055021/import.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.2; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: http://localhost/modules/phpmyadmin3522x130215055021/server_sql.php
Content-Length: 275
Cookie: phpMyAdmin=k4meak9tmgl68okk4osq5h2hmstjfqjd; pma_lang=es; pma_collation_connection=utf8_general_ci
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
is_js_confirmed=0&token=1acd51c86a4bcd76b78998647a948aec&pos=0&goto=server_sql.php&message_to_show=Su+consulta+se+ejecut%C3%B3+con+%C3%A9xito&prev_sql_query=&sql_query=SELECT+*+FROM+test&bkm_label=&sql_delimiter=%3B&show_query=1&ajax_request=true&_nocache=1366214341047261776
HTTP/1.1 200 OK
Date: Wed, 17 Apr 2013 15:59:01 GMT
Server: Apache/2.4.2 (Win32) PHP/5.4.6
X-Powered-By: PHP/5.4.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-cache
Last-Modified: Sun, 12 Aug 2012 08:45:56 GMT
Content-Length: 84
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: application/json
----------------------------------------------------------


La linea marcada es la que contiene el POST. Sigo pensando que te sera mucho mas facil hacer la consulta directamente :P
PD: El archivo que contiene el formulario de la consulta se deberia de llamar server_sql.php

Saludos

xustyx

#2
Cita de: drvy | BSM en 17 Abril 2013, 18:03 PM
En realidad phpMyAdmin si tiene pass. Pero automatiza un poco el proceso. Si MySql tiene pass y phpMyAdmin no la sabe, te dará error. Recuerda que phpmyadmin no es mas que una interfaz gráfica para manejar la bd. Sigue necesitando conectarse al cliente de mysql.

Si ya lo sé, pero me referia que la base mysql tiene user y pass y el phpmyadmin (en mi caso) es decir no esta configurada aún. Entonces puedo aprovecharlo para hacer las selects :)

Por otro lado esta tarde en clase lo he mirado mejor y al final encontró como hacerla !!! :)

Ahora no me acuerdo exactamente a que archivo realizaba la peticion pero necesitaba 1 cookie, 1 token, 1 DB y la select :D, ahora pongo la info en cuanto pase el temper.

<!-- Aqui van los datos -->

El archivo php al que se le pasa el post es import.php
Los parametros obligados son:

La cookie: phpMyAdmin=79isb9gphhapb3povpm1e8obk791d255
El parametro db: information_schema
El parametro token: 79e26a48ffa98196a888b9b3ee0a5a7f
El parametro sql_query: SELECT+*+FROM+%60USER_PRIVILEGES%60

Bueno marcho para casa de un colega ahora dentro de un rato (depende xD) pondre el codigo C# de un programa de consola que pille el token y la cookie, haga el post y genere una shell en el servidor :)

PD: Me lo pasaré bien ahora que tan todos en clase instalando XAMPP y dejando todo por defecto  :silbar:

<!-- Editado -->

Ahora que pienso tambien necesitaré sacar el PATH que sera "?:\?????????\xampp\htdocs" aunque creo que ya sé de donde sacarlo ^^