reede, 29. jaanuar 2010

UrlScan ja IIS6 Enable default content page

Üks asi juhtub, kui kasutad ISAPI filtrit UrlScan "valge nimekirja" režiimis ning kui annad seadistustes ette nimekirja lubatud faili laienditest mida IIS töödelda võib. ASP.NET rakenduse puhul näiteks:

[AllowExtensions]
.png
.jpg
.gif
.aspx


siis tekib robleem juhul, kui sul on IIS-i alt konfigureeritud
Web Site properties -> Documents ja seal märgitud
märkeruut Enable default content page ja vaikimisi leheks naiteks logiSisse.aspx

Kui nüüd sirviku URL peale lihtsalt www.minusait.ee kirjutada siis veebileht enam ei avane ja UrlScani logist on näha veateadet

GET / Rejected extension+not+allowed file+extension . -

Põhjus selles, et UrlScan astub ennem vahele, otsib faili laiendit . mis aga pole lubatud.
Lahenduseks ka lihtsalt . tuleb [AllowExtensions] nimekrijas lubada

[AllowExtensions]
. ; kirjuta siia lihtsalt punkt ja tühik
.png
.jpg
.gif
.aspx


ja veebileht avaneb nüüd ka sirvikul ainult www.minusait.ee sisestades Enable default content page logiSisse.aspx lehega

kolmapäev, 27. jaanuar 2010

UrlScan [AllowExtensions] ja CSS erinevate sirvikute korral

Kui võtta UrlScani nimeline ISAPI veebifilter IIS6-e peale kasutusele ja määrata seadistuses, et töötame "Valge nimekirjaga" UseAllowExtensions=1 , ehk lubame ainult teatud laienditega faile alla tirida

[AllowExtensions]
.gif
.aspx
.css

siis CSS failidega selline asi, et nende töötlemine sõltub sirvikust ja sellest, kas tegu on serveri või sirviku poolse kaskkaalaadistikuga (CSS).

Flock 2.5.2, Firefox 3.6 ja Opera 10.10 lasevad asja serveri poolel ära teha

ehk võib .css välja kommenteerida lubatavatest laienditest

[AllowExtensions]
.gif
.aspx
;.css

IE8 ja Safari 4.0.4 aga panevad pildi sirvikus endas kokku, ehk .css peab lubatavas laiendite nimekirjas olema.

Kui .txt laiend ära keelata siis tünga saavad ka need, kes robots.txt faili himustavad.

esmaspäev, 25. jaanuar 2010

Otsi stringi SQL SERVER-i andmebaasist

Kui enam meeles pole, mida kuhugi sai andmebaasi pandud siis otsimisel abiks järgnev skript:

set nocount on

DECLARE @pikkus INT, @rowID INT, @maxRowID INT, @sql NVARCHAR(4000), @searchValue NVARCHAR(100)
SET @searchValue = 'ei tööta' --seda otsitakse

DECLARE @statements TABLE (rowID INT, SQLL NVARCHAR(MAX) COLLATE DATABASE_DEFAULT)
CREATE TABLE #results (tableName NVARCHAR(250) COLLATE DATABASE_DEFAULT, tableSchema NVARCHAR(250) COLLATE DATABASE_DEFAULT
, columnName NVARCHAR(250) COLLATE DATABASE_DEFAULT, foundtext NVARCHAR(MAX) COLLATE DATABASE_DEFAULT )
SET @rowID = 1
SET @pikkus=LEN(@searchValue)

--TEXT 35
--NTEXT 99
--VARCHAR 167
--CHAR 175
--NVARCHAR, SYSNAME 231
--NCHAR 239
--XML 241

--create CTE table holding metadata
;WITH MyInfo (tableName, tableSchema, columnName, XTYPE) AS (
SELECT sysobjects.name AS tableName, USER_NAME(sysobjects.uid) AS tableSchema
, syscolumns.name AS columnName, syscolumns.XTYPE
FROM sysobjects WITH(NOLOCK) INNER JOIN syscolumns WITH(NOLOCK)
ON (sysobjects.id = syscolumns.id)
WHERE sysobjects.xtype = 'U' AND sysobjects.category=0
AND sysobjects.name <> 'sysdiagrams' --MSSQL diagramme ei vaata
AND syscolumns.XTYPE IN (35,99,167,175,231,239,214) AND syscolumns.prec >= @pikkus
)

INSERT INTO @statements
SELECT row_number() over (order by tableName, columnName) AS rowID, 'INSERT INTO #results SELECT '''+tableName+''', '''+tableSchema+''', '''+columnName+''', CAST('+columnName+' AS NVARCHAR(MAX)) FROM ['+tableSchema+'].['+tableName+'] WITH (NOLOCK) WHERE '+
CASE WHEN myInfo.XTYPE=241 --XML
THEN +'CONVERT(NVARCHAR(MAX),['+columnName+'])'
ELSE '['+columnName+']'
END+' LIKE ''%'+@searchValue+'%'''
FROM myInfo

SET @maxRowID = ( SELECT MAX(rowID) FROM @statements )
WHILE @rowID <= @maxRowID
BEGIN
SET @sql = (SELECT sqll FROM @statements WHERE rowID = @rowID )
EXEC sp_executeSQL @sql
SET @rowID = @rowID + 1
END

SELECT * FROM #results
drop table #results

neljapäev, 21. jaanuar 2010

Request.UrlReferrer abil päringuketramise takistamine "Valge" nimekirja põhiselt

Kui ei taha, et kõiksugu päringuketramist kasutavad vahendid (otsimootorid ja häkkerautomaadid) hakkavad sinu veebirakendust susima ja seal auke leidma võib kasutada
meetodit, kus näiteks MasterPage sees kontrollid UrlReferrer sisu "Valge" nimekirja alusel.

protected void Page_Load(object sender, EventArgs e)
{
if (!((this.Request.UrlReferrer.ToString().Contains("RakenduseRoll"))
|| (this.Request.UrlReferrer.ToString().Contains("login.aspx"))
))
{
Response.Redirect("~/login.aspx");
}
}

ehk kui UrlReferrer sisu pole sobiv, siis suunad avalehele tagasi.
Senikaua kuni UrlReferrer sisu ära taibata üritatakse võid ennast muretumalt tunda.
Kõrvalnähuna tuleb VisualStudio veebiteste modifitseerida ja nii mõnigi muu asi võib katki minna ehk eelnevalt kindlasti kontrollida kas
this.Request.UrlReferrer==null

kolmapäev, 13. jaanuar 2010

requestFiltering maxQueryString ja Sys.WebForms.PageRequestManager is null or not an object viga

Selline hea tahtmine, et piirame IIS7 peal requestFilteringiga päringu pikkust mida IIS7 vastu võtab

Kui juhtub, et IE8 hakkab veebilehele vasakul allääres näitama kollast hüüumärgiga kolmnurka
tekstiga "Valmis, kuid lehel on tõrkeid" (Firefox 3.5.7, Opera 10.10 ja Safari 4.0.4 ei näita midagi kahtlast)ning kui selle hüüumärgiga kolmnurga peal topeltlikkida tuleb veateade
Sys.WebForms.PageRequestManager is null or not an object

ehk veebilehel võetakse AJAX-i toimimine maha

siis korda saab nii, et seda maxQueryString parameetri väärtust tuleb suurendanda

teisipäev, 5. jaanuar 2010

SQLSERVER loginid nõrkade salakoodidega

Otsib välja need SQL SERVER-i loginid, mille salakood on etteantud nimekirjas või salakoodiks on kasutajatunnus või kasutajatunnus pööratult

Käivitage skript ning olge loov, julm ja metoodiline nõrkuste ravimisel. Ärge halastage kellelegi !!

USE [master]
DECLARE @WeakPwdList TABLE(WeakPwd NVARCHAR(255) COLLATE DATABASE_DEFAULT )
--Nõrkade salakoodide nimekiri
--@@Name on selleks, et testida kas salakoodiks on kasutajatunnus
INSERT INTO @WeakPwdList(WeakPwd)
SELECT ''
UNION SELECT '123'
UNION SELECT '1234'
UNION SELECT '12345'
UNION SELECT '123456'
UNION SELECT 'abc'
UNION SELECT 'abc123'
UNION SELECT 'qwerty'
UNION SELECT 'qwert'
UNION SELECT 'qwer'
UNION SELECT 'asdfg'
UNION SELECT 'asdf'
UNION SELECT 'asd'
UNION SELECT 'default'
UNION SELECT 'guest'
UNION SELECT '@@Name123'
UNION SELECT '@@Name12'
UNION SELECT '@@Name1'
UNION SELECT '@@Name'
UNION SELECT '@@Name@@Name'
UNION SELECT '@@Name1@@Name'
UNION SELECT '@@Name12@@Name'
UNION SELECT '@@Name123@@Name'
UNION SELECT 'admin'
UNION SELECT 'Administrator'
UNION SELECT 'admin123'
--SELECT * FROM @WeakPwdList
SELECT sql_logins.name AS [LoginName],
CASE
WHEN PWDCOMPARE(REPLACE(t2.WeakPwd,'@@Name',REVERSE(sql_logins.name)),password_hash) = 0 THEN REPLACE(t2.WeakPwd,'@@Name',sql_logins.name)
ELSE REPLACE(t2.WeakPwd,'@@Name',REVERSE(sql_logins.name))
END AS [Password]
,sql_logins.default_database_name,sql_logins.is_policy_checked,sql_logins.is_expiration_checked,sql_logins.is_disabled
,(SELECT suser_sname(owner_sid) FROM sys.databases WHERE databases.name = sql_logins.default_database_name) AS database_owner
FROM sys.sql_logins INNER JOIN @WeakPwdList t2 ON (PWDCOMPARE(t2.WeakPwd, password_hash) = 1
OR PWDCOMPARE(REPLACE(t2.WeakPwd,'@@Name',sql_logins.name),password_hash) = 1
OR PWDCOMPARE(REPLACE(t2.WeakPwd,'@@Name',REVERSE(sql_logins.name)),password_hash) = 1 )
--WHERE sql_logins.is_disabled=0
ORDER BY sql_logins.name


SQL LOGIN-eid saab sundida jälgima Windows Serveri policy-t
http://technet.microsoft.com/en-us/library/cc875814.aspx

Kontrollige, et Windowsi policyt oleksid peale seatud
ja SQL SERVERIS kasutajate tegemisel või muutmisel CHECK_POLICY = ON