c#sql防注入模糊查询_预热挖掘SQL注入

挖掘SQL注入经验分享+基础原理

SQL注入常常出现在于数据库进行交互的地方

http请求中的user-agent,client-ip,x-forward-for等可能会被程序存储到数据库中的地方。另外,在订单处理的地方,由于业务逻辑复杂,经常会有二次注入漏洞。

 GET /test.php HTTP/1.1Host: 127.0.0.1User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:48.0) Gecko/20100101 Firefox/48.0//告诉服务器把客户端的信息Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1X-Forwarded-For: 8.8.8.8//XXF头,用于显示客户端的IP地址可以有多个,用逗号隔开。Connection: keep-aliveUpgrade-Insecure-Requests: 1Cache-Control: max-age=0

• User-Agent:使得服务器能够识别客户使用的操作系统,游览器版本等.(很多数据量大的网站中会 记录客户使用的操作系统或浏览器版本等存入数据库中)

• Cookie:网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)

• X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP,(通常一些网站的防 注入功能会记录请求端真实IP地址并写入数据库or某文件[通过修改XXF头可以实现伪造IP])

• Clien-IP:本机IP

• Rerferer:浏览器向 WEB 服务器表明自己是从哪个页面链接过来的

• Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

普通注入

普通注入指直接可以用工具进行注入的漏洞,相对简单,手工union联合查询就直接查询的漏洞,如下所示

我们常见的漏洞方式有两种,一种是int一种是string(整型与字符串型),在string中注入需要使用单双引号进行闭合下面演示下

打开Navicat建立一个数据库admin,建立use表,

输入命令

 mysql> INSERT INTO user(id,username,password,email)VALUES(3,"admin1","123546","13@163.com");Query OK, 1 row affectedmysql> INSERT INTO user(id,username,password,email)VALUES(4,"admin3","123546","1123@163.com");Query OK, 1 row affectedmysql> INSERT INTO user(id,username,password,email)VALUES(2,"admin","123546","12113@163.com");Query OK, 1 row affected

141a6645ced88af173f9f52287400f35.png

增删改查常见的语句

增加数据;insert into库(列1,列2.....)values(值1,值2...)

 INSERT INTO user(id,username,password,email)VALUES(3,"admin1","123546","13@163.com");

插入admin里的user(id,username,password,email)

e38ed9ba8596153a96b8f13851a40b5b.png

values()指与上方对应的数据运行语句

 INSERT INTO admin.user(id,username,password,email)VALUES(4,"admin4","123546","13ghsd@163.com");

c08d51f11c274bb562613ce5a2cc5d21.png

9e768b444bccd67a436b0c5f0ee5aa0f.png

我们已经添加成功了

查询语句select*from admin.user where id

这条语句是我们最常见的,往往的注入也是又这里产生,当最简单的整型注入在后面加入单引号看返回值,返回错误,以及and 1=1,and 1=2的逻辑判断。

数字型注入测试步骤与背后的查询

假设URL为http://www.shentouyun.com/test.php?id=87

http://www.shentouyun.com/test.php?id=87‘

其背后的语句为select*from table where id=87'

这样的语句往往会出错,导致页面不能正常进行显示

http://www.shentouyun.com/test.php?id=87 and1=1

select*from table where id=87and1=1

页面正常,返回数据与正常数据相同

http://www.shentouyun.com/test.php?id=87and1=2

这回的SQL语句编程

select*from table where id=87'and1=2,

虽然语句正常,但是无法查询数据,因为and 1=2始终为假,其返回页面与原始请求有差异,

字符型注入与其大同小异

当输入是字符串时,其注入需要单引号闭合,字符型注入最关键的是怎么去闭合SQL语句以及去注释多余的代码,当查询内容为字符串时,SQL语句如下

select*from table where username=’admin‘

当字符型注入 and1=1为什么不能去正常查询,看如下语句

select * from table where username='admin and 1=1'

因为admin and1=1 会被数据库当做查询的字符串如果想要注入就要考虑字符串的闭合问题,

select * from table where username='admin 'and 1=1--'

测试源码

 <?php $servername = "localhost";$dbusername = "root";$dbpassword = "root";$dbname = "admin";$id=$_GET['id'];//id未经过滤$conn=mysql_connect($servername,$dbusername,$dbpassword) or die ("数据库连接失败");mysql_select_db($dbname,$conn);mysql_query('set names utf8');$sql = "SELECT * FROM article WHERE articleid='$id'";echo $sql."
";$result = mysql_query($sql,$conn);$row = mysql_fetch_array($result);echo "

利用SQL注入漏洞拖库

";

if (!$row){echo "该记录不存在";exit;}echo "标题
".$row['title']."

";

echo "内容
".$row['content']."

";

?>

在审计里我的做法是

查找输入点,跟随输入信息,是否可利用,构造注入语句,验证漏洞,

本文预热下,技术点不高,在之前的文章中也有讲过,关于SQL注入的文章还有很多要写,包括代码审计,都是要往下推得,实话如果要那种技术含量特别深的,我可能会两天一更或者三天一更来更好的去架构正篇文章从使用的代码,原理,利用,工具来写,时间充分我还会更好的去思考整篇文章。

另外在此文中鼓励两位小伙伴

清茶以及Tone感谢两位大佬在渗透云笔记的官方群里长期活跃,也希望两位大佬的技术更上一层,希望渗透云能够和你们一起进步

清茶以及Tone感谢两位大佬在渗透云笔记的官方群里长期活跃,也希望两位大佬的技术更上一层,希望渗透云能够和你们一起进步

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值