Sunteți pe pagina 1din 12

EJERCICIOS

UNIDAD 2.
OBJETIVO.

Determinar si existen vulnerabilidades en los programas que se muestran a


continuacin y corregirlos en caso necesario.

ENUNCIADO.

Ejercicio 1

El siguiente cdigo presenta una o varias vulnerabilidades, cules son? Mostrar


una captura de pantalla que demuestre la/s vulnerabilidad/es existentes e
indicar una solucin que elimine estos bugs en el programa

import java.io.*;
import java.lang.*;
public class Main {
public static void main(String[] args) {
try {
System.out.println("Por favor, introduzca su nombre:");
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String buf = br.readLine();

Runtime runtime = Runtime.getRuntime();


String[] catCommand = new String[3];
catCommand[0] = "/bin/sh";
catCommand[1] = "-c";
catCommand[2] = "cat /home/centos/" + buf;
Process proc = runtime.exec(catCommand);
InputStream isAux = proc.getInputStream();
InputStreamReader isrAux = new InputStreamReader(isAux);
BufferedReader brAux = new BufferedReader(isrAux);
String line;
while ((line = brAux.readLine()) != null) {
System.out.println(line);
}
}
catch (Exception exc) {
exc.printStackTrace();
}

}
}

Notas:

El cdigo se encuentra en la ruta:


/home/centos/cursoSCJ/Practicas/Practica2/ejercicio1
Sintaxis para compilar: desde el directorio ejercicio1 ejecutar
javac Main.java
Sintaxis para ejecutar
java Main

Ejercicio 2
Detectas alguna vulnerabilidad en el siguiente programa? En caso de ser as,
demustralo y propn una solucin. Para la solucin propuesta, demuestra que
con el mismo ataque anterior, el programa ya no presenta la vulnerabilidad.
Para acceder a este servlet, la URL de llamada es:
http://IP:8080/Practica2Ejer2/login.html
Cdigo login.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">


<HTML>
<HEAD>
<TITLE>SQL INJECTION EXAMPLE</TITLE>
</HEAD>
<BODY>
<FORM ACTION="servlet/Ejercicio2" METHOD="POST">
Nombre: <INPUT TYPE="TEXT" NAME="usuario"/><BR/>
Clave: <INPUT TYPE="TEXT" NAME="password"/><BR/>
<CENTER>
<INPUT TYPE="SUBMIT" VALUE="Submit Order"/>
</CENTER>
</FORM>
</BODY>
</HTML>

Cdigo Ejercicio2.java

package com.s21sec.cursoASA;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.DriverManager;

public class Ejercicio2 extends HttpServlet {


public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
String usuario = req.getParameter("usuario");
String password = req.getParameter("password");
String consulta = "SELECT identificador from usuarios WHERE username='" +
usuario + "' and password='" + password + "'";
Class.forName("org.postgresql.Driver");
conn =
DriverManager.getConnection("jdbc:postgresql://127.0.0.1:5432/cursoSCJ","userSCJ",
"supersecret");
stmt = conn.createStatement();
rs = stmt.executeQuery(consulta);
if (rs.next()) {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("Hello, " + usuario);
out.println("</BODY></HTML>");
}
else
{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<BODY>");
out.println("No tiene acceso");
out.println("</BODY></HTML>");
}
}
catch (Exception exc) {
exc.printStackTrace();
}
finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}

public void doPost(HttpServletRequest req, HttpServletResponse res) throws


ServletException, IOException {
doGet(req,res);
}
}

Notas:

El cdigo se encuentra en la ruta: /usr/local/apache-tomcat-


7.0.33/webapps/Practica2Ejer2

Para compilarlo, desde el directorio Practica2Ejer2:


javac -classpath "WEB-INF/classes/.:WEB-INF/lib/servlet.jar:WEB-
INF/lib/postgresql-8.3-603.jdbc3.jar" /usr/local/apache-tomcat-
7.0.33/webapps/Practica2Ejer2/src/com/s21sec/cursoASA/Ejercicio2.java

Nos deja el Ejercicio2.class en la misma ruta que el .java. Hay que copiar
este .class en /usr/local/apache-tomcat-7.0.33/webapps/Practica2Ejer2/WEB-
INF/classes/com/s21sec/cursoASA

Como definimos el servlet Ejercicio2 en el web.xml, hay que reiniciar el


tomcat. Para ello, desde /usr/local/apache-tomcat-7.0.33/bin ejecutamos:
sudo ./catalina.sh stop
sudo ./catalina.sh start

Ejercicio 3.
Detectas alguna vulnerabilidad en el siguiente programa? En caso de ser as,
demustralo y propn una solucin. Para la solucin propuesta, demuestra que
con el mismo ataque anterior, el programa ya no presenta la vulnerabilidad.

ejercicio.jsp

<%@page import="java.io.*"%>
<%@page import="java.lang.*"%>

<%
String comentarios = null;
if (request.getParameter("comments") != null &&
request.getParameter("comments").length() > 0) {
comentarios = request.getParameter("comments");
}

String filename = "/usr/local/apache-tomcat-


7.0.33/webapps/Practica2Ejer3/comments.txt";
if (comentarios != null) {
FileInputStream fis = null;
BufferedInputStream bis = null;
DataInputStream dis = null;
try {
//write the comments to comments.txt, then close up the file operation
FileWriter fw = new FileWriter(filename,true);
BufferedWriter bw = new BufferedWriter(fw);
bw.write(comentarios + "\n");
bw.close();

// open up comments.txt for reading, read from it, then close it


File fr = new File(filename);
fis = new FileInputStream(fr);
bis = new BufferedInputStream(fis);
dis = new DataInputStream(bis);
StringBuffer allComments = new StringBuffer();
while (dis.available() != 0){
String aa = dis.readLine();
allComments.append(aa);
}

fis.close();
bis.close();
dis.close();
out.print(allComments);
}
catch (Exception e) {e.printStackTrace();}
}
else {%>
<html>
<body>
<form action="ejercicio.jsp" method="GET">
Comments: <input type="text" name="comments"><br>
<input type="submit" value="Comment on Guestbook">
</form>
</body>
</html>
<%}%>

Notas:
El cdigo se encuentra en

/usr/local/apache-tomcat-7.0.33/webapps/Practica2Ejer3

Ejercicio 4

El siguiente cdigo presenta una vulnerabilidad de xss, podrais explotarlo?


Modificar el cdigo con los cambios necesarios para eliminar el bug.

formulario.html

<HTML>
<BODY>
<BR>
<FORM METHOD="get" ACTION="xss.jsp">
<INPUT TYPE="text" NAME="vuln"/>
<BR/><BR/>
<INPUT TYPE="submit" VALUE="enviar"/>
</FORM>
</BODY>
</HTML>

xss.jsp

<html>
<head><title>ejercicio8</title></head>
<body>
<% String variable = request.getParameter("vuln");%>
Has escrito: <input type="text" value="<% out.print(variable);%>"/>
</body>
</html>

Notas:
el cdigo se encuentra disponible en /usr/local/apache-tomcat-
7.0.33/webapps/Practica2Ejer4

Ejercicio 5

Supongamos que queremos que nuestra aplicacin slo pueda acceder a las
webs que muestra la pgina navigation.htm
Consideras que esta aplicacin lo cumple? Es esta aplicacin sensible a un
ataque cross-frame-scripting? En caso de que as lo sea, propn una solucin
para que la aplicacin haga lo que se requiere.
XFSIndex.jsp

<html>
<head><title>Welcome to my site</title></head>
<frameset rows="*" cols="150,*" frameborder="no" border="0">
<frame src="navigation.htm" name="navigation" frameborder="yes"
scrolling="no" bordercolor="#0000CC" id="navigation"/>
<frameset rows="500,*" cols="*" frameborder="no">
<frame src="<% if (request.getParameter("iframe") != null)
out.print(request.getParameter("iframe"));
else out.print("noacceso.htm");%>" name="corps"
id="corps"/>
<noframes>No frames</noframes>
</frameset>
</frameset>
</html>

navigation.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html";charset="utf-8"/>
<title>Menu</title>
</head>
<body bgcolor="#CCCCCC">
<pre>&nbsp;</pre>
<ul>
<li>
<a href="XFSIndex.jsp?iframe=http://www.google.com"
target="_parent">google</a>
</li>
<li>
<a href="XFSIndex.jsp?iframe=http://www.elmundo.es"
target="_parent">el mundo</a>
</li>
</ul>
<p>&nbsp;</p>
</body>
</html>

noacceso.htm

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Acceso</title>
</head>
<body bgcolor="#FFCC66">
<h1>El acceso a esta web no esta permitido</h1>
</body>
</html>

Nota
el cdigo se encuentra disponible en /usr/local/apache-tomcat-
7.0.33/webapps/Practica2Ejer5

Ejercicio 6

Indicar junto con una explicacin la opcin correcta en las siguientes preguntas

1. Cul es la tcnica de ataque utilizada para explotar sitios web mediante la


alteracin de consultas de BD?
A. LDAP Injection
B. XML Injection
C. SQL Injection
D. Bling XML Injection

2. Ataque que explota la confianza que un sitio tiene en el navegador de un


usuario
A. Session Hijacking
B. Cross Site Request Forgery
C. Inyeccin
D. XFS (Cross Frame Scripting)

3. Qu sucede cuando una aplicacin toma los datos introducidos por un usuario
y los enva al navegador web sin realizar una correcta validacin y escapado
de los datos?
A. Configuracin incorrecta de seguridad
B. XSS
C. CSRF
D. Referencia indirecta a objetos

4. Qu ataque puede ejecutar scripts en el navegador y es capaz de robar


sesiones de usuario o redirigir al usuario a sitios maliciosos?
A. Inyeccin SQL
B. XSS
C. Subida de software malicioso
D. Man in the Middle
5. Qu ataque se puede evitar si protegemos con un token aleatorio cada enlace
y formulario que pueda provocar una accin en la aplicacin (por ejemplo, una
compra)?
A. Inyeccin de comandos
B. Cross Site Scripting
C. Cross Site Request Forgery
D. Cross Site Tracing

6. Las vulnerabilidades de inyeccin SQL se pueden evitar aplicando el siguiente


algoritmo a cada entrada de usuario: sustituyendo cada aparicin de & con
&amp; las de < con &lt;, las de > con &gt; y las de con &quot;
A. Verdadero
B. Falso

7. Esta tcnica de ataque se utiliza cuando una aplicacin web es vulnerable a un


ataque de inyeccin SQL pero los resultados de la inyeccin no son visibles
para el atacante.
A. Unique SQL Injection
B. Blind SQL Injection
C. Generic SQL Injection
D. Double SQL Injection

8. Se trata de un ataque que aprovecha que la pgina web muestra los datos de
usuario sin antes validarlos.

<a
href=http://pagina.com/index.html?id=%3Cscript%20src=%22http://paginamaligna.com
/badscript.js%22%3E%3C/script%3E>Mira este enlace, muy interesante</a>
A qu ataque nos referimos?
A. Cross Site Scripting
B. SQL Injection
C. Http Response Split
D. Desbordamiento de buffer

9. Identifica qu tipo de ataque se est produciendo en el siguiente diagrama


A. Ataque CSRF
B. Ataque SQL Injection
C. Ataque XSS
D. Ataque de fijacin de sesin

10. En un ataque XSS tpico, el atacante infecta una pgina web legtima con
cdigo malicioso. Cuando un usuario visita esta pgina, el cdigo se descarga
y se ejecuta en el navegador del usuario
A. Verdadero
B. Falso
SPAIN MEXICO BRAZIL UK USA

S-ar putea să vă placă și