一个拿站的过程,依赖js的危机
转载请注明 by 3x
闲来无事,拿一个站
一个购物站。。。这种站一般在找回密码这个地方有注入,看看
果然有注入,拿穿山甲开搞,搞了一会儿,奇怪,怎么猜不到表名。。。。。
手工去试试看
找回密码输入 ‘ or (select count(*) from admin)>=0 and ‘1’=’1
得到
原来是防注入…..分析了下,只要提交参数中出现了select(不分大小写),就返回这个界面,试了一些常用的编码转换,也是不行。
后来发现这个是网趣那一类的的购物系统,我下了套源码,发现原版网趣没有防注入,目标站竟然加了,哎继续看源码,希望这个防注入没有过滤cookies,不然就挂了,找呀找呀,终于找到个文件listjp.asp
代码如下
乍一看,过滤了啊,判断id是不是数字型的,还做了两次判断呢,呵呵….
不过,毛主席说过,一切敌人都是纸老虎,很幸运,这个过滤也是纸老虎(如果觉得自己能绕过的就不用回复了,嘎嘎)
分析开始:
01 |
<%if IsNumeric(request.QueryString( "id" ))= False then |
02 |
response.write( "<script>alert(" "非法访问!" ");location.href=" "index.asp" ";</script>" ) |
06 |
id=request.QueryString( "id" ) |
07 |
if not isinteger(id) then |
08 |
response.write "<script>alert(" "非法访问!" ");location.href=" "index.asp" ";</script>" |
11 |
set rs=server.createobject( "adodb.recordset" ) |
12 |
rs.open "select * from wq_jingpin where bookid=" &request( "id" ),conn,1,3 |
13 |
if rs.recordcount=0 then |
第一个用isNumberRic过滤,但取的值是queryString取的,我做了段小代码测试了下,
代码
<%
response.write(IsNumeric(request.queryString("id")))
%>
本地保存为 inum.asp
提交 inum.asp?id=
也就是说我们只要不出现id,他默认是真的
第二个用isinteger过滤 好像是自定义函数,也没去翻
各位看官注意看
if not isinteger(id) then
response.write"<script>alert(""非法访问!"");location.href=""index.asp"";</script>"
end if%>
没有response.end
我们只要把浏览器安全性设置到最高,就可以禁用js了
直接绕过
接下来就是构造cookies注入了,就不再重复
这是爆出的密码